home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 7 / Amiga Format AFCD07 (Dec 1996, Issue 91).iso / serious / shareware / programming / emacs-complete / emacs-diffs.lha / emacs-19.28-diffs
Text File  |  1996-04-12  |  3MB  |  80,403 lines

  1. diff -ru --new-file baseline/fsf/emacs/Checksums amiga/fsf/emacs/Checksums
  2. --- baseline/fsf/emacs/Checksums    Wed Dec 31 17:00:00 1969
  3. +++ amiga/fsf/emacs/Checksums    Sun Oct 15 17:04:48 1995
  4. @@ -0,0 +1,1052 @@
  5. +-----BEGIN PGP SIGNED MESSAGE-----
  6. +
  7. +These are the md5sum values for the files as I have distributed them.
  8. +If these are not correct, then they have been changed.
  9. +
  10. +47668a0debcdad1aa9eff6406b093af3  Emacs-19.25/cpp/cccp.c!
  11. +c6f445c9d355ae6e542402e1c3a73417  Emacs-19.25/cpp/cexp.tab.c
  12. +88b8a1f708fd39d92d31900958d4c8df  Emacs-19.25/cpp/cexp.y
  13. +51f89457fa2f8f5f94da21c0c214aea2  Emacs-19.25/cpp/lmkfile!
  14. +d41d8cd98f00b204e9800998ecf8427e  Emacs-19.25/cpp/SASCOPTS
  15. +ca4202fbd5c86c59f29c6fa840f7d465  Emacs-19.25/cpp/cccp.c
  16. +e9c388a1876fd32b50230e9e9a0b9327  Emacs-19.25/cpp/lmkfile
  17. +a96ca50dbfb3878cf061ed5589c41878  Emacs-19.25/cpp/SCOPTIONS
  18. +b0e485a86fd1e99e3251ed98c697fd09  Emacs-19.25/cpp/cccp.o
  19. +d40f1980094c2e1ee00ac2d486e11fa1  Emacs-19.25/cpp/cexp.tab.o
  20. +870e119a364e23751c23a23f57365bf7  Emacs-19.25/cpp/cccp.lnk
  21. +821de52876e8f0610db5d72ce609d151  Emacs-19.25/cpp/alloca.o
  22. +49e64df2357874e2a840ac15dba49543  Emacs-19.25/cpp/cccp
  23. +4cc8d9a8cf1eece014a4f1019306f8a3  Emacs-19.25/cpp/cccp.info
  24. +49e64df2357874e2a840ac15dba49543  Emacs-19.25/cpp/cpp
  25. +d41d8cd98f00b204e9800998ecf8427e  Emacs-19.25/etc/DOC-19.25.1
  26. +18810669f13b87348459e611d31ab760  Emacs-19.25/etc/COPYING
  27. +390ba821ef5a2fd874d882663c5748b8  Emacs-19.25/etc/3B-MAXMEM
  28. +8056e89079b8420b81e04711535cd85a  Emacs-19.25/etc/AIX.DUMP
  29. +74c39cb32da1a457b3a66108c25847ba  Emacs-19.25/etc/APPLE
  30. +0c2ed0f903bca0dddfb193b23ad04b76  Emacs-19.25/etc/BABYL
  31. +9b064adb82678e6e89bbf6726f70992a  Emacs-19.25/etc/COOKIES
  32. +35be40426c17f08e93077bb689e0109d  Emacs-19.25/etc/ChangeLog
  33. +da4463a085b74bc7ea6d03a75cd0eb66  Emacs-19.25/etc/DEBUG
  34. +501b6eb78f3f211c0d7f821c04cf9f58  Emacs-19.25/etc/DISTRIB
  35. +138d72f19dc5e5e65b95e65e93839b53  Emacs-19.25/etc/FAQ
  36. +93ee7251b3ab77ef66832846af5468c3  Emacs-19.25/etc/FTP
  37. +60feadeea2f0d0c1a7d124ca681d82c6  Emacs-19.25/etc/GNU
  38. +cef68ee87fcbc261d339b3f8c0aa6ebe  Emacs-19.25/etc/INTERVIEW
  39. +4924b2510a8740650667b5cea0519a02  Emacs-19.25/etc/JOKES
  40. +4b978e06b3c3d0b230231706d23cc506  Emacs-19.25/etc/LEDIT
  41. +e13f930d18bebd794fd6c4f8ba1239b0  Emacs-19.25/etc/LNEWS
  42. +dcf50a86dec83c63e92f3ddc2d23f740  Emacs-19.25/etc/LPF
  43. +79fd007f8358f7af370cc3897ad5c624  Emacs-19.25/etc/MACHINES
  44. +3f30705391bc352121d16fba99bfb5f0  Emacs-19.25/etc/MAILINGLISTS
  45. +ab732308ac4cf1eb253ecf1597f11276  Emacs-19.25/etc/MORE.STUFF
  46. +f6254f4f9b61c5deac9fc5e6c639a87d  Emacs-19.25/etc/MOTIVATION
  47. +9be9621e76047b404fe83c7c9f5f2199  Emacs-19.25/etc/Makefile
  48. +55ac91e9276290cc5da04ddd9dc1e711  Emacs-19.25/etc/NEWS
  49. +b9de9270f0ea351614d271ce1ee01bcb  Emacs-19.25/etc/ONEWS
  50. +0030f55218f3b4bf903357e96dc00366  Emacs-19.25/etc/OONEWS
  51. +a633a48dcdc34ac8ba92af793dc2a207  Emacs-19.25/etc/OOONEWS
  52. +9a8d2689544899845d170a26ca242ff1  Emacs-19.25/etc/OOOONEWS
  53. +073bef60c2493bb43e4e4a1c8b57a202  Emacs-19.25/etc/ORDERS
  54. +1a2588b20df2b0b72772a04cbbc301c1  Emacs-19.25/etc/ORDERS.EUROPE
  55. +2d4e404f94d2fe671deadd40b497864c  Emacs-19.25/etc/ORDERS.JAPAN
  56. +f6d25c2d151da6c8a88d2c88d06b303c  Emacs-19.25/etc/OTHER.EMACSES
  57. +eb248fb14648320774ecae9b6b0ed37f  Emacs-19.25/etc/README
  58. +bcae2c1c2553498e7abe53afd1c33eea  Emacs-19.25/etc/SERVICE
  59. +6fa20aa293859659fe662307b88d0592  Emacs-19.25/etc/SUN-SUPPORT
  60. +b84294439aba36687e42e8ca187b9386  Emacs-19.25/etc/TERMS
  61. +d476970cfd11f8fc83dbfdefaab80d1f  Emacs-19.25/etc/TO-DO
  62. +5df0e6200b8909f2f7a41357be1340b2  Emacs-19.25/etc/TUTORIAL
  63. +837af0cc68ffd9a37ded0ecca5c0881e  Emacs-19.25/etc/Xkeymap.txt
  64. +e1537e769a120907fa467b2d28ced5de  Emacs-19.25/etc/celibacy.1
  65. +ec22355454943c1e6ac3f9bfe9c1b571  Emacs-19.25/etc/condom.1
  66. +a662a113a5a0c550140f0a3ad6660774  Emacs-19.25/etc/copying.paper
  67. +f0935d6e0450ef59c73260177c48f97f  Emacs-19.25/etc/ctags.1
  68. +de23959c1aec0ce3addb2330afec9f5f  Emacs-19.25/etc/echo.msg
  69. +f1842e2f7b6f98216a6978d7136e33e5  Emacs-19.25/etc/emacs.1
  70. +a9db81ed27551ee4692124d9cb9cad1e  Emacs-19.25/etc/emacs.bash
  71. +e78f299421c9413ff7de516091dbb6f8  Emacs-19.25/etc/emacs.csh
  72. +be61ee51053f9e0533ce6096195c1c66  Emacs-19.25/etc/emacs.icon
  73. +48f0d336261f791e6021bc4f1622c953  Emacs-19.25/etc/emacs.xbm
  74. +f58ebed00b22f8cfefb735d1a462bbeb  Emacs-19.25/etc/emacstool.1
  75. +7867eb467eea7f12409f99331904188b  Emacs-19.25/etc/etags.1
  76. +98a2ffe6d74e5da2f0102b34c33c48db  Emacs-19.25/etc/etags.notes
  77. +1070852698ef248ad281da51865ee17e  Emacs-19.25/etc/etags.vms
  78. +eb5cacc0c06917150421bfb811407c7b  Emacs-19.25/etc/ledit.l
  79. +cfbf5c781f45a9ab1011e7eccf5c7063  Emacs-19.25/etc/ms-kermit
  80. +b205e3b256e81e83a7790f7dd35e9a99  Emacs-19.25/etc/ms-kermit-7bit
  81. +04a91547a4cdab2d371e1cadbbead02e  Emacs-19.25/etc/news.texi
  82. +cbbdbc96efd5fbdd037febd44dac0794  Emacs-19.25/etc/refcard.ps
  83. +ca5d6e3307f7600e74b8295ce9e53e3a  Emacs-19.25/etc/refcard.tex
  84. +478b5e267df7e5640461e01e168e054e  Emacs-19.25/etc/sex.6
  85. +bc8c0d657b6825ccb3de5977c8fc8197  Emacs-19.25/etc/spook.lines
  86. +7e03a77f736d29b262667b2626b14dcf  Emacs-19.25/etc/termcap.dat
  87. +f22b3b0e9214815a9881eadaa1e1e2bf  Emacs-19.25/etc/termcap.ucb
  88. +14b4ba3c347a11d41f67d9c0e968f0d6  Emacs-19.25/etc/ulimit.hack
  89. +bd189b96dcae8efd75ef08f88d8c2954  Emacs-19.25/etc/vipcard.tex
  90. +915cff8e06e02e17f24efb8c16ef2879  Emacs-19.25/etc/yow.lines
  91. +d41d8cd98f00b204e9800998ecf8427e  Emacs-19.25/etc/DOC-19.22.0.1
  92. +d41d8cd98f00b204e9800998ecf8427e  Emacs-19.25/etc/DOC-19.25.1.1
  93. +d41d8cd98f00b204e9800998ecf8427e  Emacs-19.25/etc/DOC
  94. +61b39bbe88ebd2cec0d85a6efede6d03  Emacs-19.25/etc/EMACS-DATA
  95. +a0aceb65ccfaddc051d88be150ef3e2c  Emacs-19.25/lib-src/make-docfile.o
  96. +f3d46b05fc5a89b7e7057c23c01a2290  Emacs-19.25/lib-src/alloca.c
  97. +bdbe6b53376efbbaa8ed6e3288a6b0f3  Emacs-19.25/lib-src/b2m.c
  98. +0b1f2127852ac555b18303c4d8356bc5  Emacs-19.25/lib-src/cvtmail.c
  99. +3497531c02622fac219b1eb957c49ffc  Emacs-19.25/lib-src/digest-doc.c
  100. +97d99cac4096c1b0f9d4beb69ebd102c  Emacs-19.25/lib-src/emacsclient.c
  101. +45d07a90a536d3f930d77736659d3dc7  Emacs-19.25/lib-src/emacsserver.c
  102. +516480b44df2164937fae5994c7d03b0  Emacs-19.25/lib-src/emacstool.c
  103. +c4f87096df406cc1018173ab75409ddf  Emacs-19.25/lib-src/env.c
  104. +347f144ed609771acd07fac31639547a  Emacs-19.25/lib-src/etags-vmslib.c
  105. +fd0e38bd4e583d443ac57d3134cdff35  Emacs-19.25/lib-src/etags.c
  106. +0ed81436ad7c9f97fbc761374edf55a0  Emacs-19.25/lib-src/fakemail.c
  107. +520ddba07b6899d3d8547e48358cb4b1  Emacs-19.25/lib-src/getdate.c
  108. +18810669f13b87348459e611d31ab760  Emacs-19.25/lib-src/COPYING
  109. +37da37541919e537a696e5a06f348150  Emacs-19.25/lib-src/getdate.y
  110. +ba374026db3c6818b8e45451a1fb746f  Emacs-19.25/lib-src/getopt.c
  111. +c7498e7c879a84d4f88331501e9f4562  Emacs-19.25/lib-src/getopt.h
  112. +17c139626eb25dba8043b64b4baf7ac2  Emacs-19.25/lib-src/getopt1.c
  113. +580e1749216498834cbaec8328ee07f1  Emacs-19.25/lib-src/hexl.c
  114. +95aa0ca93d65402749196c4ec745b611  Emacs-19.25/lib-src/leditcfns.c
  115. +1e9179d94c50493fcf0e912b4364d9a6  Emacs-19.25/lib-src/make-docfile.c
  116. +2e94288174583203eec15089e1d116b2  Emacs-19.25/lib-src/make-path.c
  117. +7eaaec7bdba404c434572d29a2f528d7  Emacs-19.25/lib-src/movemail.c
  118. +61b0953ffbeb4f24feb09b52be293e4a  Emacs-19.25/lib-src/qsort.c
  119. +c457431990e042a931d21e586540d765  Emacs-19.25/lib-src/sorted-doc.c
  120. +fbeca701bc5c95a0186040466f1ea616  Emacs-19.25/lib-src/tcp.c
  121. +8c360a217f8cf076039924853437f115  Emacs-19.25/lib-src/test-distrib.c
  122. +2d89a27d55460bbaf5daa6730ddd7907  Emacs-19.25/lib-src/timer.c
  123. +43de82be2f823e6e8ddf18c80d32f14c  Emacs-19.25/lib-src/wakeup.c
  124. +f6631fb1954522353a1f2479b631864f  Emacs-19.25/lib-src/yow.c
  125. +c8ab31a11185eb2a86d57ac281f94b8e  Emacs-19.25/lib-src/aixcc.lex
  126. +30f06813bd486edb9a3efa741d9376b7  Emacs-19.25/lib-src/ChangeLog
  127. +5f822ffd30492132284d6e45c4ce8c07  Emacs-19.25/lib-src/Makefile.in
  128. +08f90a9c3fc9a6a6671201d03e993f73  Emacs-19.25/lib-src/README
  129. +bb47916f8aeac0bc4131cc6af8e358d8  Emacs-19.25/lib-src/testfile
  130. +e736e642fa01814d9dfb46dd7d808f20  Emacs-19.25/lib-src/vcdiff
  131. +b2f5a89f3211a76b7f7b6668e8a507fe  Emacs-19.25/lib-src/rcs2log
  132. +e78f299421c9413ff7de516091dbb6f8  Emacs-19.25/lib-src/emacs.csh
  133. +106320171eb08e5dc56619713920c983  Emacs-19.25/lib-src/rcs-checkin
  134. +a96ca50dbfb3878cf061ed5589c41878  Emacs-19.25/lib-src/SCOPTIONS
  135. +da6bfa9a6e75499cfe187b6c06e92727  Emacs-19.25/lib-src/make-docfile.lnk
  136. +71847fb6b4e7a5a77c44fb5b7a2ba32b  Emacs-19.25/lib-src/make-docfile
  137. +dce05bedfa64c6cb1f4ebb0108534317  Emacs-19.25/lib-src/sh.c
  138. +4c159a71247cbc877d858490a827bab6  Emacs-19.25/lisp/term/AT386.el
  139. +c3cef7761b9e8cc1ebd78d980028cfb5  Emacs-19.25/lisp/term/apollo.el
  140. +b5db2fca60f62f55d08a4851e34cd264  Emacs-19.25/lisp/term/bg-mouse.el
  141. +c5860ab4214aa9d2f9bd350b14e96738  Emacs-19.25/lisp/term/bobcat.el
  142. +27c1559a66ede1bf97c49f3fbc024ba9  Emacs-19.25/lisp/term/internal.el
  143. +d0a8d395484fa1bc0d900eb6fab0a28d  Emacs-19.25/lisp/term/keyswap.el
  144. +43186a7f7b08d3d2ea1fb814c7d91a49  Emacs-19.25/lisp/term/lk201.el
  145. +13280113c47b7ec5c6ceb52048179593  Emacs-19.25/lisp/term/news.el
  146. +6afd1a97d5b358404d5ca88f8f023d77  Emacs-19.25/lisp/term/sun-curs.el
  147. +38882cc11795130a6892d0b4ee38b642  Emacs-19.25/lisp/term/sun-fns.el
  148. +21cd14f0ff650ba073e6204ed72d8db1  Emacs-19.25/lisp/term/sun-mouse.el
  149. +6086c5fae4bcd4caf6e317632961da37  Emacs-19.25/lisp/term/sun.el
  150. +bc0e333fe9f0ff48b3b4dfe0b6dd83b9  Emacs-19.25/lisp/term/sup-mouse.el
  151. +4d6bd62718ab540dadb61507c553f198  Emacs-19.25/lisp/term/tvi970.el
  152. +a2b9537e2725a565f935f082dca16486  Emacs-19.25/lisp/term/vt100-led.el
  153. +9cd7c103de9f18a4e0ce2ce753e032e2  Emacs-19.25/lisp/term/vt100.el
  154. +c3cef7761b9e8cc1ebd78d980028cfb5  Emacs-19.25/lisp/term/vt102.el
  155. +c3cef7761b9e8cc1ebd78d980028cfb5  Emacs-19.25/lisp/term/vt125.el
  156. +3a5f7c4adff5509727f3c34f0ff1622d  Emacs-19.25/lisp/term/vt200.el
  157. +e0819f55d2fe6c4251be6e090ee80477  Emacs-19.25/lisp/term/vt201.el
  158. +e0819f55d2fe6c4251be6e090ee80477  Emacs-19.25/lisp/term/vt220.el
  159. +3a5f7c4adff5509727f3c34f0ff1622d  Emacs-19.25/lisp/term/vt240.el
  160. +32a276673af6d546805a584479b37985  Emacs-19.25/lisp/term/vt300.el
  161. +32a276673af6d546805a584479b37985  Emacs-19.25/lisp/term/vt320.el
  162. +32a276673af6d546805a584479b37985  Emacs-19.25/lisp/term/vt400.el
  163. +32a276673af6d546805a584479b37985  Emacs-19.25/lisp/term/vt420.el
  164. +39eb88284762a96d16498bcd5b4afa93  Emacs-19.25/lisp/term/wyse50.el
  165. +34be9081c36512c9c946d38fe97d3c3a  Emacs-19.25/lisp/term/x-win.el
  166. +72c88d8a6657104d8eddd1920e64292a  Emacs-19.25/lisp/term/apollo.elc
  167. +b55978fec560093a053568a51b2dccd1  Emacs-19.25/lisp/term/bg-mouse.elc
  168. +ca5ee32ae8bdaef64514acfbc2653905  Emacs-19.25/lisp/term/news.elc
  169. +e8bf400d52c9249269ac7b2b7cb8c59f  Emacs-19.25/lisp/term/sun-mouse.elc
  170. +c2c25b4a60608eef17d09df1d0dd5595  Emacs-19.25/lisp/term/sun.elc
  171. +05d65a4670205a702d5f3a94f867b23d  Emacs-19.25/lisp/term/sup-mouse.elc
  172. +1eaf525608ae3c42c13196701399d252  Emacs-19.25/lisp/term/tvi970.elc
  173. +931a455e992a2985a60817ca83c2652a  Emacs-19.25/lisp/term/vt100-led.elc
  174. +4baf9fdaa0e484c2ec2dc8b7f105e863  Emacs-19.25/lisp/term/vt100.elc
  175. +d3ad08433239f8119271cd3ee3cfddb4  Emacs-19.25/lisp/term/vt200.elc
  176. +51be5f9fe89550b0a26ddaa14c808173  Emacs-19.25/lisp/term/wyse50.elc
  177. +7c9fceb3d82949c936019faa98186597  Emacs-19.25/lisp/term/x-win.elc
  178. +20d7ca079f0d41fedeb7d5c2681b6e71  Emacs-19.25/lisp/term/README
  179. +2e0033b7a12146d28f16390fc7e4552e  Emacs-19.25/lisp/term/intuition-win.el
  180. +fd91ef19bedd2c8b11e1855a2c4a4780  Emacs-19.25/lisp/abbrev.el
  181. +4293b250b7e3f41df195904357c7eb6a  Emacs-19.25/lisp/abbrevlist.el
  182. +0ba9238136fe72da3a8ebd66b2176ce5  Emacs-19.25/lisp/ada.el
  183. +e1d48fae5009681ff2f32ceb74caddf9  Emacs-19.25/lisp/add-log.el
  184. +96cadf4d5df797f9cbc419fa7b93676a  Emacs-19.25/lisp/advice.el
  185. +f25e3fec368f6dc6d7d997326787c2e2  Emacs-19.25/lisp/allout.el
  186. +6099cd1da3ae727ce79f54a680d531c6  Emacs-19.25/lisp/ange-ftp.el
  187. +fe09570bfbbb5a8bd2d16551f74f004c  Emacs-19.25/lisp/appt.el
  188. +48edff140879c7dc92b7a8e428006700  Emacs-19.25/lisp/apropos.el
  189. +6d53ac5b59fddf17af83c6dd5f636016  Emacs-19.25/lisp/array.el
  190. +e6a760905752a5720fc1303e77529cbf  Emacs-19.25/lisp/asm-mode.el
  191. +64affa955f55284f66cd6e40d6efb59c  Emacs-19.25/lisp/assoc.el
  192. +7c3b53d20c2f62f6a22eab8ee58f1116  Emacs-19.25/lisp/autoinsert.el
  193. +68bcbafed772ee2467bcaf6f2e230438  Emacs-19.25/lisp/autoload.el
  194. +ac3e1f5b4820e0db4217f59e385d27a6  Emacs-19.25/lisp/avoid.el
  195. +e206cd358c9c8a533fec9dc9577580e8  Emacs-19.25/lisp/awk-mode.el
  196. +825bb07efc941f96b0f7362044794c94  Emacs-19.25/lisp/backquote.el
  197. +e7f0fee82adc4c1a65e247e7e6ba5710  Emacs-19.25/lisp/bib-mode.el
  198. +f1195a94d1b7f0750887341bd3749d11  Emacs-19.25/lisp/bibtex.el
  199. +cfed1bd10623d04fccf6d41913d04aa6  Emacs-19.25/lisp/blackbox.el
  200. +717a6c7cc21ff78f44600f9d812eb879  Emacs-19.25/lisp/blessmail.el
  201. +83f1b4d74617420eb73d7845fea279c9  Emacs-19.25/lisp/bookmark.el
  202. +023e5c969f0435fa5f4a10b725ca8517  Emacs-19.25/lisp/buff-menu.el
  203. +a84d4e11f19dc388472dffa6c2cffabe  Emacs-19.25/lisp/byte-opt.el
  204. +4475ae464f196d38a2ba26b398ea6e25  Emacs-19.25/lisp/byte-run.el
  205. +babf3b2d928171e10b4e56fdfc8daf13  Emacs-19.25/lisp/bytecomp.el
  206. +692aea2f36deef1cab46e8aca257b5ff  Emacs-19.25/lisp/c-mode.el
  207. +c4aa75e2811cf3f5403a032885d88b77  Emacs-19.25/lisp/cal-dst.el
  208. +db54103f992d445dd784d1788ecb9a0a  Emacs-19.25/lisp/cal-french.el
  209. +a46a84e77abc00240b3605813a307950  Emacs-19.25/lisp/cal-mayan.el
  210. +5726339cf58b74603a9fbda387d8c812  Emacs-19.25/lisp/cal-menu.el
  211. +b55cea52d239dd1bcf927204d19da1ec  Emacs-19.25/lisp/calendar.el
  212. +7a3f255a36eecca40d8186cb13790e88  Emacs-19.25/lisp/case-table.el
  213. +35690aa959a44333853a59d2604f49f9  Emacs-19.25/lisp/cc-mode.el
  214. +b74e338633bac378d992c3c3d48ced59  Emacs-19.25/lisp/cdl.el
  215. +af5c1949f56ea026bc2b171ca7e7b20f  Emacs-19.25/lisp/chistory.el
  216. +8d6eb65d2e1b885859b434cac7718c3d  Emacs-19.25/lisp/cl-compat.el
  217. +bb02cbf8815d76de88cc9ff4d06f0fb3  Emacs-19.25/lisp/cl-extra.el
  218. +dbb21c6b63e9d8be09a8ca0563c3e100  Emacs-19.25/lisp/cl-indent.el
  219. +abee169f0c1fb7f8640404d6415f74d2  Emacs-19.25/lisp/cl-macs.el
  220. +bd5f910af28dc7e1036faf956393a2cf  Emacs-19.25/lisp/cl-seq.el
  221. +329ffd83315ad605e88995f90090ec95  Emacs-19.25/lisp/cl-specs.el
  222. +0cc7fb3c3e685b7ff3ad76cdd7980930  Emacs-19.25/lisp/cl.el
  223. +b4f10e6419530348561bcc3124492ca8  Emacs-19.25/lisp/cmacexp.el
  224. +02fe83f25012d3815834de012f2bcc36  Emacs-19.25/lisp/cmuscheme.el
  225. +f77084c10b756f815735a23d6ff3bdd7  Emacs-19.25/lisp/comint.el
  226. +1e96298f0a95a193f03fb7f9c413627f  Emacs-19.25/lisp/compare-w.el
  227. +8f9826f06a31e4135e6a064c2f8a3e39  Emacs-19.25/lisp/compile.el
  228. +1524c20eb56f8ddc4fff65321b33374d  Emacs-19.25/lisp/complete.el
  229. +865dc56441221913c5725f6fdcc6fc7b  Emacs-19.25/lisp/completion.el
  230. +26dfe8c47efc0166ca961253866a4d69  Emacs-19.25/lisp/cookie1.el
  231. +dd4b570dd919d769ce14a1dab495fc78  Emacs-19.25/lisp/cplus-md.el
  232. +a2ed3db607227615206d03bf4ccc2d6f  Emacs-19.25/lisp/cust-print.el
  233. +bedfe5646899d465242ea85052476384  Emacs-19.25/lisp/dabbrev.el
  234. +80f72be4c66970b1909017cee0ed84e7  Emacs-19.25/lisp/debug.el
  235. +18810669f13b87348459e611d31ab760  Emacs-19.25/lisp/COPYING
  236. +40d2b9df4be5a9d3ff81194975ca17c7  Emacs-19.25/lisp/delsel.el
  237. +43f91bc111645ad845351ac0bb986c8a  Emacs-19.25/lisp/derived.el
  238. +874df27db2fbc47beefd66f1402e3a5b  Emacs-19.25/lisp/desktop.el
  239. +ed74d2449c014b4e0abe71d062fded2c  Emacs-19.25/lisp/diary-ins.el
  240. +c3fe3d78031aa9ee5aa72cbba1a987fa  Emacs-19.25/lisp/diary.el
  241. +c92288289c360653016683fd9b9cd48a  Emacs-19.25/lisp/diff.el
  242. +c9e59ffb71a5a2437cbe7d38684144f4  Emacs-19.25/lisp/dired-aux.el
  243. +69f815a7b6b5fe2b24eb69381b3f45ac  Emacs-19.25/lisp/dired-x.el
  244. +42852694b1505f29fcf3854b9ab9d8d2  Emacs-19.25/lisp/dired.el
  245. +71e6f84c1be24da57d0f78dc29a08cc0  Emacs-19.25/lisp/disass.el
  246. +56b8507c5f9673b8eba8c86362f7835c  Emacs-19.25/lisp/disp-table.el
  247. +a2c437855a20298a1477a5afa525cbe7  Emacs-19.25/lisp/dissociate.el
  248. +ac864de8b5f0b085f356c3ebcd12863b  Emacs-19.25/lisp/doctor.el
  249. +dc1397c859ff4626d3767fe86913d124  Emacs-19.25/lisp/dos-fns.el
  250. +a61617f0524312e7418ef4449eb55f7f  Emacs-19.25/lisp/double.el
  251. +5bd2da7c8419d285d73e1ab1108919d7  Emacs-19.25/lisp/dunnet.el
  252. +dd8f149e2084e860cef98990c243fcb1  Emacs-19.25/lisp/easymenu.el
  253. +eefef662c954e62f58303d92303a8196  Emacs-19.25/lisp/ebuff-menu.el
  254. +cbb59df5547b8e2c5d8563080458f3ad  Emacs-19.25/lisp/echistory.el
  255. +9b4c7ae6e1b784767977433d2fb1c197  Emacs-19.25/lisp/edebug.el
  256. +35e53176aec0750d6ab436cd4a09da6a  Emacs-19.25/lisp/ediff.el
  257. +3fb56b6e61a848e82f70faa6e71470aa  Emacs-19.25/lisp/edmacro.el
  258. +702da1d521661dc58464f8a41d92a1bd  Emacs-19.25/lisp/edt.el
  259. +c52afdc0d28a3428aa7071eece4c6bfb  Emacs-19.25/lisp/ehelp.el
  260. +db6bfd587268ac73aa2c272a088fea23  Emacs-19.25/lisp/electric.el
  261. +0cca5d45bb9a7c4ac46c82d969ea708f  Emacs-19.25/lisp/emacsbug.el
  262. +76bbbaa5ae76aa073ffb46744f238110  Emacs-19.25/lisp/emerge.el
  263. +341eeebc36a76a063ef0d9a43ce43e8b  Emacs-19.25/lisp/env.el
  264. +2caf144526d59b5c05082181ecd2ffa1  Emacs-19.25/lisp/etags.el
  265. +64a4f4b9821fd0f7500914b6e92cbe2f  Emacs-19.25/lisp/eval-reg.el
  266. +656af6e6d138a04481e2d2a688d0513e  Emacs-19.25/lisp/faces.el
  267. +907accde4cc1bd004c63dc7a516bcfac  Emacs-19.25/lisp/files.el
  268. +4b38dfed0134c1a39290a5b7747cb6d7  Emacs-19.25/lisp/fill.el
  269. +9d18bd40a4926e5a2dd18b9b01fa5279  Emacs-19.25/lisp/find-dired.el
  270. +4afb83e1bd0924b5201577b7d53e32f4  Emacs-19.25/lisp/find-gc.el
  271. +d09023932f3ded42e13849b7f6fde7de  Emacs-19.25/lisp/finder-inf.el
  272. +0302dc5699180b0cf57f960157d56e41  Emacs-19.25/lisp/finder.el
  273. +c40c7b451fabea97d8156ab4b21ae111  Emacs-19.25/lisp/float-sup.el
  274. +c0426ba2ab7349c330d74822c97b0327  Emacs-19.25/lisp/float.el
  275. +607251790fad5a6a1fdc685ee5745bf6  Emacs-19.25/lisp/flow-ctrl.el
  276. +e9f54afc8dd67706cd043b0543f5b4f9  Emacs-19.25/lisp/gnus.el
  277. +d13cbf098e2a9f0479e8bbc7411d45d5  Emacs-19.25/lisp/foldout.el
  278. +49653e69380727d547898b08025340eb  Emacs-19.25/lisp/font-lock.el
  279. +8171cea2009868b0c4e2dede216287e8  Emacs-19.25/lisp/forms-d2.el
  280. +a20ccc446851d26ddcd662a9bf008af6  Emacs-19.25/lisp/forms-pass.el
  281. +7e0a68e7d63e7b73f1c488990303de50  Emacs-19.25/lisp/forms.el
  282. +cd5e693cdae01e6a7160b7825c38806d  Emacs-19.25/lisp/fortran.el
  283. +15e1a0f87e7ceb215b41b89c3605f451  Emacs-19.25/lisp/frame.el
  284. +984e8b9901ebed7db62899badfd90a73  Emacs-19.25/lisp/gnus-uu.el
  285. +7da245ac503cba23ef3d1298eb4720f3  Emacs-19.25/lisp/gnusmail.el
  286. +dfce18cfa8335828dfe2d1c39f30cee3  Emacs-19.25/lisp/gnusmisc.el
  287. +e7a3b403536831576cdd06cfb7a654d9  Emacs-19.25/lisp/gnuspost.el
  288. +cfe424f4b468585b4581ce0dc93fd1a2  Emacs-19.25/lisp/gomoku.el
  289. +2795241cd0c27ceab0587f92d02b2b2b  Emacs-19.25/lisp/gosmacs.el
  290. +35565e3e63adeef449c385253ca53a31  Emacs-19.25/lisp/gud.el
  291. +80ef01bf1be00841648fd70f0caf0a0b  Emacs-19.25/lisp/hanoi.el
  292. +af0cd31abedeeb49ad4aabd8d94c6954  Emacs-19.25/lisp/help-macro.el
  293. +1bf3d2e4bdaf2459f29e16003360303f  Emacs-19.25/lisp/help.el
  294. +6a780a4797b6678801a33f84292cff89  Emacs-19.25/lisp/helper.el
  295. +859464fb8ffb8220bd3b81417b6fe6a7  Emacs-19.25/lisp/hexl.el
  296. +480d67f20dcca37a21f577a1afc2968a  Emacs-19.25/lisp/hideif.el
  297. +ac55fe8827dd360a88f79fe4a46c6e08  Emacs-19.25/lisp/hilit19.el
  298. +522917ea8a15999878ab3466d6232bcb  Emacs-19.25/lisp/hippie-exp.el
  299. +6349776cfeca06f2a3203e0f5e82d0db  Emacs-19.25/lisp/holidays.el
  300. +4179cfebf94ed7cd088616b487bc3be9  Emacs-19.25/lisp/icomplete.el
  301. +73cd07b7201557159bc495e4ff37fcaa  Emacs-19.25/lisp/icon.el
  302. +28d8f5464d1649a2d2d3b8d2cb300127  Emacs-19.25/lisp/ielm.el
  303. +9436bb210cbd41fe17c9d5922e587bec  Emacs-19.25/lisp/imenu.el
  304. +4b287de5bfb7de11e6aa917350c79699  Emacs-19.25/lisp/indent.el
  305. +f5fb48db7b77c674607108f4d256ca69  Emacs-19.25/lisp/inf-lisp.el
  306. +2dd9b41dacc78a3ba0c3ce95840b3795  Emacs-19.25/lisp/info.el
  307. +d55246b06df7cd706419ce73db42db48  Emacs-19.25/lisp/informat.el
  308. +8037cd833312a03af2b9317ac7f676fc  Emacs-19.25/lisp/isearch.el
  309. +ba9105f191c880cce07110eecaf2da9c  Emacs-19.25/lisp/iso-acc.el
  310. +87965e5fcd6f207563c39e0ad11aaf94  Emacs-19.25/lisp/iso-ascii.el
  311. +a6b2a7e26d96e2439b0369b28ea22f1d  Emacs-19.25/lisp/iso-cvt.el
  312. +3f2f33020fe25ad7e56a45357fba5f14  Emacs-19.25/lisp/iso-insert.el
  313. +546c1ed5bdd197c556badd521d89896e  Emacs-19.25/lisp/iso-swed.el
  314. +88b5266658f2c954205a5b05ff5d505d  Emacs-19.25/lisp/iso-syntax.el
  315. +874b4d0bd63b3c41d156e8c3d01c5f2c  Emacs-19.25/lisp/iso-transl.el
  316. +0273e6f6007065c18da213ff6376e3c7  Emacs-19.25/lisp/ispell.el
  317. +4d693d0d5d30a6a32e19a62c299e661b  Emacs-19.25/lisp/ispell4.el
  318. +9d45703fdd75bb03f7ad1892d25999f7  Emacs-19.25/lisp/jka-compr.el
  319. +d46c68c7484e71bc9c76dcc78c1afea6  Emacs-19.25/lisp/kermit.el
  320. +cdd4b50f8071df40c0c38213706a25fb  Emacs-19.25/lisp/ledit.el
  321. +e15ca10e33954cef8411d1181da140f0  Emacs-19.25/lisp/levents.el
  322. +b0340f650356e4724f12741bd29bad5d  Emacs-19.25/lisp/life.el
  323. +0903df916b705db7abcbd91fc84ff82e  Emacs-19.25/lisp/lisp-mnt.el
  324. +5f22d51517ed650e673d6d10be932fd4  Emacs-19.25/lisp/lisp-mode.el
  325. +c03c368d98069824e6877c4513451918  Emacs-19.25/lisp/lisp.el
  326. +043e15d2f13f496c794b33ad9831dbe2  Emacs-19.25/lisp/lmenu.el
  327. +39543415e8052ea9b72714c4e9018945  Emacs-19.25/lisp/loaddefs.el
  328. +121fec89f54860b5beb4133d8f9d256d  Emacs-19.25/lisp/loadhist.el
  329. +523b9940e08fe067b17d79e79792cd01  Emacs-19.25/lisp/loadup.el
  330. +e37e1e647d4f577f9063f01a7e35f78d  Emacs-19.25/lisp/lpr.el
  331. +741c474a2d583805c3ad0e5dda3656eb  Emacs-19.25/lisp/ls-lisp.el
  332. +35be770fe0d1cda830d39a069bb8776d  Emacs-19.25/lisp/lselect.el
  333. +d8c276eae6d85cfa63d2687ca93f877c  Emacs-19.25/lisp/lucid.el
  334. +e4dc353948875e9926b4378eb84ab308  Emacs-19.25/lisp/lunar.el
  335. +306cfa6dfdeeb6cfbb5bd13ed6cb9a57  Emacs-19.25/lisp/macros.el
  336. +5a7bee866250b697793f4045a5daaacc  Emacs-19.25/lisp/mail-extr.el
  337. +28c961e81aafb264fccfbea5de0f6267  Emacs-19.25/lisp/mail-hist.el
  338. +4f62333abf1ba1b3c08ba758c87ae1a5  Emacs-19.25/lisp/mail-utils.el
  339. +fc84407f359efa38213dd3ed42586f40  Emacs-19.25/lisp/mailabbrev.el
  340. +a900ed2811142599bf052462a0b62ec7  Emacs-19.25/lisp/mailalias.el
  341. +972827b147a817b5fd6d51fef08699ba  Emacs-19.25/lisp/mailpost.el
  342. +f949e93a14112d5d19426cd8d23a3ea0  Emacs-19.25/lisp/makefile.el
  343. +cd495234807136504c81fb2f4a8383f2  Emacs-19.25/lisp/makeinfo.el
  344. +8b2d0ed663b70a154bbb10679d0c451f  Emacs-19.25/lisp/makesum.el
  345. +14853e71f53f6602cd65d624c5e2c4cb  Emacs-19.25/lisp/man.el
  346. +c1d5b843c36e0693d9f1e4646bd67311  Emacs-19.25/lisp/map-ynp.el
  347. +29c716057fb538575f7edf2a62043aff  Emacs-19.25/lisp/medit.el
  348. +6c34c9cec465335fcf5a33c119beca2b  Emacs-19.25/lisp/meese.el
  349. +75bf04b45e564d869788a58dd6ef1d18  Emacs-19.25/lisp/menu-bar.el
  350. +370b740d859ded8d1585629807ef7e9f  Emacs-19.25/lisp/metamail.el
  351. +d9f12c265d0afca6f3719b7e12b67af6  Emacs-19.25/lisp/mh-comp.el
  352. +4514c29493565188f454d337a71fd245  Emacs-19.25/lisp/mh-e.el
  353. +7b0c5ecda31ba7bc9143359e950c3c5f  Emacs-19.25/lisp/mh-funcs.el
  354. +ba9df54c5a6dbb65d97eb72a913bb518  Emacs-19.25/lisp/mh-mime.el
  355. +8def78c070881feb02e6b04e23de9513  Emacs-19.25/lisp/mh-pick.el
  356. +194329e5fefc8cf3ee00975735ed0d09  Emacs-19.25/lisp/mh-seq.el
  357. +635dfc55ae9ba26f65819e2168e6d922  Emacs-19.25/lisp/mh-utils.el
  358. +b986464e3b61c6702c7c743a13438d23  Emacs-19.25/lisp/mhspool.el
  359. +f50641e25696fbeba44062a551f5e661  Emacs-19.25/lisp/mim-mode.el
  360. +012e7a905eed70359b21fd30cfb5afa9  Emacs-19.25/lisp/mim-syntax.el
  361. +e9991fde218906787aea41a0142f4042  Emacs-19.25/lisp/misc.el
  362. +eba930dfccef1c9f9b58f4ddfd3c98a3  Emacs-19.25/lisp/mlconvert.el
  363. +d5a9104930fd59a5df5dbc8e2789b669  Emacs-19.25/lisp/mldrag.el
  364. +d7047482c7c1badc5d1e76fe19fc6bff  Emacs-19.25/lisp/mlsupport.el
  365. +178dcd397b76e546d36aa8d1af190016  Emacs-19.25/lisp/modula2.el
  366. +a340498b13759932cfb410033c7732ef  Emacs-19.25/lisp/mouse-sel.el
  367. +95165f39a8a7536e615580d48b266097  Emacs-19.25/lisp/mouse.el
  368. +42f3d0ecfa87aadb2c968cc2b7ffc23e  Emacs-19.25/lisp/mpuz.el
  369. +78c1125b8438f2e35ab34d335094154a  Emacs-19.25/lisp/netunam.el
  370. +63da0f25588daab208d650c1c0608fd8  Emacs-19.25/lisp/nnspool.el
  371. +9015d3f8ffbab2a2e3b54d9f30cbde5a  Emacs-19.25/lisp/nntp.el
  372. +72209721458dc21cdf1dba460da467c8  Emacs-19.25/lisp/novice.el
  373. +4e3d3f00e6e42c1d0f2675aa103b42a6  Emacs-19.25/lisp/nroff-mode.el
  374. +85eda2aa20835c25995655255f36bbbb  Emacs-19.25/lisp/options.el
  375. +b95af9554f8c18f43deab44aa8c6cfa4  Emacs-19.25/lisp/outline.el
  376. +fcb70c436618bd0a8046feb42873bd67  Emacs-19.25/lisp/page-ext.el
  377. +5c6ae4a31d0678916c91cefff736b8bd  Emacs-19.25/lisp/page.el
  378. +b92c3957db7e5cea3075b0c789915788  Emacs-19.25/lisp/paragraphs.el
  379. +95327c46e255332c712c0755d0cf1548  Emacs-19.25/lisp/paren.el
  380. +13adfb055a675062b4964c646ed7d9cc  Emacs-19.25/lisp/pascal.el
  381. +39d957968f4e5d6bc962857a3b1300ba  Emacs-19.25/lisp/paths.el
  382. +79e0b0750339ac4887a44cd47b66348e  Emacs-19.25/lisp/perl-mode.el
  383. +bc4afe1459a6a54654f35b6bd0b34a62  Emacs-19.25/lisp/picture.el
  384. +5fcf83083f69c35278c571cc7712e8d2  Emacs-19.25/lisp/pp.el
  385. +9be17a5500e968ac29f482c0c4646ef3  Emacs-19.25/lisp/profile.el
  386. +e4b99d8da2eb7159623328d800bdad4b  Emacs-19.25/lisp/prolog.el
  387. +b18a8a4ddbe8354074d1e20bddde990d  Emacs-19.25/lisp/rcompile.el
  388. +2ba841611a6aa45f10db62d4674fcfc9  Emacs-19.25/lisp/rect.el
  389. +833abfad79c501ba04e06541aab04bd1  Emacs-19.25/lisp/refbib.el
  390. +b249317fa17db413f11e2753306af067  Emacs-19.25/lisp/refer.el
  391. +77f4babe4f64ea9c5ac179bbe2dd4fca  Emacs-19.25/lisp/regi.el
  392. +d7ec6bd4e535dcb9f9f41983a8460641  Emacs-19.25/lisp/register.el
  393. +7b10a477dffb4686eaa851f46d47598b  Emacs-19.25/lisp/replace.el
  394. +fdb76f7c74e36985b63236e94ee2e56f  Emacs-19.25/lisp/reporter.el
  395. +fe3c318683f2c1cddd741f2b3b2a15ac  Emacs-19.25/lisp/reposition.el
  396. +0f0bc7323a8c580e8910c0c0294253c7  Emacs-19.25/lisp/resume.el
  397. +e65baa77d9c799117a1bed1f0c93cc06  Emacs-19.25/lisp/rfc822.el
  398. +b6db03df138b605fe2949b8421c1e545  Emacs-19.25/lisp/ring.el
  399. +809d2c3e7e99cad41169041f4d80e5e3  Emacs-19.25/lisp/rlogin.el
  400. +cbe464264eb60ab353e966ddbf6ff26d  Emacs-19.25/lisp/rmail.el
  401. +b1fa34d69f6791fade986d48bf3d1d38  Emacs-19.25/lisp/rmailkwd.el
  402. +4152f6c3dedb2b131e1a40da129b2b6c  Emacs-19.25/lisp/rmailedit.el
  403. +16145c21e2e77f067d69108af7c5277a  Emacs-19.25/lisp/rmailmsc.el
  404. +b21d04f257e1981674fd272bc5f6887e  Emacs-19.25/lisp/rmailout.el
  405. +e5bcaf62213a8ff44f82e415a45c6872  Emacs-19.25/lisp/rmailsort.el
  406. +5808b52071f668561dd06e8ba4207947  Emacs-19.25/lisp/rmailsum.el
  407. +790683d7212efcd3117b45806156a3f4  Emacs-19.25/lisp/rnews.el
  408. +aaa11b287671092d47f190e2c5460076  Emacs-19.25/lisp/rnewspost.el
  409. +5be69aaea0e06f28915b872f14b952a5  Emacs-19.25/lisp/rot13.el
  410. +8b4e5b6eea5d2c3eb4a812742a133eb3  Emacs-19.25/lisp/rsz-mini.el
  411. +2dd90942103b0764d1f7f677168a3470  Emacs-19.25/lisp/s-region.el
  412. +d5b491d26ac5557fa1081f26dbdc7841  Emacs-19.25/lisp/saveplace.el
  413. +02ca68fbbafb1fe003182cb9144b3432  Emacs-19.25/lisp/sc.el
  414. +1605fe4e4af5237290b5485aaa9c1fd2  Emacs-19.25/lisp/scheme.el
  415. +4dd158479892b81573d0f09d7f3386d1  Emacs-19.25/lisp/scribe.el
  416. +9ad4d0b15042f698bbb76b05b4a51965  Emacs-19.25/lisp/scroll-bar.el
  417. +5287c2f2d70e1da593ab5d6476c0039c  Emacs-19.25/lisp/select.el
  418. +832bee7e5cba1c670e969e08477d6131  Emacs-19.25/lisp/sendmail.el!
  419. +23027a05cc7e2a4cd06b6fe185a94a0d  Emacs-19.25/lisp/server.el
  420. +1c0a3628ba0f11d873c2aea70705d912  Emacs-19.25/lisp/sgml-mode.el
  421. +ffe5f694032e2038b169ca1a98c17066  Emacs-19.25/lisp/sh-script.el
  422. +a528133c3e1fe47fe60744caef7337b6  Emacs-19.25/lisp/shadowfile.el
  423. +ac70f7932cb727700e5c96145e9eb04c  Emacs-19.25/lisp/shell.el
  424. +83937695a10f85ca083a72bf874ff8d1  Emacs-19.25/lisp/simple.el!
  425. +0df81d5c15e26a06be5c90b43d32699c  Emacs-19.25/lisp/simula.el
  426. +5af5e9fcddc165673852bd7e56c7217f  Emacs-19.25/lisp/soundex.el
  427. +a13df48efcdf8ab9acc7181746ec8380  Emacs-19.25/lisp/skeleton.el
  428. +f5521853e2a7cd77b1384e66fa5a785a  Emacs-19.25/lisp/solar.el
  429. +5cf3b8c45c58432c9dccafec67d20bc9  Emacs-19.25/lisp/sort.el
  430. +5915bdb051e73cedee978ff71fc9ef1c  Emacs-19.25/lisp/startup.el
  431. +be54309f2f830697890f98609097c65d  Emacs-19.25/lisp/spell.el
  432. +8a68089fbb122752f2cba5ddb27bd2aa  Emacs-19.25/lisp/spook.el
  433. +0346b57d21f790d0167fa192bff5e80a  Emacs-19.25/lisp/tex-mode.el
  434. +59b8a1ecf5a83b003795c8e62d736b4c  Emacs-19.25/lisp/studly.el
  435. +97a3a156d14617fa3fc44746b6a8b854  Emacs-19.25/lisp/subr.el
  436. +6afd1a97d5b358404d5ca88f8f023d77  Emacs-19.25/lisp/sun-curs.el
  437. +38882cc11795130a6892d0b4ee38b642  Emacs-19.25/lisp/sun-fns.el
  438. +9c1266e62fed824174d805c7272f7ac9  Emacs-19.25/lisp/supercite.el
  439. +ab860e12a56846fc0f64ea7fef282ff1  Emacs-19.25/lisp/swedish.el
  440. +ff8c18a98cb1c40d226d9d5a54e5d616  Emacs-19.25/lisp/tabify.el
  441. +35db5c9215b9d2a7b11f05b9a6e1e630  Emacs-19.25/lisp/tar-mode.el
  442. +eed73dde31bf9e15b0098bb40d296f71  Emacs-19.25/lisp/tcl-mode.el
  443. +44dce30c57635eaa046690a80298503a  Emacs-19.25/lisp/tcp.el
  444. +e7c3c5489ee43eed6c1e152a09135203  Emacs-19.25/lisp/telnet.el
  445. +773fe696206737d36d4193f6f084e068  Emacs-19.25/lisp/tempo.el
  446. +abdd4c8134c23f73f07255d99e890a00  Emacs-19.25/lisp/term-nasty.el
  447. +743c570f2e7e732285b4717eb6ba3dcb  Emacs-19.25/lisp/terminal.el
  448. +14bb8ec3f85d31bfd1d0b8e9b8a2a1fa  Emacs-19.25/lisp/vc-hooks.el
  449. +4e8e4f53001b97eee1623b58e709f587  Emacs-19.25/lisp/texinfmt.el
  450. +650082c788c8c4dad2847c112def681d  Emacs-19.25/lisp/texinfo.el
  451. +d1da55aaacdfd884d5c6111bcdc6a06b  Emacs-19.25/lisp/texnfo-upd.el
  452. +efea5eddb46cf3b9d7c5402e2cf5a84e  Emacs-19.25/lisp/text-mode.el
  453. +827a8d7a318a4923dedf39e9938bbb58  Emacs-19.25/lisp/thingatpt.el
  454. +81f46abec3fd2ecdcd587ea5f679b97d  Emacs-19.25/lisp/time-stamp.el
  455. +dbb4bf417276f61baaaae71163d09d4b  Emacs-19.25/lisp/time.el
  456. +196055a3b746a3553ed37ee424ee81b7  Emacs-19.25/lisp/timer.el
  457. +909f4cc72449ba9ece91e2c3b4f2ac5d  Emacs-19.25/lisp/timezone.el
  458. +8cf099502b6fafa8504fcacb358462cf  Emacs-19.25/lisp/tpu-doc.el
  459. +e9c01c5cd349a12c22835b3e8d7202fa  Emacs-19.25/lisp/tpu-edt.el
  460. +bf6f0170a9fa60ebe9a78d34a8ba882a  Emacs-19.25/lisp/tpu-extras.el
  461. +02252897ef9339a5f8221f4f40d205cf  Emacs-19.25/lisp/tpu-mapper.el
  462. +a3d3e4d755cff4e833f23a3ef91cf212  Emacs-19.25/lisp/tq.el
  463. +d831ce0fbe18742157a298d5451ba23d  Emacs-19.25/lisp/trace.el
  464. +45592268004aa2e2bb74ff3bd95e64b6  Emacs-19.25/lisp/two-column.el
  465. +b78c7e43e09b5473847b513a3db955bf  Emacs-19.25/lisp/uncompress.el
  466. +f7d9233627dba45d613ec77b9f410ff2  Emacs-19.25/lisp/underline.el
  467. +21bdcfc24b6e385d51de656f5065ae83  Emacs-19.25/lisp/undigest.el
  468. +8568db13eddbf688db6272dd3e1661b0  Emacs-19.25/lisp/unrmail.el
  469. +8b7e041ebe192006c10b628ef5406fde  Emacs-19.25/lisp/unused.el
  470. +4a5606b8b446ea75b8aeeb940a8f1544  Emacs-19.25/lisp/upd-copyr.el
  471. +3c48a53a00fe69529e21c216af000cd6  Emacs-19.25/lisp/userlock.el
  472. +7e675f3ae639e9f66898d0e6b7688eb6  Emacs-19.25/lisp/vip.el
  473. +cedba72714ca14f79398d9d046d6d123  Emacs-19.25/lisp/vc.el
  474. +4df10e4c8ec13820948d97b0e6737e2c  Emacs-19.25/lisp/version.el
  475. +803484825769311c8033b27a0e1af39d  Emacs-19.25/lisp/vi.el
  476. +9e2edf8df8fd7d155e5ddb1c1a72823b  Emacs-19.25/lisp/view.el
  477. +4cf74ff1d5f78d8a94dee0506cdafda3  Emacs-19.25/lisp/vms-patch.el
  478. +07ea37a53dd027cd2f95462b31f49f55  Emacs-19.25/lisp/vms-pmail.el
  479. +4945c8682698551c38c3076a61ed3fe5  Emacs-19.25/lisp/vmsproc.el
  480. +fecbb9b30fa96933616c45a27e8ed9a3  Emacs-19.25/lisp/vmsx.el
  481. +10333bb65da1e0b3bf6b12411d30ed83  Emacs-19.25/lisp/vt-control.el
  482. +a2b9537e2725a565f935f082dca16486  Emacs-19.25/lisp/vt100-led.el
  483. +1047e8066029f5190ac8e34b9bd950de  Emacs-19.25/lisp/window.el
  484. +5523aa20692a6dfa0350e5b654a35dd1  Emacs-19.25/lisp/ws-mode.el
  485. +e1070c0dde3bdeb7f1916bab8ae3371b  Emacs-19.25/lisp/x-menu.el
  486. +790c852728d5ea43f366121e967e3781  Emacs-19.25/lisp/xscheme.el
  487. +885cdfabb1eef8a78f3c2270d62bdb48  Emacs-19.25/lisp/yow.el
  488. +d215b28a1d6594eeb2c9b2b5e4c3b515  Emacs-19.25/lisp/abbrev.elc
  489. +94379c6314810fa68dd4397080ea6305  Emacs-19.25/lisp/ada.elc
  490. +22c44ef18848b1dc350370c5827a7cfd  Emacs-19.25/lisp/add-log.elc
  491. +4d7ca9f68c2675945203c5eb0b64dd65  Emacs-19.25/lisp/advice.elc
  492. +480c510eb40635f80fd10ff6c4b32c46  Emacs-19.25/lisp/allout.elc
  493. +c9b847c802b7f1ef47a50ee46a8e29f9  Emacs-19.25/lisp/ange-ftp.elc
  494. +544376e7697e0ab75bffb3cd69b118bd  Emacs-19.25/lisp/appt.elc
  495. +2cdb11261e0a63cef71aff2f667e3cae  Emacs-19.25/lisp/apropos.elc
  496. +fe03c3b1136bf73c96e109fa117221f5  Emacs-19.25/lisp/array.elc
  497. +a887aa319fea3da70fd924ab5fea5b9a  Emacs-19.25/lisp/asm-mode.elc
  498. +946fcd3151254ec65a9b1528d4ea3be6  Emacs-19.25/lisp/assoc.elc
  499. +30269433d9a30d428a5612f765a2be87  Emacs-19.25/lisp/autoinsert.elc
  500. +013a576de022fb890c8eed71ce038ec3  Emacs-19.25/lisp/autoload.elc
  501. +0d44251b19d8b265ec81205af5de4857  Emacs-19.25/lisp/avoid.elc
  502. +5bb92d51232bb3306625b9bef3e2e22e  Emacs-19.25/lisp/awk-mode.elc
  503. +5a9391ca237bd5726b93208b7280d987  Emacs-19.25/lisp/backquote.elc
  504. +dfb0d45cceff4eefe8499702511f0451  Emacs-19.25/lisp/bib-mode.elc
  505. +b920568c3794eb1d8c7bae3be4a1e5ca  Emacs-19.25/lisp/bibtex.elc
  506. +cb7626fb2ac1e409e3b4de2451b382e2  Emacs-19.25/lisp/blackbox.elc
  507. +5b6a333eb34f418c4f95912d0baa7c6f  Emacs-19.25/lisp/bookmark.elc
  508. +0d967713ae6a3437656fd435306612f5  Emacs-19.25/lisp/buff-menu.elc
  509. +9d180c1af30d8e6aa62c086d5f11e5f3  Emacs-19.25/lisp/byte-opt.elc
  510. +5fbef93185b51a4e2cba85ed9ae9a87b  Emacs-19.25/lisp/byte-run.elc
  511. +2bd66df8abf21551050cd0522d9ba28a  Emacs-19.25/lisp/bytecomp.elc
  512. +4b11ca22b97f03e2aa24245b2044d2e5  Emacs-19.25/lisp/c-mode.elc
  513. +da14c96d4959974b011c7bda2e0ac723  Emacs-19.25/lisp/cal-dst.elc
  514. +43bdc7618830e556d9d27954ff5305c0  Emacs-19.25/lisp/cal-french.elc
  515. +2abe6bd5fe3f7132632fa7f314311e39  Emacs-19.25/lisp/cal-mayan.elc
  516. +2b9d6f401ca0b110643fec259cefbf2b  Emacs-19.25/lisp/calendar.elc
  517. +4b2c3e208f82f4fd6978053c88589c8d  Emacs-19.25/lisp/case-table.elc
  518. +52987411793e039112c062adb18f675b  Emacs-19.25/lisp/cc-mode.elc
  519. +5b84f762669f9413233acf4a606eb1c9  Emacs-19.25/lisp/chistory.elc
  520. +0b80c58da1eacebd86446e350f3466d8  Emacs-19.25/lisp/cl-compat.elc
  521. +8ee2b92504ca78dee5b66ca8121460f8  Emacs-19.25/lisp/cl-extra.elc
  522. +4a0cf9bf5f9335112d1b3a79b064c6e6  Emacs-19.25/lisp/cl-indent.elc
  523. +0410f123c0018c09cf55564cf047842f  Emacs-19.25/lisp/cl.elc
  524. +eb88a208dc3ba2d0972f20366ecba995  Emacs-19.25/lisp/cl-macs.elc
  525. +eb25dab7648251733ac7380e443a20ee  Emacs-19.25/lisp/cl-seq.elc
  526. +72a5184f2f3fbd3f1cfb06e00fb17ddf  Emacs-19.25/lisp/cmacexp.elc
  527. +9876b4363e93e4a8e88bbd352d9ce9c9  Emacs-19.25/lisp/cmuscheme.elc
  528. +b527aeaa8b4b2427177d27d803de40bf  Emacs-19.25/lisp/comint.elc
  529. +ea135487a521ab9ffb95350b9eea2ab1  Emacs-19.25/lisp/compare-w.elc
  530. +e975082fc0f169d22343c0ef85f111cb  Emacs-19.25/lisp/compile.elc
  531. +05c6879f16eb181017d535b1d6286482  Emacs-19.25/lisp/complete.elc
  532. +9f53bab83cd50d072fd24e0ed860bf96  Emacs-19.25/lisp/completion.elc
  533. +0c232ad74543f3381400d68b1bbd0ce7  Emacs-19.25/lisp/cookie1.elc
  534. +c0400b213ac141312af4b917ea82a574  Emacs-19.25/lisp/cplus-md.elc
  535. +607a9638d9d5c78ff2578e3d7b24d024  Emacs-19.25/lisp/cust-print.elc
  536. +280d5d621e1b2af30a344946f6e6c8f5  Emacs-19.25/lisp/dabbrev.elc
  537. +f7649935bd0fdf965a04009161bfe275  Emacs-19.25/lisp/debug.elc
  538. +3f5284bd0933b1e00b527c6649a6b968  Emacs-19.25/lisp/delsel.elc
  539. +d48fa4e38376cf655cb531ec0402eb8d  Emacs-19.25/lisp/derived.elc
  540. +23789601c155b0b60c57ed62a4230aa9  Emacs-19.25/lisp/desktop.elc
  541. +f7d5655f2ee4fff188c60307b6239815  Emacs-19.25/lisp/diary-ins.elc
  542. +5ca8545f4d35d35270458c98f0d67781  Emacs-19.25/lisp/diary.elc
  543. +01c2004c3876e2c2a1a5079d01b28540  Emacs-19.25/lisp/diff.elc
  544. +ab68f5de7b545baed5fa3784c47fe790  Emacs-19.25/lisp/dired-x.elc
  545. +348d07df183cd76fadba879e11ba9303  Emacs-19.25/lisp/dired-aux.elc
  546. +b3d2defa03137543f096299e989840fb  Emacs-19.25/lisp/dired.elc
  547. +082e74efa72f79d885f01832b82b3392  Emacs-19.25/lisp/disass.elc
  548. +98634ea7d6ba03a2076c5fbcc4932615  Emacs-19.25/lisp/disp-table.elc
  549. +ca7add87c19a156018d26770603ebbc0  Emacs-19.25/lisp/dissociate.elc
  550. +a637da3bc76f5b7894c4a984bdf0ff3b  Emacs-19.25/lisp/doctor.elc
  551. +0eaa4256b19b1f5a48e2e012d655930a  Emacs-19.25/lisp/dos-fns.elc
  552. +13d55ca6168da3040952baf4d8f7c488  Emacs-19.25/lisp/double.elc
  553. +a7c0f8cda55d711ef70d18c511a95623  Emacs-19.25/lisp/dunnet.elc
  554. +6cfa63dfa4488ad1e1baf33c1a6ee1ed  Emacs-19.25/lisp/easymenu.elc
  555. +05a3fe33373715eea3b862da3d964b56  Emacs-19.25/lisp/ebuff-menu.elc
  556. +1c9e1c8276465d1e02acad2e7a60a4c0  Emacs-19.25/lisp/echistory.elc
  557. +59418375135be73d458fb7157cb2595e  Emacs-19.25/lisp/edebug.elc
  558. +2d32219ffd8f1194571a1697b810ce62  Emacs-19.25/lisp/ediff.elc
  559. +9de0062aaa2436f91a30d7da0a56b102  Emacs-19.25/lisp/edmacro.elc
  560. +53fb8ba264c7880faec28e86baae1993  Emacs-19.25/lisp/edt.elc
  561. +1e5bac299ddede32b83b0da5690ef7d5  Emacs-19.25/lisp/ehelp.elc
  562. +840039d66af78c98aa54960102d1b2f2  Emacs-19.25/lisp/electric.elc
  563. +ec275dbae2e6e83fd734ba45d4485ae2  Emacs-19.25/lisp/emacsbug.elc
  564. +c53ccb538cc0b3de06cee170b1776e87  Emacs-19.25/lisp/emerge.elc
  565. +598ee93164494f7cc513043dfaf5aa21  Emacs-19.25/lisp/env.elc
  566. +bf67d078f714a8bbb94e67fe9d56baf8  Emacs-19.25/lisp/etags.elc
  567. +655ac85234852acdc53fc98c874d6516  Emacs-19.25/lisp/eval-reg.elc
  568. +97fe79bc8010828bf0ecdd9f25c179b3  Emacs-19.25/lisp/faces.elc
  569. +f0e3dfb2c21a8cc4088ebecdcadf8e1a  Emacs-19.25/lisp/files.elc
  570. +a8f3b03a31c226c794273c45927e8315  Emacs-19.25/lisp/fill.elc
  571. +85c5fdb9da640dab6c000c3dc2694b15  Emacs-19.25/lisp/find-dired.elc
  572. +b3e17eaf8439ac8d175bb668841b71ca  Emacs-19.25/lisp/find-gc.elc
  573. +39eab2fa809e84843e530d20d2b7f906  Emacs-19.25/lisp/finder-inf.elc
  574. +edcdad91a899ceec267c48c6f9c226b0  Emacs-19.25/lisp/finder.elc
  575. +d4f9d1b2832dea5cfb172d54dc05d5c8  Emacs-19.25/lisp/float-sup.elc
  576. +e9f004b9703199fef15fc1e578b61b7c  Emacs-19.25/lisp/float.elc
  577. +abbb80d50d7d993b9d1d1b7b9ff6dbd0  Emacs-19.25/lisp/flow-ctrl.elc
  578. +3d5b03dfac26422ecf76dfb804acac73  Emacs-19.25/lisp/font-lock.elc
  579. +9848e74def36d6562d8d32aeca742749  Emacs-19.25/lisp/forms-d2.elc
  580. +c81bcb20190be330bb925ada6d2b946a  Emacs-19.25/lisp/forms-pass.elc
  581. +7059eefd130929fb8c030339f1b4601e  Emacs-19.25/lisp/forms.elc
  582. +1bbb4e2246dffe114ea70e7d9388e7ab  Emacs-19.25/lisp/fortran.elc
  583. +99b19173dba65ae71290a80aca0a4714  Emacs-19.25/lisp/frame.elc
  584. +624ee329c14e3a91d5d1348a2a4d72b3  Emacs-19.25/lisp/gnus-uu.elc
  585. +697af50630bc432fa8a8aa48856e6f33  Emacs-19.25/lisp/gnus.elc
  586. +4eb228e56d4305d7cfda6791755f760a  Emacs-19.25/lisp/gnusmail.elc
  587. +db0e435600a22f997f1e852195285cd2  Emacs-19.25/lisp/gnusmisc.elc
  588. +4699cf113b700a8e6f0d145a7f00cf32  Emacs-19.25/lisp/gnuspost.elc
  589. +ab02afd14bad48448ef0fc940d57ee56  Emacs-19.25/lisp/gomoku.elc
  590. +eba9acb29e6b527821181798532b6c81  Emacs-19.25/lisp/gosmacs.elc
  591. +ca1ea9ca9b7ac556293e5cbe3b5e0e96  Emacs-19.25/lisp/gud.elc
  592. +b6db7c91ee5288ef9c680d6d80a3a927  Emacs-19.25/lisp/lpr.elc
  593. +0b2ecc4cfe4a99c5ecd19afc7fb1800d  Emacs-19.25/lisp/hanoi.elc
  594. +9ad4a14038e5e149f2c5b56e4983147e  Emacs-19.25/lisp/help-macro.elc
  595. +ff1668f9f879a69cfb0512f49c62b349  Emacs-19.25/lisp/help.elc
  596. +f733f5bece43b5876319e5b9c73dd5dd  Emacs-19.25/lisp/helper.elc
  597. +d08e703a69bd5b0a861e887c24498434  Emacs-19.25/lisp/hexl.elc
  598. +1c660a2efb646f7247c3c6f0c112e6f2  Emacs-19.25/lisp/hideif.elc
  599. +02d41741509df5f829af5a9bdd1b9c35  Emacs-19.25/lisp/hilit19.elc
  600. +fbf9c6a0809e3119247e4068222353f6  Emacs-19.25/lisp/hippie-exp.elc
  601. +b55931fff9faa6981ac560db7f7d9004  Emacs-19.25/lisp/holidays.elc
  602. +b052fa982bd3d600cac96fb365a1e38b  Emacs-19.25/lisp/icomplete.elc
  603. +181828fff99a5ea1afb3e14d1b6ad5fb  Emacs-19.25/lisp/icon.elc
  604. +f32110bc662737400c0b2f28acb38099  Emacs-19.25/lisp/ielm.elc
  605. +025388ecb16d47cb61014f12c049b23e  Emacs-19.25/lisp/imenu.elc
  606. +18928f58dad51dd7b4e06dd73fc6dd23  Emacs-19.25/lisp/indent.elc
  607. +5c5d36d339d8c25e9c885202d679b304  Emacs-19.25/lisp/inf-lisp.elc
  608. +ceff4fb6203e3a1a1710feae6cd2709c  Emacs-19.25/lisp/info.elc
  609. +e886c3211853a2f39e3bf3b563406edb  Emacs-19.25/lisp/informat.elc
  610. +3c0dfac0acb45a979c74f13bc2d95615  Emacs-19.25/lisp/isearch.elc
  611. +9410620035922578eff622f8e6de3c3a  Emacs-19.25/lisp/iso-acc.elc
  612. +d2a75cbbb229ffd149ce53cd32addc06  Emacs-19.25/lisp/iso-ascii.elc
  613. +fa7d221f156beb39086819ee290864e5  Emacs-19.25/lisp/iso-cvt.elc
  614. +d3e87600636f8ca23b832edac5750502  Emacs-19.25/lisp/iso-insert.elc
  615. +2600717f7080f6557b307d76acd3d3ab  Emacs-19.25/lisp/iso-swed.elc
  616. +f2da5ef9effa352f7b045e6994751225  Emacs-19.25/lisp/man.elc
  617. +180f599d578fb21ecce54ca2552e735e  Emacs-19.25/lisp/iso-syntax.elc
  618. +cb52bf7120bf0964e0c8947a59b96842  Emacs-19.25/lisp/ispell.elc
  619. +2ed9575ae8b207334e89462ddd444248  Emacs-19.25/lisp/kermit.elc
  620. +fea4e0926b69e1eb602b1b275df21cd7  Emacs-19.25/lisp/jka-compr.elc
  621. +4a4435e4d113476ae6261f2a2bd550d3  Emacs-19.25/lisp/ledit.elc
  622. +7203f2ce14b6eba46c530040771139a1  Emacs-19.25/lisp/levents.elc
  623. +49ccf179f20bbb6cded00291f0daa41c  Emacs-19.25/lisp/life.elc
  624. +1959ba01b6a365c5f2202d0132223a91  Emacs-19.25/lisp/lisp-mnt.elc
  625. +87d93cfaf1681e769e4c635598ba8676  Emacs-19.25/lisp/lisp-mode.elc
  626. +cec051110d3bf2a118e2159999742ffa  Emacs-19.25/lisp/lisp.elc
  627. +0c0ebd22a838651ef890c31f6497ec14  Emacs-19.25/lisp/lmenu.elc
  628. +6210aca65806df13e87600a14960aa21  Emacs-19.25/lisp/loadhist.elc
  629. +8664b394dfe11c95dda240947fb59d6e  Emacs-19.25/lisp/ls-lisp.elc
  630. +edfa96375da3aa4543594946a12547e7  Emacs-19.25/lisp/lselect.elc
  631. +1cfe7000550f7e710b5a94a017f5ecf9  Emacs-19.25/lisp/lucid.elc
  632. +6b855b0a8a711b237f19392cdb1b5f77  Emacs-19.25/lisp/lunar.elc
  633. +b207defacb19fb57d28d044ea32e1dfa  Emacs-19.25/lisp/macros.elc
  634. +c6b3e5c0b3fc4712180898b49f595b15  Emacs-19.25/lisp/mail-extr.elc
  635. +a3638c37409523077462f4133472ab94  Emacs-19.25/lisp/mail-hist.elc
  636. +338fa1da26749d6ca0a965a0535005bd  Emacs-19.25/lisp/mail-utils.elc
  637. +f88651939f27fb8fc2656e162b11730a  Emacs-19.25/lisp/mailabbrev.elc
  638. +843db405b19fbb3e87f3441523947826  Emacs-19.25/lisp/mailalias.elc
  639. +88389f3a67c61c843e8b877e33633438  Emacs-19.25/lisp/mailpost.elc
  640. +3fd5540d963895e3b40b027ab3c24670  Emacs-19.25/lisp/makefile.elc
  641. +c865624df5cfd1b459087e0df0f6c6f1  Emacs-19.25/lisp/makeinfo.elc
  642. +7722d8aac662719a5100cb57ea17571b  Emacs-19.25/lisp/makesum.elc
  643. +fb20e1b5319bd74bdc3c6076d8470e74  Emacs-19.25/lisp/map-ynp.elc
  644. +5ad747ba4d6908d4666a5b1b05351602  Emacs-19.25/lisp/medit.elc
  645. +e13d3fe88a31f80f26e6a8699f140a22  Emacs-19.25/lisp/meese.elc
  646. +06c7c78a4dd398f94214e754e926d575  Emacs-19.25/lisp/menu-bar.elc
  647. +64a5f8e6cdf147d4c343d07eb8177132  Emacs-19.25/lisp/metamail.elc
  648. +31d3f3dd7f7794252c31503e210ea6e9  Emacs-19.25/lisp/mh-comp.elc
  649. +c2e5de04da3e459e7f04d697d810f559  Emacs-19.25/lisp/mh-e.elc
  650. +abb441d9be81a8a9bbcd9ddfd5d3f8e5  Emacs-19.25/lisp/mh-funcs.elc
  651. +da43f0becdc518e3a20f5917e2cbd6b3  Emacs-19.25/lisp/mh-mime.elc
  652. +e5ce698e4129009bb7edcb22f4fd0f24  Emacs-19.25/lisp/mh-pick.elc
  653. +d3ed8d58f39f906f3152a07536063700  Emacs-19.25/lisp/mh-seq.elc
  654. +f04df03983830e69fd1a151c8a5c03b4  Emacs-19.25/lisp/mh-utils.elc
  655. +e942cda74f723c84816c26c400f4c354  Emacs-19.25/lisp/mhspool.elc
  656. +8a8ab7bc852deaa9574f250bfc0a04a6  Emacs-19.25/lisp/mim-mode.elc
  657. +288b9e31b5a74b547d2bd9968a158b9f  Emacs-19.25/lisp/mim-syntax.elc
  658. +6333838a1eee7b9595d674233b430c49  Emacs-19.25/lisp/misc.elc
  659. +c0263418873bb25c3f183d9696bbe535  Emacs-19.25/lisp/mlconvert.elc
  660. +e1b20bb2e7232b5359e650e4bbdca02c  Emacs-19.25/lisp/mldrag.elc
  661. +9caa412724771e9afe775a896c416325  Emacs-19.25/lisp/mlsupport.elc
  662. +08114980d0f432fb1749d0ef224e7dd8  Emacs-19.25/lisp/modula2.elc
  663. +35d0de54270d3330e093dd2abade1197  Emacs-19.25/lisp/mouse-sel.elc
  664. +3eb3c2fbbe72b15f27cb144a157bf7ee  Emacs-19.25/lisp/mouse.elc
  665. +39fa20822814e0093a3c55c934200185  Emacs-19.25/lisp/mpuz.elc
  666. +8a272aab9f17915dcb36dd01b866cc9a  Emacs-19.25/lisp/netunam.elc
  667. +b1da72d8fd1102a8aef3fa91d0915e66  Emacs-19.25/lisp/nnspool.elc
  668. +e64caf373001fbbb7d372e1e07bd3ca1  Emacs-19.25/lisp/nntp.elc
  669. +ea29702c53b448d58d1707a995a0d141  Emacs-19.25/lisp/novice.elc
  670. +307ab1956038c729ee830544f46374d5  Emacs-19.25/lisp/nroff-mode.elc
  671. +95999667824127d02a492330552c4673  Emacs-19.25/lisp/options.elc
  672. +8777af7ea84e69690e7db544768d4ced  Emacs-19.25/lisp/outline.elc
  673. +d53be012524aa960551a11fd07bf390b  Emacs-19.25/lisp/page-ext.elc
  674. +57f4880cf832920a46bd9d39e8a7d7e8  Emacs-19.25/lisp/page.elc
  675. +cff44c4eea427cefe4e3cf65d6bbf7ae  Emacs-19.25/lisp/paragraphs.elc
  676. +3250d6391648058f791c2dd5daf379ad  Emacs-19.25/lisp/paren.elc
  677. +1f50f5c57c0f9228437994d35386bcd3  Emacs-19.25/lisp/pascal.elc
  678. +3288f6e4e92a19a641c5d460ce67b17b  Emacs-19.25/lisp/perl-mode.elc
  679. +85c320a5e9452f2abca63bb4329b96b8  Emacs-19.25/lisp/picture.elc
  680. +8a3988e24fd4254c57320fd3826b8fd6  Emacs-19.25/lisp/pp.elc
  681. +8fbfd056cecab7029f42ec6cc1d13eb0  Emacs-19.25/lisp/profile.elc
  682. +02c7fd713d327c6af40bf2ff45f62f12  Emacs-19.25/lisp/prolog.elc
  683. +b268dce6c475da7e015f570cdd798033  Emacs-19.25/lisp/rcompile.elc
  684. +72918ec599af0bbcf7d10a653725e612  Emacs-19.25/lisp/rect.elc
  685. +9817483c5ebf984faacbb434afe3dd06  Emacs-19.25/lisp/refbib.elc
  686. +1161a424164a3492421de803d8dc971f  Emacs-19.25/lisp/refer.elc
  687. +dcc590fd8f13eebb85ecba13a7d90088  Emacs-19.25/lisp/regi.elc
  688. +71d852f9142b3dcde92184539bff468c  Emacs-19.25/lisp/register.elc
  689. +cc6881938b51a6de870fb4865109feb0  Emacs-19.25/lisp/replace.elc
  690. +ada4458da52d630bf69f5219d9c3f0cd  Emacs-19.25/lisp/reporter.elc
  691. +0bc748f0f740c55a359212dfa48303d7  Emacs-19.25/lisp/reposition.elc
  692. +7db7da081fa3699a6907169cea0b6eb8  Emacs-19.25/lisp/resume.elc
  693. +f113d0120e466ca9e2b3ed48da0b197c  Emacs-19.25/lisp/rfc822.elc
  694. +953162d42c842089d2fe7b11838a6209  Emacs-19.25/lisp/ring.elc
  695. +816a44319eb109ac56c690a2b16ee362  Emacs-19.25/lisp/rlogin.elc
  696. +5271f797beecef8359a9977aca3f25ff  Emacs-19.25/lisp/rmail.elc
  697. +082c1b035dabf17c2497e6c974689fcb  Emacs-19.25/lisp/rmailedit.elc
  698. +c1c18b6e5559c1e4794617bea7df3d52  Emacs-19.25/lisp/rmailkwd.elc
  699. +3a4556e3a54d063da85e09daca01bc38  Emacs-19.25/lisp/rmailmsc.elc
  700. +2060112d2ec8d963f2f57935073e0e7c  Emacs-19.25/lisp/rmailout.elc
  701. +83d033c47514ebaaf6924eeffabdbc91  Emacs-19.25/lisp/rmailsort.elc
  702. +4894afb6d154ad2d7d5c72719c04dd3b  Emacs-19.25/lisp/rmailsum.elc
  703. +443e978a178077102b2b8c31374a0b4b  Emacs-19.25/lisp/rnews.elc
  704. +200974723c6b3a11e16d04cb1832c1c3  Emacs-19.25/lisp/rnewspost.elc
  705. +a878992ecb65d117b20cf9d4fb34f1e7  Emacs-19.25/lisp/rot13.elc
  706. +ff46b8ff8ee6899e91672f85c124509d  Emacs-19.25/lisp/rsz-mini.elc
  707. +f1536a246da91458866a5e63cfde851a  Emacs-19.25/lisp/s-region.elc
  708. +c2fe156ae4c57100eacb06938a5ff338  Emacs-19.25/lisp/saveplace.elc
  709. +4eed06f294d0492a5c68102206477cc3  Emacs-19.25/lisp/scheme.elc
  710. +e545d2fd55f881404272990d025e6e6e  Emacs-19.25/lisp/scribe.elc
  711. +75eafdac4cf93f25767320b81e3adbcf  Emacs-19.25/lisp/scroll-bar.elc
  712. +a334b7745198ce28ada84d4881b307c5  Emacs-19.25/lisp/select.elc
  713. +ab9879de582ba3bfff3021416ad3483c  Emacs-19.25/lisp/sendmail.elc
  714. +fb14e820e437edc3399342bc93f4fcda  Emacs-19.25/lisp/server.elc
  715. +d1e3ae4901f51de0d8dfd8995452d790  Emacs-19.25/lisp/sgml-mode.elc
  716. +35e3ced8f8903299500df673ed477a43  Emacs-19.25/lisp/sh-script.elc
  717. +393342950a493eca8222f1a109c35459  Emacs-19.25/lisp/shadowfile.elc
  718. +07001f04cfd80bfbddfdc32fbd679e49  Emacs-19.25/lisp/shell.elc
  719. +6b962d422eba316cc4f6b4831e6844ec  Emacs-19.25/lisp/simple.elc
  720. +952ef8c1d1f906c7682c5a62be1fbb7b  Emacs-19.25/lisp/simula.elc
  721. +b55d8f98855c010b595605fac6bec558  Emacs-19.25/lisp/skeleton.elc
  722. +603bc271506d9c013bd33f9b56dbe2e7  Emacs-19.25/lisp/solar.elc
  723. +086042c178be10a16853e8304fa4d0a6  Emacs-19.25/lisp/sort.elc
  724. +d491e7f0cf01ea2ee0280fcde47b2e65  Emacs-19.25/lisp/soundex.elc
  725. +0a9f3e7285bd76a86c870aaff08bad9d  Emacs-19.25/lisp/spell.elc
  726. +e74c4d27cc10ab148b32cad7539bc46b  Emacs-19.25/lisp/spook.elc
  727. +de23d798febf1d1e1e47830fa2990303  Emacs-19.25/lisp/startup.elc
  728. +dea6b74f10b680e8001d1ea46e13a55f  Emacs-19.25/lisp/studly.elc
  729. +e67649c597a41ae2e282e024c81070e7  Emacs-19.25/lisp/subr.elc
  730. +879a8168949b3529721052f30d4c97cc  Emacs-19.25/lisp/supercite.elc
  731. +38477d7f9733d45d4ad2768bd345ad57  Emacs-19.25/lisp/swedish.elc
  732. +1bf6cde0c0dff27a0a406166bd716c23  Emacs-19.25/lisp/tabify.elc
  733. +752cab4ce763781a69e8890a9624acf3  Emacs-19.25/lisp/tar-mode.elc
  734. +4fc39e524f0f4cfec66b1555f33899b3  Emacs-19.25/lisp/tcl-mode.elc
  735. +f6acd2b89f9fc9c83bc346d89f4691f7  Emacs-19.25/lisp/tcp.elc
  736. +26be021cd8898a52d2d694575e2a8c40  Emacs-19.25/lisp/telnet.elc
  737. +48a8896e098103c2c704d37f566dee57  Emacs-19.25/lisp/tempo.elc
  738. +620476e214daf450ead5bb41b09883d7  Emacs-19.25/lisp/term-nasty.elc
  739. +241dbc669a0a4a81171791b710d6eb8c  Emacs-19.25/lisp/terminal.elc
  740. +9e2a12136828fed94f9b6668662b029b  Emacs-19.25/lisp/tex-mode.elc
  741. +d5743a3ba3ad697a48650303ddfc892e  Emacs-19.25/lisp/texinfmt.elc
  742. +c3c351393414fe5a21410671d26f2eb3  Emacs-19.25/lisp/texinfo.elc
  743. +0a25277c52cc9d097f3a56617608e3b3  Emacs-19.25/lisp/texnfo-upd.elc
  744. +4a9aa3013ed62de4b4c75d1f9eeda969  Emacs-19.25/lisp/text-mode.elc
  745. +3b7612c19ec57622cd81c9d1510abb3f  Emacs-19.25/lisp/thingatpt.elc
  746. +c561a129855dced5eaff047aaf1e16bb  Emacs-19.25/lisp/time-stamp.elc
  747. +330af30f38815acd09c358b5ca1f1e05  Emacs-19.25/lisp/time.elc
  748. +c677424220f16f700fb5a1b95f422ac2  Emacs-19.25/lisp/timer.elc
  749. +99cf702f89d140f6c2138d43ad79cc39  Emacs-19.25/lisp/timezone.elc
  750. +eda55aa16480ba0355a3d776a829211a  Emacs-19.25/lisp/tpu-edt.elc
  751. +a4ef625051f8c0c5d9abb8de55500243  Emacs-19.25/lisp/tpu-extras.elc
  752. +49acedc1df1b33818c5b7550fa047200  Emacs-19.25/lisp/tpu-mapper.elc
  753. +2213ef81532b199c5933164ec5984ed8  Emacs-19.25/lisp/tq.elc
  754. +d7060396e1fa1dc5a413ca02deb112e3  Emacs-19.25/lisp/trace.elc
  755. +0815c03072ebc002e7c2ce854aa23aca  Emacs-19.25/lisp/two-column.elc
  756. +1f0dda3cf9945a546a84e45474af6728  Emacs-19.25/lisp/uncompress.elc
  757. +10609f43df6a7cfcf179567029239e93  Emacs-19.25/lisp/underline.elc
  758. +b80d6d6bb0fa9ec85aaa4cb95c75de3d  Emacs-19.25/lisp/undigest.elc
  759. +19276de08fddf887ebcca7c24f927bea  Emacs-19.25/lisp/unrmail.elc
  760. +c2fef238383460b80b151918902be503  Emacs-19.25/lisp/unused.elc
  761. +417836f0bc9552b913210bea91fb9aa1  Emacs-19.25/lisp/upd-copyr.elc
  762. +b75d741649966259cc7cd476b2b22864  Emacs-19.25/lisp/userlock.elc
  763. +3a87f7bc9ed15998a4ee178bacabc673  Emacs-19.25/lisp/vc-hooks.elc
  764. +575e1b9c2dd8748ffc9a1fb13cbd8e80  Emacs-19.25/lisp/vc.elc
  765. +4162466897099c0f7ad0094256e72888  Emacs-19.25/lisp/vi.elc
  766. +ab726c83e40592ee1c669d5e42e27f0d  Emacs-19.25/lisp/view.elc
  767. +5f1b6e22bb0d868129ab6d0092a0126c  Emacs-19.25/lisp/vip.elc
  768. +22cb739139679b04f47de1cde7069564  Emacs-19.25/lisp/vms-patch.elc
  769. +36cf378b54e7efa060704d37aafefd36  Emacs-19.25/lisp/vms-pmail.elc
  770. +0377b4ac5b91418b65e5bab1001b67b1  Emacs-19.25/lisp/vmsproc.elc
  771. +6269a87400e13bef9f5121fc1988682f  Emacs-19.25/lisp/vmsx.elc
  772. +3fa580d759d1e55f4c931b4d2c267efc  Emacs-19.25/lisp/vt100-led.elc
  773. +d636f9f12691a1c0e11ea222b0412ee5  Emacs-19.25/lisp/window.elc
  774. +6db721091071c495dd5c2b7d21b2441b  Emacs-19.25/lisp/ws-mode.elc
  775. +ffa6b77d6af4913b19457cabe8685197  Emacs-19.25/lisp/x-menu.elc
  776. +7ba23f4bd1ed74142dff7a8b8a9c2506  Emacs-19.25/lisp/xscheme.elc
  777. +c34f4e0c1c6bb6eed0b30d9a0cee0d5a  Emacs-19.25/lisp/yow.elc
  778. +eddbcb510e13316bc76352f718f3e72f  Emacs-19.25/lisp/forms-d2.dat
  779. +c66094d60ea79a6a8e2461b7a05d1d8b  Emacs-19.25/lisp/ChangeLog
  780. +5bf55e39b9f1aedbfc6593e693fb716c  Emacs-19.25/lisp/Makefile
  781. +2472f6169dccb9e47a0d5b133bd12b5d  Emacs-19.25/lisp/ChangeLog.1
  782. +abdcae34bcfa5ab45a4904994cff193c  Emacs-19.25/lisp/ChangeLog.2
  783. +845d1546b90dd964d3397499aeadb4ee  Emacs-19.25/lisp/ChangeLog.3
  784. +39c13a674da4f4613610572e31aeb8b9  Emacs-19.25/lisp/README
  785. +497fd4e9a70eb3575468038e8fc918b4  Emacs-19.25/lisp/dired.todo
  786. +fbf3f31476d573df877ded4b59bcc234  Emacs-19.25/lisp/amiga-init.el
  787. +ed3d12d6283a95cc8bf7f5d985312897  Emacs-19.25/lisp/amiga-menu-bar.el
  788. +e85614ec048c560288812e40dd53cb6b  Emacs-19.25/lisp/amiga-menu.el
  789. +9734b8710fcb1194ae8b6eb5964eb0fe  Emacs-19.25/lisp/amiga-mouse-old.el
  790. +c0e7bfce1b15af7e3a7aef0f9f93bacb  Emacs-19.25/lisp/amiga-mouse.el
  791. +26c66033820ab5ee16793f005c56c2a5  Emacs-19.25/lisp/amiga-init.el!
  792. +83937695a10f85ca083a72bf874ff8d1  Emacs-19.25/lisp/simple.el
  793. +7a1caaedd9468533d7565fc6ca408c32  Emacs-19.25/lisp/amiga-init.elc
  794. +0c11001640a790a88103c4d19f7bedfd  Emacs-19.25/lisp/sendmail.el
  795. +7c4d0f31f6d0ed27a97130d697c693e9  Emacs-19.25/lisp/abbrevlist.elc
  796. +387f14cd6c088d6d602533ac0dc7859f  Emacs-19.25/site-lisp/reporter.elc
  797. +ddee0cee2149fe9ab4bb8842d052684b  Emacs-19.25/site-lisp/vm-auto-archive.el
  798. +53b28c8f9189356bd2321f44faf2bf44  Emacs-19.25/site-lisp/tapestry.elc
  799. +317b702552639fbcb65dd2482bd1ae44  Emacs-19.25/site-lisp/timezone.elc
  800. +936a37c5425f5a1e408a1a5d9a9fb979  Emacs-19.25/site-lisp/cc-compat.el
  801. +2f3cadfbe6b2f05283ff5127a48e26a1  Emacs-19.25/site-lisp/cc-mode.el
  802. +80cc70fbba8d1bcfa71f84a4410689f4  Emacs-19.25/site-lisp/cc-mode-18.el
  803. +632a53fb252dd693de942ffdeb41c6f5  Emacs-19.25/site-lisp/ChangeLog
  804. +fcc2ec446b4c5e3007d9d199d531cacc  Emacs-19.25/site-lisp/DUMPING
  805. +a06b60dab22bca60bd1676cbac373191  Emacs-19.25/site-lisp/MANIFEST
  806. +e493f47f6cf20222c7d9f3f8549350f8  Emacs-19.25/site-lisp/README
  807. +e7d5a24f590997bd258b79ab9032f6e5  Emacs-19.25/site-lisp/vm.el
  808. +11da86bad77b18e71d737d3d1c58f2e2  Emacs-19.25/site-lisp/vm.elc
  809. +65e29216fe7b277824b42b016af62812  Emacs-19.25/site-lisp/vm.elc.old
  810. +0e47cb93d812d25b8d84ea6220dff21f  Emacs-19.25/site-lisp/vm-delete.elc
  811. +b64b0f5722ad94d6c93434e1fbbf85c9  Emacs-19.25/site-lisp/vm-digest.elc
  812. +8a5d9a059fb283e87cbce7a411dfa6b9  Emacs-19.25/site-lisp/vm-edit.elc
  813. +7e465e339d8bcf1bb94f45b18299f2f2  Emacs-19.25/site-lisp/vm-folder.elc
  814. +d183e5fbd82038172535086c0e5524d4  Emacs-19.25/site-lisp/vm-license.elc
  815. +510ee02c330db85209030ad838fd7fbc  Emacs-19.25/site-lisp/vm-mark.elc
  816. +5c6d1b318f9cdb4ed466b73600d44063  Emacs-19.25/site-lisp/vm-message.elc
  817. +7846bf76ae30687e3e073060a6ca7826  Emacs-19.25/site-lisp/vm-minibuf.elc
  818. +62466bd403752c623e2a0e21e94fd746  Emacs-19.25/site-lisp/vm-misc.elc
  819. +0a1c7ab498938e7d767f7aa609f48e59  Emacs-19.25/site-lisp/vm-motion.elc
  820. +c87f2eecb4a0498fe86f5852a68c5d32  Emacs-19.25/site-lisp/vm-page.elc
  821. +6ef658ce7bf8ebdad639c23d2a134dc6  Emacs-19.25/site-lisp/vm-pop.elc
  822. +f69ca0a3df720da32863ff9e96fc378b  Emacs-19.25/site-lisp/vm-reply.elc
  823. +d84f8490dbd6285354b46e2f3c8c33ad  Emacs-19.25/site-lisp/vm-save.elc
  824. +3bd5b86f710cfd458e2c2509d556b7a2  Emacs-19.25/site-lisp/vm-search.elc
  825. +038f2c4ae7234320af61feac5192cd24  Emacs-19.25/site-lisp/vm-sort.elc
  826. +d73af36a831c21ed5f6e264f71784158  Emacs-19.25/site-lisp/vm-startup.elc
  827. +f7ec5f1e85ff7b2e8ffe0be935abeda8  Emacs-19.25/site-lisp/vm-summary.elc
  828. +f667157f937ea36e8006f81ff4f5717c  Emacs-19.25/site-lisp/vm-thread.elc
  829. +cf2da2cff497bf3c6c9be5d663401f62  Emacs-19.25/site-lisp/vm-undo.elc
  830. +de51a4f93e77669e6bef7e2661ccbb72  Emacs-19.25/site-lisp/vm-vars.elc
  831. +704646c7273ded1496e8fb7b01b67c09  Emacs-19.25/site-lisp/vm-version.elc
  832. +984dcb991dfb6fe42cd4e9531ae8211a  Emacs-19.25/site-lisp/vm-virtual.elc
  833. +dac2ee9ae18fc43b937555c9f1cb84e8  Emacs-19.25/site-lisp/vm-window.elc
  834. +2fc01d2c5dde98b28ee1794c7a295057  Emacs-19.25/src/amiga_malloc.c
  835. +299d077e92cffc796fbf5b60fa0a90e6  Emacs-19.25/src/undo_protos.h
  836. +bc9faec43b6bed0021953fa5b159c91a  Emacs-19.25/src/data_protos.h
  837. +d63edf81e419b7de687ed0d8b4bc7acd  Emacs-19.25/src/doc_protos.h
  838. +6e34a639e655a4a43bcd8a4040e4813f  Emacs-19.25/src/callint_protos.h
  839. +df18148f1885696fe97e0b9357abdfc5  Emacs-19.25/src/floatfns_protos.h
  840. +77abd6e84d28d8ebf33f75ad78012d37  Emacs-19.25/src/fns_protos.h
  841. +52a28907dd81b88c7ddc1adbe4aec919  Emacs-19.25/src/print_protos.h
  842. +a7952e430d601849b30535a9a79619c3  Emacs-19.25/src/lread_protos.h
  843. +2367b13e2d66192f90c3c53e69fb2c60  Emacs-19.25/src/abbrev_protos.h
  844. +a8f388f918998612283e5dc2f2ef73b3  Emacs-19.25/src/syntax_protos.h
  845. +fc030155229a5a65531b7f5dd3bb3df6  Emacs-19.25/src/amiga_dump_protos.h
  846. +6864d5cb86b7058b068ed84ceb35a523  Emacs-19.25/src/mocklisp_protos.h
  847. +3293d2f826d9bc418c5eb932b9389122  Emacs-19.25/src/bytecode_protos.h
  848. +d1aa9c6112e605d8de3341dc18933356  Emacs-19.25/src/process_protos.h
  849. +a6daa1c8a7208eef976f98e70c26afa2  Emacs-19.25/src/callproc_protos.h
  850. +780f28632227e34790408b710c9936ec  Emacs-19.25/src/doprnt_protos.h
  851. +eb80f6fca88e9a2ae7306dc94f680a51  Emacs-19.25/src/getloadavg_protos.h
  852. +d0ccec9a4a5c3a559f7e54e1eb7b5264  Emacs-19.25/src/amiga_clipboard_protos.h
  853. +f7add8f36ac5e0320380cb7892a1f800  Emacs-19.25/src/amiga_serial_protos.h
  854. +9132788a428029d6a84172735d3929e4  Emacs-19.25/src/amiga_menu_protos.h
  855. +c3a7463abe6861ee156821e5cd0987dc  Emacs-19.25/src/amiga_rexx_protos.h
  856. +58c7f798d1725494ab880bfb7dc6bd0b  Emacs-19.25/src/amiga_term_protos.h
  857. +b3c3eb37cf9d2ee740b51a5f08a0d577  Emacs-19.25/src/protos.c
  858. +ad49f23a16b6bab308c8adb79fd5a8d1  Emacs-19.25/src/amiga_sysdep_protos.h
  859. +2d353983b16a540a852d71fc63704cce  Emacs-19.25/src/regex_protos.h
  860. +9e4dc3b9033cfa9d73bb7f02a46f0a29  Emacs-19.25/src/dired.c
  861. +b762e8382bb2814b2d4977366d16253c  Emacs-19.25/src/blockinput.h
  862. +e73485240742036a763d8417dc16b2b5  Emacs-19.25/src/buffer.h
  863. +8b85475ab3e774e566d27ec57a92883c  Emacs-19.25/src/chpdef.h
  864. +40da32f5c68726203609debbe65e88fb  Emacs-19.25/src/cm.h
  865. +ebfaa0e0946ebdab8a1930a3238d82b2  Emacs-19.25/src/commands.h
  866. +3947d97190ec45041d97fbfec3b223b7  Emacs-19.25/src/dispextern.h
  867. +6b318448a12cc97f5c5ebae92aa550be  Emacs-19.25/src/disptab.h
  868. +13ce8e3f0148ef395b9f14783b1848b3  Emacs-19.25/src/getpagesize.h
  869. +2b26000a79a6d1c6eeb0d6f5a1cb110a  Emacs-19.25/src/gnu.h
  870. +04736fa69d82a4def8cbc0194f8ad1ae  Emacs-19.25/src/indent.h
  871. +27e62496508ffaa93d19a8b33329515b  Emacs-19.25/src/ioctl.h
  872. +e3dbdc058ae674ce41041167c99fa2db  Emacs-19.25/src/keyboard.h
  873. +da05855bc2c9b8e192de926d5b1090c5  Emacs-19.25/src/line.h
  874. +e6f9285d2a7d3d2b935bfacfa0eb3b4f  Emacs-19.25/src/macros.h
  875. +06b1517f9f5cf93b8c526348d3d37ccb  Emacs-19.25/src/mem-limits.h
  876. +f6b2ec5b8121e327ff4d241efd6945cb  Emacs-19.25/src/mocklisp.h
  877. +9d43defd851bc009992ab4fa8bb7170b  Emacs-19.25/src/ndir.h
  878. +9f31cf0aa4defd7674664917e58f4b07  Emacs-19.25/src/param.h
  879. +13fc71e904cfb5a038d9ac9a9de28189  Emacs-19.25/src/point.h
  880. +bdc21c071ac33ac0b42984edc816c44c  Emacs-19.25/src/process.h
  881. +4edc08200fd0e325d756c610a965e48a  Emacs-19.25/src/regex.h
  882. +d424c5defa7126cec9337109c67dd8f8  Emacs-19.25/src/sink.h
  883. +b24feb433466e7d3e91b5e2f3d4c123a  Emacs-19.25/src/sink11.h
  884. +bcb3da6c7fb1a4f6d479d006129e4fef  Emacs-19.25/src/sink11mask.h
  885. +6b9749c1d191e70362ac4aa5361dc678  Emacs-19.25/src/sinkmask.h
  886. +fff8c06f76914a5becb644c0bc2e7244  Emacs-19.25/src/syssignal.h
  887. +8eceb08ab9012a8f38e7cbc612002474  Emacs-19.25/src/systime.h
  888. +2e74e62eea71ebf48e710d486f0887dd  Emacs-19.25/src/termchar.h
  889. +c555e494661c04e7036d4be8fc2b5de1  Emacs-19.25/src/termhooks.h
  890. +8a1fe4b329423c3ec43bd938f8e7eaf8  Emacs-19.25/src/termopts.h
  891. +8a816de1277baaefc8ac2b0f211067ca  Emacs-19.25/src/uaf.h
  892. +dedbfbc0ba618509efc1eca604356916  Emacs-19.25/src/vlimit.h
  893. +bed79ebbac7b9e30e3af631b2c6a80e5  Emacs-19.25/src/window.h
  894. +6dd7ebb2cc52c34a71be38dd3a451ec0  Emacs-19.25/src/config.h.in
  895. +003fb4e5c25bc47526cfefa9d994dc52  Emacs-19.25/src/paths.h.in
  896. +23073165bc3bde3ab41d1e3d9e9afec0  Emacs-19.25/src/intervals.h
  897. +2da48d323b67c934ce58fb73e868e845  Emacs-19.25/src/doc.c
  898. +80706f4c019beabd484a868299fa2a83  Emacs-19.25/src/syntax.c
  899. +1bbeb1ef361581851a1d8e28cc08982f  Emacs-19.25/src/syntax.h
  900. +3c309b1e1691d6df92d1ca677222760d  Emacs-19.25/src/search.c
  901. +603677c9096fc27a087da96c730c6f78  Emacs-19.25/src/keyboard.c
  902. +1a43caa175998f7c138b9a67cea4f51f  Emacs-19.25/src/dostrip.lnk
  903. +25f9ccf6ea18a4736176813cebbf2526  Emacs-19.25/src/lisp.h
  904. +0881e5f720489470b4267674c8ba5b14  Emacs-19.25/src/oldalloca.c
  905. +091ecd5265293a04dca8675ddf31dc43  Emacs-19.25/src/fileio.c!
  906. +91b365ded8bb606e65d232752a076aa4  Emacs-19.25/src/syswait.h
  907. +db49a8f29b565998592fa9c39536a2f0  Emacs-19.25/src/firstfile.c
  908. +9919b93071c785a47c3b7fc0b39430f9  Emacs-19.25/src/xdisp.c
  909. +1c1f3353a16bc2c85cc839b01b6f88e7  Emacs-19.25/src/amiga_term.c
  910. +417f6f4102836c647c118bfcd66f2b6d  Emacs-19.25/src/dispnew.c
  911. +4eb38b2413cc94e5dc17b4119f9a01c1  Emacs-19.25/src/cprinit
  912. +406a2e595107d49d83b2132fa2a437ed  Emacs-19.25/src/amiga_screen.c!
  913. +56f522627f1c14dc5d76621d66d37ef4  Emacs-19.25/src/data.c
  914. +7f1236eb19c3d5769537277bdf66acbf  Emacs-19.25/src/alloc.c
  915. +5de6ff2fb3e0ac5f8f643b3846312940  Emacs-19.25/src/termcap.c
  916. +06a6a7b79dbd36a9d97f8843732a6243  Emacs-19.25/src/amiga_dump.c
  917. +b618f1eba1f0517477c258ec38700d87  Emacs-19.25/src/frame.c
  918. +599e43b5ff8b44f2f432a18e5b8fbe7c  Emacs-19.25/src/smakefile
  919. +c77bc4e24cde539718d4786da9980e6f  Emacs-19.25/src/amiga_processes.c
  920. +9c86eda2f24abf21076e422dbc0fd113  Emacs-19.25/src/amiga_fns.c
  921. +6052fe062d3943369306485e57450e18  Emacs-19.25/src/xdisp_protos.h
  922. +78b2f06fff9cb2c20699ee4fc4ee5413  Emacs-19.25/src/amiga_menu.c
  923. +a858548b2d5602a7d8962f7497cb1369  Emacs-19.25/src/amiga_clipboard.c
  924. +2fc01d2c5dde98b28ee1794c7a295057  Emacs-19.25/src/amiga_malloc.c!
  925. +ea2ab097cdb03811a5fff2a432ed39e7  Emacs-19.25/src/editfns.c
  926. +d81a66c3e5a69dc5f7da7aa6b74351b7  Emacs-19.25/src/term.c
  927. +325f5a161422d9b5eb18f60a8f3b72b4  Emacs-19.25/src/amiga_xmenu_protos.h
  928. +1cd410c85d17630d0b16fbf0c8509530  Emacs-19.25/src/frame.h
  929. +cf554c651122bf4782548743a8f53e9e  Emacs-19.25/src/amiga.h
  930. +aeeaaf4cc8f0df59992af1f30d74846d  Emacs-19.25/src/cdodump.sh
  931. +19a9f88e6ed5f9d0d32c53877b3bd774  Emacs-19.25/src/scroll.c
  932. +47bf9c63b27927a793f4dd14618fea8d  Emacs-19.25/src/puresize.h
  933. +33682239a7d173c482a63b12fdc10458  Emacs-19.25/src/amiga_rexx.c
  934. +36d5a57f5efa756696567efc31a3b63d  Emacs-19.25/src/amiga_serial.c
  935. +71167a90d0dc2eb7d1cfaa0ba2a24e36  Emacs-19.25/src/amiga_sysdep.c!
  936. +057af973c0d769a5924e0c6d4f99919e  Emacs-19.25/src/amiga_tty.c
  937. +31bcd0dd48d21309a0cf6f782cdeb69a  Emacs-19.25/src/scoptions
  938. +6c78c24c05a1a38339f21b2bcdbf224d  Emacs-19.25/src/buffer.c
  939. +5da0c71c8e541663f8ee31aca327f87d  Emacs-19.25/src/callproc.c!
  940. +6344f439011dacb34eacd98545d0f55a  Emacs-19.25/src/regex.c
  941. +cf1e1025b388ffff75b34f8e5905dc09  Emacs-19.25/src/process.c
  942. +53cc74d1ce49a429605486b8a6643a1f  Emacs-19.25/src/s/amigados.h~
  943. +350fdc45e5193262854625bf67f8e203  Emacs-19.25/src/s/amigados.h!
  944. +4452100402215700367e998130903e2b  Emacs-19.25/src/s/amigados.h
  945. +a8715cb8f0ac24a48bb85160bae3cb86  Emacs-19.25/src/m/amiga.h
  946. +20bad93bb730aac2ace9cd71434c7d19  Emacs-19.25/src/semacs.sh
  947. +df3f97370983ba2c4233569032b4cf48  Emacs-19.25/src/frame_protos.h
  948. +9aeaf61898adad6fcc56a5f645fed118  Emacs-19.25/src/protos.h
  949. +bc65da50418efb46779ee4863c9a9fb4  Emacs-19.25/src/emacs.c
  950. +8ca4e1270366ab6247b82228d00084f0  Emacs-19.25/src/st.sh
  951. +101fa96febf286dd45525f09ed0239ed  Emacs-19.25/src/ct.sh
  952. +5196dcf3d5acfd5d4edcb6e8d5f34998  Emacs-19.25/src/amiga_malloc_protos.h
  953. +362453f008fe11b65022ae6d4fd00d1f  Emacs-19.25/src/setlisp.cpr
  954. +2acf44e184ee8416f56a62abda5ea2e5  Emacs-19.25/src/Makefile
  955. +3f53e99df505f0884274a3bfcb755bed  Emacs-19.25/src/terminfo.c
  956. +f2b8456cb7bcf372ce831f6d227c6625  Emacs-19.25/src/textprop.c
  957. +3fe5186ee8aa614bde4b1bb61b189582  Emacs-19.25/src/term_protos.h
  958. +7a197ca6832463f43723c88f798cf65d  Emacs-19.25/src/insdel.c
  959. +e8eb964fed1700bc1521927123b9b5bb  Emacs-19.25/src/keymap_protos.h
  960. +08c9e479c6db0e25b6750534bcbecb1c  Emacs-19.25/src/abbrev.c
  961. +658098c7c2db0b5f142bd26b10081d59  Emacs-19.25/src/dodump.sh
  962. +0a583e588fb1b4c499a6c92d31e5645f  Emacs-19.25/src/tparam.c
  963. +fec166a037477c7ed8fb98ef8539dea3  Emacs-19.25/src/undo.c
  964. +6d9eba80fbcab97466ad8e02c285d344  Emacs-19.25/src/amiga_screen_protos.h
  965. +95705a69157e1dd14404e57952718f99  Emacs-19.25/src/config.h
  966. +2acf44e184ee8416f56a62abda5ea2e5  Emacs-19.25/src/ymakefile
  967. +9e66d9c063f142d27fdd5b7ef85d0ecd  Emacs-19.25/src/dostrip.c
  968. +a979d2e37dd4167954b4328f9be909bf  Emacs-19.25/src/editfns_protos.h
  969. +e8c30556a54f14398ea70a2b825e65b5  Emacs-19.25/src/systty.h
  970. +a9f1a66edb7418279d32816883031348  Emacs-19.25/src/emacssignal.h
  971. +b702756bced852493d90526d94941dd9  Emacs-19.25/src/dispnew_protos.h
  972. +7d59eeb5571802e2e902f1818fe87a28  Emacs-19.25/src/lastfile.c
  973. +941da3e014eaadc70d4d88e92a3b4427  Emacs-19.25/src/amiga_data.c
  974. +95b62aa54438d3df8d6d13775b6790a2  Emacs-19.25/src/keyboard_protos.h
  975. +df9d42d71668a353ac30be9fa6bc6021  Emacs-19.25/src/alloc_protos.h
  976. +0ba1ecbd9f1e21d71777c751ae7e3300  Emacs-19.25/src/vm-limit.c
  977. +31adf91541f82eb8195fa7b9fd78e1b6  Emacs-19.25/src/casefiddle.c
  978. +a0eb6cb025fbe417ea8ae78fc52d9d37  Emacs-19.25/src/casetab.c
  979. +2e4db9e0557bcfa5d55a8eb30bb12a7a  Emacs-19.25/src/doprnt.c
  980. +0b3b88aaacb66775528ccfe26eb6bd39  Emacs-19.25/src/amiga_fns_protos.h
  981. +234f328672af2e5362d648c9a9ee6320  Emacs-19.25/src/paths.h
  982. +0a8e3e7edcefc65ef4a8a47b5fefb4bd  Emacs-19.25/src/eval.c
  983. +d41d8cd98f00b204e9800998ecf8427e  Emacs-19.25/src/xterm.h
  984. +50188e1ff191453ca2cc8cebeb067f8b  Emacs-19.25/src/amiga_tty_protos.h
  985. +7752c404509369f47c066a95dba3ab58  Emacs-19.25/src/window.c
  986. +e97976d2620898fb4d2874f1aa6e4b67  Emacs-19.25/src/amiga_xmenu.c
  987. +94acb80162b3dec63dc10e0597ba6cbd  Emacs-19.25/src/floatfns.c
  988. +b07986a9d0761815a846aec0b4ef663d  Emacs-19.25/src/lread.c
  989. +971c25d45041516c619ec51d4a15e14c  Emacs-19.25/src/simplerexx.c
  990. +a24eebab56496a2ab8aaa42557e80847  Emacs-19.25/src/simplerexx.h
  991. +f899c6c4ee0fff3c556ae86920666956  Emacs-19.25/src/filelock.c
  992. +426cf6e358493835253aa65830f4c44d  Emacs-19.25/src/bytecode.c
  993. +d577b3f32d9c881470600d71e6860c8d  Emacs-19.25/src/callint.c
  994. +9fb0e2e593c24eb719c81345fd54a31d  Emacs-19.25/src/cm.c
  995. +a0e089eac6654e7b595f95930a02daac  Emacs-19.25/src/cmds.c
  996. +f10cfe85d83749b1a91c8546bbb010ef  Emacs-19.25/src/filemode.c
  997. +aefcb9b61a9c87b959168a784a633551  Emacs-19.25/src/fns.c
  998. +8a374459bd5ce56bc81c9dba89682855  Emacs-19.25/src/getloadavg.c
  999. +e586ead4a17a683405f774db36d69817  Emacs-19.25/src/indent.c
  1000. +6c994c5cce9b9fec291d12f5a181159b  Emacs-19.25/src/intervals.c
  1001. +9aaa8f5ed6381d9424ef5c10ba6d93ff  Emacs-19.25/src/eval_protos.h
  1002. +9b782d8e9e3ddae549afadd09e1d219d  Emacs-19.25/src/scroll_protos.h
  1003. +b3effcf1e3104037c8594bc52c967189  Emacs-19.25/src/window_protos.h
  1004. +05ae36199edf626fd24720e7cec4113d  Emacs-19.25/src/cm_protos.h
  1005. +fc262ceaef04bd6b4cd3f9ce9f74f9b4  Emacs-19.25/src/emacs_protos.h
  1006. +41b495c52243d9c62bccb0ec2e30d9a4  Emacs-19.25/src/macros_protos.h
  1007. +145b551397138a99a5ddd6babe901de3  Emacs-19.25/src/buffer_protos.h
  1008. +859ecd1fc957903708ac4e72288a4b68  Emacs-19.25/src/filelock_protos.h
  1009. +97f2a3cf998d7d6ac8d42c173b66ed8a  Emacs-19.25/src/insdel_protos.h
  1010. +02c68e4b97e0d588ef016702d5ff1c8f  Emacs-19.25/src/marker_protos.h
  1011. +119a34c5fd9209842a09d1ef681b4bb2  Emacs-19.25/src/minibuf_protos.h
  1012. +2be786c162524ad85752265e82177fe6  Emacs-19.25/src/fileio_protos.h
  1013. +6edb2df5eb62f4b436a691ebcb9dd768  Emacs-19.25/src/dired_protos.h
  1014. +7de22d5c1817b0ba42e3123fd07b21c8  Emacs-19.25/src/filemode_protos.h
  1015. +ce85a871a40bfbd08c5dfb00dab1c7a9  Emacs-19.25/src/cmds_protos.h
  1016. +0c83716607dad03a68f3490577aae8c1  Emacs-19.25/src/casetab_protos.h
  1017. +6bce47f5820f1c8af4b50de515317bc8  Emacs-19.25/src/casefiddle_protos.h
  1018. +585d78e444445a8a477ea01647822363  Emacs-19.25/src/indent_protos.h
  1019. +8cfdd4c2874be199936c1246ee90887c  Emacs-19.25/src/search_protos.h
  1020. +e98a97f22e9322519b9cdf2d13f0631e  Emacs-19.25/src/prefix-args
  1021. +f7181e197598b7fe51b3ec1624d9eca0  Emacs-19.25/src/keymap.c
  1022. +f92870c205e40f9b2b133b9cbd8e20f4  Emacs-19.25/src/macros.c
  1023. +1a0d10ffb961ac3789e54120383c1c78  Emacs-19.25/src/marker.c
  1024. +bb390ebf6d5c4d50dbe8ea386dc601f4  Emacs-19.25/src/minibuf.c
  1025. +37f9455d8b6ef27d17e2c614b8e261a0  Emacs-19.25/src/mocklisp.c
  1026. +4712a297d031346e1e3c6230839984bf  Emacs-19.25/src/prefix-args.c
  1027. +59ef8b17b5f19bca5c2441aa7966c067  Emacs-19.25/src/print.c
  1028. +ed43ad8ccaf22f5f15bb197a1424d44a  Emacs-19.25/src/dostrip
  1029. +0aef84be0e51176bb61975a77390419e  Emacs-19.25/src/dostrip.info
  1030. +e8094f5561616678cf9ff1de085d4176  Emacs-19.25/src/cover.dat
  1031. +ef4a56f5907320b32540dfc6c5de18eb  Emacs-19.25/src/xmakefile.test
  1032. +70485cb176faee57308d781472e004f4  Emacs-19.25/src/amiga_screen.c
  1033. +33aae8e7ca0abefb00c6f85c5497c6cc  Emacs-19.25/src/temp
  1034. +fac22272acae60a64584b6be2b8c5690  Emacs-19.25/src/xmakefile
  1035. +12b7fefeeaad5551918e392cd3c472bb  Emacs-19.25/src/lisp.h!
  1036. +842b7ca968600b2a34968955eaa0c73a  Emacs-19.25/src/amiga_sysdep.c
  1037. +3bb8979dfedaf8d5781a3c5f70e7013a  Emacs-19.25/src/callproc.c
  1038. +9b05ca51bd33e2cccd6ea745fce51683  Emacs-19.25/src/fileio.c
  1039. +d41d8cd98f00b204e9800998ecf8427e  Emacs-19.25/src/DOC
  1040. +4c23c2b2075f056fcefe7c3165127e15  Emacs-19.25/amiga.doc
  1041. +f67ca72fdf96bd603f89f27e7d410e0d  Emacs-19.25/announce2.0
  1042. +bc57c268aaa625248fe681656fdea54d  Emacs-19.25/compile.doc
  1043. +2def86dddff339cd9936ec0479c2b717  Emacs-19.25/emacs
  1044. +ba8eb642b3b56a81bc48129cd9546283  Emacs-19.25/INSTALLATION
  1045. +d93a01b0b9df5e7228ce99255baec5bd  Emacs-19.25/README.1st
  1046. +29f2595e53e67c7e5559ae7771c6461d  Emacs-19.25/temacs
  1047. +
  1048. +-----BEGIN PGP SIGNATURE-----
  1049. +Version: 2.6
  1050. +
  1051. +iQCVAgUBLxMHVOlPL8A93KIlAQG0tgP/a9xXQWlPSXSMwYjagbwNUBzHAmIKywl0
  1052. +G4a2Yx6/TUKi65orXksS+UyYK4xKWsFoPre/K4hKJCvD/EGzFhcUJEJt7gLGizvg
  1053. +tNA8nMY6eV3SLewx494d1CbjFNuAJOzsO94RlBXW72+La80SsSyePMocMqYdqkUR
  1054. +e8/yonSJ9oI=
  1055. +=12MP
  1056. +-----END PGP SIGNATURE-----
  1057. diff -ru --new-file baseline/fsf/emacs/INSTALLATION amiga/fsf/emacs/INSTALLATION
  1058. --- baseline/fsf/emacs/INSTALLATION    Wed Dec 31 17:00:00 1969
  1059. +++ amiga/fsf/emacs/INSTALLATION    Sun Oct 15 17:04:51 1995
  1060. @@ -0,0 +1,58 @@
  1061. +DON'T FORGET: This version of Emacs REQUIRES AMIGADOS V2.04 !!
  1062. +
  1063. +Before being able to use Emacs, you must take the following steps 
  1064. +(they assume you are in the emacs-19.25 directory):
  1065. +
  1066. +1. Copy .emacs to s:
  1067. +3. Add an assign GNUEMACS-19.25: and GNUEMCS: <wherever you've put the
  1068. +   emacs directory> to  your User-Startup.
  1069. +4. Install Matt Dillon's fifo.library and fifo: handler if you want to use
  1070. +   external processes (This can be found on Fish disks).
  1071. +5. Define various environment variables (these all have defaults, so this
  1072. +   isn't absolutely necessary, except for ESHELL) :
  1073. +
  1074. +     USER     - a username (a la Unix) (default "user")
  1075. +     USERNAME - your full name (default same as $USER)
  1076. +     HOME     - your "home" directory (This is the directory refered to
  1077. +        by ~/<file>, and where the .emacs file is looked for)
  1078. +        (default "s:").
  1079. +     HOSTNAME - a name for your system (default "amiga")
  1080. +     ESHELL   - where to find an unix-like shell (no default). By unix-like
  1081. +        I mean that it should not open a window to get its input.
  1082. +        The only tested value for this is GNUEMACS:etc/sh.
  1083. +
  1084. +   For instance, I have the following values:
  1085. +     USER: dgay, USERNAME: David E. Gay, HOSTNAME: owl,
  1086. +     ESHELL: gnuemacs:etc/sh
  1087. +
  1088. +6. If you want to check that emacs is working, type 
  1089. +  assign gnuemacs-19.25: ""
  1090. +  emacs
  1091. +
  1092. +   If all goes well, emacs should open a window. If you get
  1093. +     memacs: Unknown command
  1094. +   you have an alias for emacs. Try editing s:Shell-Startup and removing it.
  1095. +
  1096. +   If you get
  1097. +     emacs: file is not executable
  1098. +   try typing
  1099. +     protect s:emacs +s
  1100. +
  1101. +   If you get
  1102. +     emacs: Unknown command
  1103. +   try
  1104. +     path s: add
  1105. +
  1106. +   And finally, if you get
  1107. +     wrong number of arguments
  1108. +     if failed returncode 10
  1109. +   try
  1110. +     path sys:rexxc add
  1111. +
  1112. +
  1113. +7. If you are going to use emacs over a serial line, you must install 
  1114. +   the termcap file, which comes with the source version. To do so, type:
  1115. +
  1116. +     join gnuemacs-19.25:etc/termcap.ucb gnuemacs-19.25:etc/termcap.amiga 
  1117. +        as s:termcap
  1118. diff -ru --new-file baseline/fsf/emacs/Product-Info amiga/fsf/emacs/Product-Info
  1119. --- baseline/fsf/emacs/Product-Info    Wed Dec 31 17:00:00 1969
  1120. +++ amiga/fsf/emacs/Product-Info    Sun Oct 15 17:04:53 1995
  1121. @@ -0,0 +1,62 @@
  1122. +.name
  1123. +emacs
  1124. +.fullname
  1125. +GNU Emacs editor
  1126. +.type
  1127. +Text Editing
  1128. +.short
  1129. +GNU Emacs editor
  1130. +.description
  1131. +GNU Emacs is the GNU incarnation of the advanced, self-documenting,
  1132. +customizable, extensible real-time display editor Emacs. (The `G' in
  1133. +`GNU' is not silent.)
  1134. +
  1135. +We say that Emacs is a "display" editor because normally the text
  1136. +being edited is visible on the screen and is updated automatically as
  1137. +you type your commands.
  1138. +
  1139. +We call it a "real-time" editor because the display is updated very
  1140. +frequently, usually after each character or pair of characters you
  1141. +type.  This minimizes the amount of information you must keep in your
  1142. +head as you edit.
  1143. +
  1144. +We call Emacs advanced because it provides facilities that go beyond
  1145. +simple insertion and deletion: filling of text; automatic indentation
  1146. +of programs; viewing two or more files at once; and dealing in terms
  1147. +of characters, words, lines, sentences, paragraphs, and pages, as well
  1148. +as expressions and comments in several different programming
  1149. +languages.  It is much easier to type one command meaning "go to the
  1150. +end of the paragraph" than to find that spot with simple cursor keys.
  1151. +
  1152. +"Self-documenting" means that at any time you can type a special
  1153. +character, `Control-h', to find out what your options are.  You can
  1154. +also use it to find out what any command does, or to find all the
  1155. +commands that pertain to a topic.
  1156. +
  1157. +"Customizable" means that you can change the definitions of Emacs
  1158. +commands in little ways.  For example, if you use a programming
  1159. +language in which comments start with `<**' and end with `**>', you
  1160. +can tell the Emacs comment manipulation commands to use those strings.
  1161. +Another sort of customization is rearrangement of the command set.
  1162. +For example, if you prefer the four basic cursor motion commands (up,
  1163. +down, left and right) on keys in a diamond pattern on the keyboard,
  1164. +you can have it.
  1165. +
  1166. +"Extensible" means that you can go beyond simple customization and
  1167. +write entirely new commands, programs in the Lisp language to be run
  1168. +by Emacs's own Lisp interpreter.  Emacs is an "on-line extensible"
  1169. +system, which means that it is divided into many functions that call
  1170. +each other, any of which can be redefined in the middle of an editing
  1171. +session.  Any part of Emacs can be replaced without making a separate
  1172. +copy of all of Emacs.  Most of the editing commands of Emacs are
  1173. +written in Lisp already; the few exceptions could have been written in
  1174. +Lisp but are written in C for efficiency.  Although only a programmer
  1175. +can write an extension, anybody can use it afterward.
  1176. +.version
  1177. +19.28
  1178. +.author
  1179. +Richard Stallman
  1180. +.distribution
  1181. +GNU Public License
  1182. +.described-by
  1183. +Fred Fish (fnf@amigalib.com)
  1184. diff -ru --new-file baseline/fsf/emacs/README.1st amiga/fsf/emacs/README.1st
  1185. --- baseline/fsf/emacs/README.1st    Wed Dec 31 17:00:00 1969
  1186. +++ amiga/fsf/emacs/README.1st    Sun Oct 15 17:04:55 1995
  1187. @@ -0,0 +1,5 @@
  1188. +OK... this is a BETA release... most things work, but there are some
  1189. +serious *known* bugs.
  1190. +
  1191. +Read announce2.0 and INSTALLATION first !!!
  1192. +This version of emacs requires AmigaDOS V2.04.
  1193. diff -ru --new-file baseline/fsf/emacs/amiga.doc amiga/fsf/emacs/amiga.doc
  1194. --- baseline/fsf/emacs/amiga.doc    Wed Dec 31 17:00:00 1969
  1195. +++ amiga/fsf/emacs/amiga.doc    Sun Oct 15 17:04:56 1995
  1196. @@ -0,0 +1,565 @@
  1197. +1. Introduction
  1198. +---------------
  1199. +
  1200. +Emacs is a powerful, but sometimes cryptic, editor. In this Amiga
  1201. +version, I have tried to make it easier to use with menus, mouse
  1202. +support and arrow key support, but it still requires some getting used
  1203. +to. I would recommend starting with the tutorial, which can be started
  1204. +from the Help menu (if it is missing, you didn't install emacs
  1205. +correctly. Check that the file s:.emacs-menu.el exists) or from the
  1206. +keyboard by typing Control-H and then t.
  1207. +
  1208. +This file only describes the Amiga specific features of emacs, and it
  1209. +assumes a working knowledge of emacs. For more documentation you can
  1210. +consult the emacs help (Information in the Help menu, or C-h i) or
  1211. +read the emacs manual (which is the same document in a printed form).
  1212. +This manual can be bought from the
  1213. +
  1214. +     Free Software Foundation
  1215. +     675 Mass Ave
  1216. +     Cambridge, MA 02139
  1217. +     USA
  1218. +
  1219. +See the file gnuemacs:etc/DISTRIB for more information (you can type
  1220. +C-h C-d to view it).
  1221. +
  1222. +To install emacs, read the file INSTALLATION.
  1223. +
  1224. +
  1225. +2. Changes since the last version
  1226. +---------------------------------
  1227. +
  1228. +Several features have been added since v1.25:
  1229. +
  1230. +- workbench support.
  1231. +- asynchronous processes can be run in emacs, so the shell & compile
  1232. +  commands now work.
  1233. +- startup problems (missing libraries, no memory, etc) should now
  1234. +  be reported (there is one exception: if run under any version
  1235. +  before 2.04, emacs will fail silently).
  1236. +- the emacs window can be configured in s:.emacs without causing
  1237. +  nasty visual effects (the window opens directly where you wanted,
  1238. +  with the correct size, fonts, etc).
  1239. +- the numeric keypad keys can now be defined separately from the
  1240. +  equivalent keys on the main keyboard.
  1241. +- the 'ctrl-g' interrupt key now works far better (it can
  1242. +  interrupt run-away lisp code).
  1243. +- the -t startup option has been renamed as -dev.
  1244. +- the keyboard sequences generated for amiga specific features
  1245. +  (eg function & arrow keys) have changed (these used to start
  1246. +  with C-\. This has been replaced by the C-x C-^ sequence, for
  1247. +  very good reasons).
  1248. +- last redisplay bug squashed !
  1249. +
  1250. +Numerous other bugs have also been destroyed ...
  1251. +
  1252. +
  1253. +3. Using emacs in a window
  1254. +--------------------------
  1255. +
  1256. +Emacs runs in a window on the Workbench (this can be changed). It
  1257. +basically works like just any other version of GNU Emacs, using the
  1258. +same keys, etc. It uses the standard amiga keymap, but with some strange
  1259. +modifications:
  1260. +
  1261. +o The left alt key is stolen as a meta key for emacs. This means you can't use
  1262. +it to enter accents. However, the right alt key remains untouched. Hence
  1263. +'left alt-f e' moves forward one word and inserts an e, while
  1264. +'right alt-f e' inserts an e acute. In the rest of the text, the meta key
  1265. +always means the 'left alt' key.
  1266. +
  1267. +o C-space is always mapped to C-@, the set-mark command, for convenience.
  1268. +
  1269. +o The backspace key always sends DEL (delete previous character in emacs),
  1270. +and DEL sends C-d (delete character under cursor). If you don't like this, 
  1271. +add the line
  1272. +    (setq amiga-remap-bsdel nil)
  1273. +to your .emacs file (in s:).
  1274. +
  1275. +o Keypad keys are prefixed with C-x C-^ K (so 0 generates C-x C-^ K 0).
  1276. +Normally, C-x C-^ K is a do-nothing operation, so the keypad keys just
  1277. +insert the usual character. If you want to redefine the keypad keys, you
  1278. +must do the following:
  1279. +
  1280. +  (global-set-key "\C-x\C-^K" (make-sparse-keymap))
  1281. +  (global-set-key "\C-x\C-^K0" '<function for key 0>)
  1282. +  (global-set-key "\C-x\C-^K1" '<function for key 0>)
  1283. +  ...
  1284. +
  1285. +Once you have redefined one key, you must define all of them (as C-x C-^ K
  1286. +is no longer a do-nothing command). If you still want a keypad to insert
  1287. +its usual character, you can use (for +)
  1288. +
  1289. +  (global-set-key "\C-x\C-^K+" 'self-insert-command)
  1290. +
  1291. +o The sequences for function & arrow keys are the standard Amiga ones, 
  1292. +except that the initial character (CSI, code 155) is replaced by
  1293. +C-x C-^. For example, F1 is C-x C-^ 0 ~. You can always find the 
  1294. +characters generated by a key by pressing it, and then executing
  1295. +M-x view-lossage. This displays the last 100 characters seen by emacs. So
  1296. +to define F1 to be view-lossage you would add
  1297. +
  1298. +  (global-set-key "\C-x\C-^0~" 'view-lossage)
  1299. +
  1300. +to s:.emacs (trying to define F1 interactively with M-x global-set-key
  1301. +will fail ...).
  1302. +
  1303. +
  1304. +There are several extra features:
  1305. +
  1306. +a) Mouse support, similar to the X-Windows version.
  1307. +
  1308. +You can position the cursor with the left mouse button. Other possibilites are:
  1309. +
  1310. +action            result
  1311. +------------------------------
  1312. +shift-left button    set mark at mouse position
  1313. +control-left button    cut between point and mouse position
  1314. +meta-left button    copy between point and mouse position
  1315. +middle button        paste
  1316. +shift-middle button    iconify emacs window (double click to deiconify)
  1317. +
  1318. +Some of the control, meta, etc combinations may be stolen by Intuition or
  1319. +commodities programs, so don't be surprised if they don't all work.
  1320. +
  1321. +All of these actions may be redefined (this is emacs after all!), see the
  1322. +file lisp/amiga-mouse.el for details (you will need to learn lisp if you don't
  1323. +already know it ...) [Note: this file is not included in the binary only
  1324. +distribution, you will need the source code version].
  1325. +
  1326. +b) Clipboard
  1327. +
  1328. +At first glance, emacs uses the Amiga clipboard, ie it cuts to the
  1329. +clipboard and pastes from it (via the menu operations or the C-w
  1330. +(kill-region), M-w (copy-region-as-kill) & C-y (yank) commands).
  1331. +
  1332. +Things are actually complicated by emacs use of a "kill ring" (ie it
  1333. +remembers the last 30 things cut. The M-y (yank-pop, menu command
  1334. +Paste Previous) allows you to recover old cuts):
  1335. +
  1336. +- When you cut (or copy) something in emacs it is placed in the
  1337. +clipboard.
  1338. +
  1339. +- When you paste (yank) something in emacs, it checks the clipboard to
  1340. +see if it contains anything new. If so, it pastes that.
  1341. +
  1342. +[Note: It also checks the clipboard when you cut something, and saves
  1343. +that in the kill-ring if necessary]
  1344. +
  1345. +All this effort is used to make the clipboard appear to operate
  1346. +transparently in emacs.
  1347. +
  1348. +c) Window
  1349. +
  1350. +By default, emacs runs in a window on the workbench screen using the
  1351. +system default font and the standard colours. All this can be changed:
  1352. +
  1353. +o The font can be specified with the -fn <font> <size> option when you
  1354. +run emacs. You can also use the amiga-set-font command interactively,
  1355. +or add a line like
  1356. +   (amiga-set-font "topaz" 11)
  1357. +to your s:.emacs file. The font must be non-proportional.
  1358. +
  1359. +o The window size and screen can be changed with the
  1360. +amiga-set-geometry function. It takes 4 or 5 parameters, the (x,y)
  1361. +position of the window and its (width,height). The last optional
  1362. +parameter specifies the screen: a string gives the name of a public
  1363. +screen, t stands for the default public screen (normally the
  1364. +workbench) and nil means keep the same screen. For example, the lisp code
  1365. +  (amiga-set-geometry 0 0 640 400)
  1366. +resizes the emacs window to 640x400. If the screen would be too small
  1367. +given the current font (there must be room for 11x4 characters), the
  1368. +change is refused.
  1369. +
  1370. +To use a public screen requires an utility to create them ...
  1371. +
  1372. +o The foreground & background colours can be changed with the 
  1373. +amiga-set-foreground-color & amiga-set-background-color commands. You
  1374. +specify the pen and not the actual colour (from 0 to 7 only,
  1375. +because of restrictions in console.device).
  1376. +
  1377. +o The emacs window can be iconified (onto the workbench) with the
  1378. +amiga-iconify command. This is bound to shift-middle button on a 3
  1379. +button mouse, and to C-z (which is normally bound to suspend-emacs,
  1380. +which doesn't work on the Amiga).
  1381. +
  1382. +To deiconify emacs, double click on the icon.
  1383. +
  1384. +[Note: in this version, emacs will continue to answer to ARexx
  1385. +commands while iconified. The variable amiga-emacs-iconfied is
  1386. +set to 't' while emacs is iconified, 'nil' the rest of the time.
  1387. +You can test this, eg to make sure that emacs is not iconified 
  1388. +before reading some user input]
  1389. +
  1390. +If you use the functions described above in s:.emacs, they will take 
  1391. +effect before emacs's window is opened. This will avoid the nasty
  1392. +visual effects of the previous version.
  1393. +
  1394. +d) Menus
  1395. +
  1396. +If you have installed emacs correctly (see the INSTALLATION file), it
  1397. +will startup with some menus containing some useful basic
  1398. +functions (the layout was inspired from that of TurboText, another
  1399. +good editor which has the disadvantage of being more expensive than
  1400. +emacs ...). Alongside each item is the emacs key sequence which
  1401. +invokes that function, if any.
  1402. +
  1403. +Using the Menu Help functionality of AmigaDOS 2.04, you can get help
  1404. +on any menu item by highlighting it with the mouse and pressing the
  1405. +Help key [This is easier if you're left handed :-)].
  1406. +
  1407. +The menus are not fixed, they are defined by the s:.emacs-menu.el file
  1408. +(which isn't human-readable). To modify them, edit s:.emacs-menu.menu.
  1409. +This contains a lisp-like (but quite legible even for lisp-haters)
  1410. +representation of the menus, which you can modify by adding items or
  1411. +menus. The format should be obvious (just make sure that closing
  1412. +brackets correspond to the correct opening ones, emacs always shows
  1413. +the corresponding '(' when you type a ')'. Also the last bracket
  1414. +should correspond with the first).
  1415. +
  1416. +When you have finished your changes, type C-c C-c. This will save your
  1417. +menus, and then generate a .el file from them (this takes several
  1418. +seconds even on an A3000. Be patient). Then save the resulting file.
  1419. +To have the new menus take effect immediately, type M-C-x while in the
  1420. +.el file.
  1421. +
  1422. +Enterprising lisp programmers can customise the menus even more by
  1423. +modifying the functions amiga-menus-dispatch and/or amiga-menus-help
  1424. +in lisp/amiga-mouse.el. This code basically receives a (menu-number
  1425. +menu-item-number) list and must take the appropriate action
  1426. +(currently, execute the command associated with that particular menu
  1427. +item). The lack of comments will surely not deter these audacious
  1428. +pionneers ...
  1429. +
  1430. +e) Command line options
  1431. +
  1432. +Beyond the standard emacs command line options (for which
  1433. +documentation tends to be rather sketchy, not to say missing), you can
  1434. +also use:
  1435. +
  1436. +-prealloc <n>: Reserve n bytes of memory for emacs exclusively. This
  1437. +option *must* be the first on the command line. On the A3000, chip
  1438. +memory can't be used for emacs (the details are complicated ...), so
  1439. +you will run out of memory sooner than expected. This option allows
  1440. +you to reserve some for emacs before it gets eaten by other programs.
  1441. +
  1442. +-fn <font> <size>: Set the font that emacs uses, like the
  1443. +amiga-set-font command (see section c, on windows). Note that there
  1444. +must be enough room for 11x4 characters in the standard 640x200
  1445. +window. So avoid fonts bigger than 40 points ...
  1446. +
  1447. +-nw: Don't use a window, use a serial port. See part 3, Using Emacs
  1448. +over a serial line.
  1449. +
  1450. +f) ARexx
  1451. +
  1452. +Emacs has a full ARexx interface. It can execute scripts and commands
  1453. +synchronously (waiting for the result) or asynchronously, and has an
  1454. +ARexx port from which it accepts commands. 
  1455. +
  1456. +To execute a script, you use the amiga-arexx-do-command (synchronous)
  1457. +or amiga-arexx-send-command (asynchronous) commands. These ask for the
  1458. +script file name (the default extension is .elx). If you just want to
  1459. +execute a simple ARexx command, you can prefix those commands with C-u
  1460. +and specify the string to execute.
  1461. +
  1462. +From lisp, you must use
  1463. +  (amiga-send-command "<file>" nil) for a script, and
  1464. +  (amiga-send-command "<commands>" t) for direct execution.
  1465. +(and the same for amiga-do-command). The result of amiga-send-command
  1466. +is an integer that can be passed to amiga-arexx-wait-command to wait
  1467. +for the completion of the script or command. It can also be used with 
  1468. +amiga-arexx-check-command to check if the script has finished. For
  1469. +example:
  1470. +
  1471. +  (let ((arexx-id (amiga-send-command "start-fun" nil)))
  1472. +    ... do something here ...
  1473. +    ; and wait for arexx script to end
  1474. +    (amiga-arexx-wait-command arexx-id))
  1475. +
  1476. +Emacs's ARexx port accepts commands in lisp, and is usually called
  1477. +EMACS1 (if you run emacs twice simulatenously, the second one will
  1478. +have EMACS2, and so on). For example (from a shell),
  1479. +
  1480. +  rx "address EMACS1 '(beginning-of-buffer)'"
  1481. +
  1482. +will set point to the beginning of the buffer.
  1483. +
  1484. +ARexx commands are only processed at certain times, so be careful how
  1485. +you design your applications. These are:
  1486. +
  1487. +o While waiting for commands from the keyboard (ie when emacs is
  1488. +idle or iconified).
  1489. +o While processing a synchronous (amiga-arexx-do-command) script or
  1490. +waiting for a script to terminate with amiga-arexx-wait-command.
  1491. +o When the amiga-arexx-process function is called.
  1492. +
  1493. +They also affect the user visible state by default (ie calling
  1494. +beginning-of-buffer as above modifies the user's position). Avoid
  1495. +sending random commands at random times, or use save-excursion.
  1496. +
  1497. +As usual, all this behaviour can be modified to some extent. Look in
  1498. +amiga-init.el for details [The source code is the documentation...].
  1499. +
  1500. +I still haven't written any significant examples, so ...
  1501. +
  1502. +g) Workbench support
  1503. +
  1504. +Beyond iconification (see the section on the emacs window), emacs 
  1505. +supports a number of features for Workbench users:
  1506. +
  1507. +- emacs can be run from the Workbench, by all the usual methods
  1508. +  (double clicking on the tool, double clicking on a project which
  1509. +  has temacs as its default tool, etc). All the projects that are
  1510. +  passed to temacs will be loaded (if they are files), or listed 
  1511. +  with dired (if they are directories).
  1512. +
  1513. +- icons can be dropped in emacs's window, the corresponding file
  1514. +  or directory will be loaded or listed.
  1515. +
  1516. +- icons can be created for files that are saved. This is the default
  1517. +  when emacs is run from the workbench. This is controlled by the
  1518. +  amiga-create-icons variable: if you always want icons to be
  1519. +  created, add
  1520. +
  1521. +    (setq amiga-create-icons t)
  1522. +
  1523. +  to s:.emacs, or
  1524. +
  1525. +    (setq amiga-create-icons nil)
  1526. +
  1527. +  if you never want them.
  1528. +
  1529. +h) external processes
  1530. +
  1531. +This version of emacs fully supports synchronous (used to get the
  1532. +result of ls for dired, for instance) and asynchronous (as in the
  1533. +'shell' command) processes. However, it requires Matt Dillon's
  1534. +'fifo.device' and 'fifo:' devices to function. See the INSTALLATION
  1535. +file for details.
  1536. +
  1537. +This allows full support for all emacs functions which call external
  1538. +programs, providing that said programs exist on the Amiga. The
  1539. +following work:
  1540. +  compile (for SAS C 5.10b, with a few occasional problems)
  1541. +  grep
  1542. +  shell (but see the discussions below)
  1543. +  display-time
  1544. +  dired
  1545. +  list-directory
  1546. +  sort-...
  1547. +
  1548. +The compile command sometimes has problems finding file names in the
  1549. +error messages, and tries to read the current directory instead. If
  1550. +you are patient, it moves on to the next file.
  1551. +
  1552. +Because of differences between AmigaDOS & Unix, sending signals (eg
  1553. +interrupt, kill) to processes is not very reliable. The following
  1554. +points must be kept in mind:
  1555. +
  1556. +- In some unlikely cases, the appropriate process to signal won't be 
  1557. +  found. 
  1558. +- The stop-process & continue-process functions don't work.
  1559. +- interrupt-process & quit-process send a ctrl-c & ctrl-d to the
  1560. +  process and all its children (probably).
  1561. +- kill-process also sends a ctrl-c & ctrl-d. It then pretends that
  1562. +  the process has died.
  1563. +
  1564. +All input sent to a process after an end-of-file is ignored. The process
  1565. +just sees an endless sequence of end-of-files. This is most visible with
  1566. +the shell command, where if you send an end-of-file to a program (eg type)
  1567. +with C-c C-d, the shell will exit. The bug is in fifo.device, not in emacs.
  1568. +
  1569. +The input & output of processes run inside emacs look like interactive
  1570. +files (which allows, for instance, shells to run correctly). However, this
  1571. +confuses some programs which expect all interactive files to be Amiga
  1572. +consoles and causes them to crash. Several versions of ls suffer from this
  1573. +problem (they run into problems while trying to get the window size).
  1574. +
  1575. +amiga-process-stack-size is the size of the stack for new processes. If it
  1576. +is 0 (the default), emacs's stack size is used.
  1577. +
  1578. +
  1579. +4. Using emacs over a serial line
  1580. +---------------------------------
  1581. +
  1582. +To use emacs over a serial port, you must do:
  1583. +
  1584. +  setenv TERM <terminal type> (eg vt100)
  1585. +  emacs -nw
  1586. +
  1587. +The setenv line can be put in your User-Startup, so as to avoid typing
  1588. +it every time.
  1589. +
  1590. +Emacs cannot simply guess how your terminal works from its name, it
  1591. +needs a description of it. This is found in a termcap file, which
  1592. +emacs looks for in s:termcap. If you didn't install this file with emacs,
  1593. +you can do so by typing (in a CLI):
  1594. +
  1595. +  join gnuemacs:etc/termcap.ucb gnuemacs:etc/termcap.amiga as s:termcap
  1596. +
  1597. +[Note: These files only come with the source version]
  1598. +
  1599. +The -nw prevents the use of a window.
  1600. +
  1601. +If you have several serial ports, you can type
  1602. +
  1603. +  emacs -dev ser2.device 2
  1604. +
  1605. +to use port 2 of device ser2.device. Use of the -dev option implies -nw.
  1606. +
  1607. +These options (-dev & -nw) *must* be specified at the start of the
  1608. +command line.
  1609. +
  1610. +The descriptions of the Clipboard, the command line options and the
  1611. +ARexx port in part 2 above also apply to use over a serial port.
  1612. +
  1613. +
  1614. +5. Redumping emacs [This section for expert users only]
  1615. +-------------------------------------------------------
  1616. +
  1617. +Enterprising users may want to change the lisp files which are loaded
  1618. +into the Emacs dump file. The procedure for doing this is very similar
  1619. +to that with the Unix version, except that the amount of pure storage
  1620. +can be changed without recompiling emacs. This will allow users
  1621. +without SAS C v5.10b to still make such changes.
  1622. +
  1623. +The necessary lisp files are only included in the source distribution,
  1624. +so you will have to get that first. Once that is available, that you
  1625. +have made all your changes (eg adding some extra files to be dumped),
  1626. +use the following sequence to redump emacs:
  1627. +
  1628. +  cd gnuemacs:etc
  1629. +  stack 20000
  1630. +  /temacs -pure <n> -malloc <m> -nl -batch -l loadup dump
  1631. +
  1632. +The -pure <n> and -malloc <m> options should only be necessary if you
  1633. +add extra files to be dumped, see below how to choose values for n &
  1634. +m. The above order for the parameters must be preserved. Specifying
  1635. +dump without -nl & -batch will have unpredicatable consequences.
  1636. +
  1637. +Once all the files are loaded, a new copy of gnuemacs:etc/EMACS-DATA
  1638. +will be saved, and all should work correctly. If you get one of the
  1639. +following messages:
  1640. +
  1641. +  Pure Lisp storage exhausted
  1642. +
  1643. +  Emacs dump: ran out of memory for malloc.
  1644. +
  1645. +read the following description of the -pure & -malloc options:
  1646. +
  1647. +When emacs is dumped, it saves (amongst other things) the copies of
  1648. +two zones of memory, called the pure storage area and the malloc hunk.
  1649. +These contain an internal representation of the lisp code, so the more
  1650. +code you include in a dumped emacs, the bigger these need to be. The
  1651. +default sizes of these are reasonable sizes for the standard lisp code
  1652. +which is dumped, but you will probably need to increase them if you
  1653. +add some more lisp modules. The best way to find the new values for n
  1654. +(size of pure area) and m (size of the malloc hunk), is to run the
  1655. +command
  1656. +
  1657. +  cd gnuemacs:etc
  1658. +  stack 20000
  1659. +  /temacs -pure 200000 -malloc 200000 -nl -batch -l loadup dump
  1660. +
  1661. +(these sizes should be largely sufficient, but if you still get one of
  1662. +the two error messages above, increase them). Then run emacs as usual,
  1663. +and look at the values of the 2 lisp variables
  1664. +
  1665. +     pure-bytes-used
  1666. +and  amiga-malloc-bytes-used
  1667. +
  1668. +pure-bytes used contains the minimum value for n, and
  1669. +amiga-malloc-bytes-used the minimum value for m. Add 1000 to these for
  1670. +luck to get values for n and m, and redump emacs using these.
  1671. +
  1672. +For those who are into modifying the C source, the default values are
  1673. +130000 for n (see DEF_PURESIZE in s-amiga.h) and 92000 for m (see
  1674. +MALLOC_HUNK_SIZE in amiga.h).
  1675. +
  1676. +6. Source
  1677. +---------
  1678. +
  1679. +Source for emacs and all the programs included with it should be
  1680. +obtainable from the same place as this file. If not, please send me
  1681. +mail (if you are on the Internet) and I will provide the missing
  1682. +pieces. Specifically, there should be:
  1683. +
  1684. +- The emacs sources
  1685. +- Sources for the 'unix library' needed to compile emacs
  1686. +- Source for the programs in the c directory (ls, sort, rmdir, grep).
  1687. +This consists of the GNU fileutils, textutils and grep packages.
  1688. +
  1689. +Distributing the binary without these packages is a violation of
  1690. +the GNU General Public License (see the file COPYRIGHT in the etc
  1691. +directory) under which emacs is distributed.
  1692. +
  1693. +7. Thanks & Problems
  1694. +--------------------
  1695. +
  1696. +I would like to thank the following people for their help while debugging
  1697. +emacs:
  1698. +
  1699. +- Philippe Morel & Jean-Marc Vandel for early and late testing respectively.
  1700. +- Jukka Partanen, Alan Bair, Michael Witbrock, Hugh D. Gamble and several
  1701. +others for beta-testing.
  1702. +
  1703. +Please send any bug reports, enhancement requests, etc to:
  1704. +
  1705. +Post:                E-mail:
  1706. +David Gay            dgay@di.epfl.ch
  1707. +19 Chemin de la Source
  1708. +CH-1296 Coppet
  1709. +Vaud
  1710. +Switzerland
  1711. +
  1712. +8. Ordering Information
  1713. +-----------------------
  1714. +
  1715. +I can provide a complete copy of my development directory, which
  1716. +includes:
  1717. +
  1718. +o the standard emacs-18.58 files
  1719. +o modified and new lisp files
  1720. +o Amiga-specific source, as text and in RCS format (highlighting the
  1721. +changes from a standard unix distribution, and the different versions).
  1722. +o assorted lisp packages hacked for the Amiga (I will be posting some
  1723. +of these in due course):
  1724. +  - a tags-like access to the 2.0 autodocs (you must already have a
  1725. +    copy of these ...)
  1726. +  - gnus (a news reader) for use with Matt Dillon's uucp package. 
  1727. +  - getris, a tetris clone for emacs
  1728. +
  1729. +All these as a tar file on a QIC-150 tape, for $200 (the same price as
  1730. +the FSF, so as not to undercut them), or 300SF. This price is valid
  1731. +until the 31st December 1993, and includes shipping by surface mail.
  1732. +
  1733. +Please send all orders, by postal mail, to
  1734. +
  1735. +  David Gay
  1736. +  19 Chemin de la Source
  1737. +  CH-1296 Coppet
  1738. +  Vaud
  1739. +  Switzerland
  1740. +
  1741. +  Tel: +(41)-22 776 35 81 [Evenings, Central European Time]
  1742. +  Fax: +(41)-22 776 70 58
  1743. +
  1744. +Include with your order:
  1745. +- A cheque, in dollars or Swiss francs.
  1746. +- Your *complete* address (don't forget the country, etc).
  1747. +- A phone or fax number so I can contact you if I have any problems.
  1748. +
  1749. +I will be glad to include, on request, and with full source, some
  1750. +other pieces of software I have written:
  1751. +- An HP11 calculator (this is an update to the version available on
  1752. +fish disks, with some bug fixes and 2.0 specific features).
  1753. +- A scheme compiler for the Amiga, still in an alpha state.
  1754. +- A fortune cookie program, including 1 megabyte of cookies (merged
  1755. +from various sources).
  1756. +
  1757. +
  1758. +Dvaid Gay
  1759. +dgay@di.epfl.ch
  1760. +Ecole Polytechnique Federale de Lausanne - Switzerland
  1761. +Laboratoire d'Informatique Technique
  1762. diff -ru --new-file baseline/fsf/emacs/announce2.0 amiga/fsf/emacs/announce2.0
  1763. --- baseline/fsf/emacs/announce2.0    Wed Dec 31 17:00:00 1969
  1764. +++ amiga/fsf/emacs/announce2.0    Sun Oct 15 17:04:58 1995
  1765. @@ -0,0 +1,157 @@
  1766. +TITLE
  1767. +
  1768. +     GNU Emacs 19.25, Amiga BETA RELEASE 2.0, available for download
  1769. +
  1770. +VERSION
  1771. +
  1772. +     This updates the previous version of emacs (18.58 a1.26) to a
  1773. +     resonably current FSF version.
  1774. +
  1775. +COMPANY
  1776. +
  1777. +     The Free Software Foundation
  1778. +     'n me.
  1779. +
  1780. +AUTHOR
  1781. +
  1782. +     A whole host of people including quite a few Amiga people.  I
  1783. +     don't know who all to thank, but Richard Stallman and David Gay
  1784. +     come to mind.
  1785. +
  1786. +WARNING
  1787. +
  1788. +     Even though, as GNU software, this comes with NO warrenty, this
  1789. +     comes with even less warenty.  This is a BETA version.  It works
  1790. +     on my machine.
  1791. +
  1792. +DESCRIPTION
  1793. +
  1794. +     Emacs is a very powerful, but sometimes cryptic, text editor. Its
  1795. +     basic features are similar to those of the MEmacs editor which
  1796. +     comes with AmigaDOS (in the Tools directory), but has numerous
  1797. +     other facilities:
  1798. +
  1799. +     - unlimited undo.
  1800. +     - language specific editing, with automatic (re)indentation.
  1801. +     - a dialect of lisp as extension language, leading to extreme 
  1802. +       reconfigurability.
  1803. +     - abbreviations for commonly typed words.
  1804. +     - complete on-line manual.
  1805. +     - powerful search & replace facilities (including wildcards).
  1806. +     - direct mail and news reading ability
  1807. +     - everything you could every desire in an editor and some of what
  1808. +       you'd like in a good OS
  1809. +
  1810. +NEW FEATURES
  1811. +
  1812. +     Since the previous release (1.26), the major change has been to
  1813. +     move to emacs-19.25.  Emacs-19 has many new features and
  1814. +     optimizations.  Many of the new lisp packages require Emacs-19.
  1815. +
  1816. +OLD FEATURES
  1817. +
  1818. +     - menus, mouse, clipboard, rexx and workbench support.
  1819. +     - public screen support
  1820. +     - For the most part, it's working "good enough" --- I'm using for most
  1821. +       everything.  I havn't, however, deleted 18 from my disk yet ;).
  1822. +
  1823. +MISSING EMACS-19 FEATURES
  1824. +
  1825. +     - multiple "frames" (what emacs calls windows) support.
  1826. +     - fonts/faces (emacs does support choice of *one* font)
  1827. +     - mouse support isn't completely Emacs-19 compliant.
  1828. +
  1829. +SPECIAL REQUIREMENTS
  1830. +
  1831. +     - AmigaDOS 2.04
  1832. +     - At least 2MB of memory (emacs uses about 750k + memory for the
  1833. +       files being edited).
  1834. +     - 3.5MB of free disk space for the binary version, 11.3MB for the 
  1835. +       source version (but you can remove some of the files once it
  1836. +       has been installed).  If you want to build it, don't even
  1837. +       ask...
  1838. +     - Emacs works with a 68000 (A500,A2000), but is a bit slow. It is
  1839. +       very pleasant to use with a 68030/25MHz ...
  1840. +
  1841. +KNOWN BUGS
  1842. +
  1843. +     - exec-path just doesn't seem to work right.  Some things that
  1844. +       call external programs won't find them.  Sometimes there is a
  1845. +       way around as in vc-path for vc.  However, anything you put in
  1846. +       gnuemacs:etc (an extra assign to gnuemacs-19.25) will be found
  1847. +       as will anything in s: I honestly havn't figured this one out
  1848. +       yet.
  1849. +     - "vm" creates buffers with *huge* filenames.  The format is uses
  1850. +       to generate a buffer name from a "forwarded" buffer puts in a
  1851. +       colon.  This causes a lockup.  This may be true for other
  1852. +       buffer names with a colon.
  1853. +     - I havn't tested menus yet.  I am told someone has munged the
  1854. +       menus to work just like other v19 menus.  Someone should verify
  1855. +       this.
  1856. +     - clipboard interaction doesn't work exactly as expected.  If you
  1857. +       cut from some other app, then use kill-region, then use yank
  1858. +       followed by yank-pop, you don't get what you cut.
  1859. +     - Some issues with env-vars remain.  Emacs keeps internal copy
  1860. +       which may not be appropriate on the Amiga.  I havn't decided
  1861. +       how to hack this up yet.
  1862. +     - It seem inexplicably slightly slower in screen movement from
  1863. +       the 18 port.  May be due to creaping featureism.
  1864. +
  1865. +WHERE TO GET IT
  1866. +
  1867. +The following distributions are available:
  1868. +
  1869. +I will be uploading these to aminet first.  I assume that they will
  1870. +end up in some incoming director first.
  1871. +
  1872. +o binary only:
  1873. +  All the files necessary to use emacs. Has only a subset of the lisp
  1874. +  files, the rest may be got from a standard emacs distribution.
  1875. +  Distribution: ftp:
  1876. +    site: ftp.wustl.edu (aminet)
  1877. +    size: 3M
  1878. +    file: pub/aminet/utils/gnu/a2.0b-emacs-19.25-bin.LHA
  1879. +
  1880. +o full amiga version:
  1881. +  All the files necessary to compile emacs, all the lisp files, etc.
  1882. +  Should be noted that this file is *big* ;)
  1883. +  Distribution: ftp:
  1884. +    site: ftp.wustl.edu (aminet)
  1885. +    size: 14M
  1886. +    file: pub/aminet/utils/gnu/a2.0b-emacs-19.25-src.LHA
  1887. +
  1888. +o Complete distribution, latest version
  1889. +  Distribution: DAT, 8mm, cartridge tape
  1890. +  mail dgilbert@gamiga.guelphnet.dweomer.org for pricing.
  1891. +
  1892. +This port was based extensively on the work of David Gay (a1.26) which
  1893. +was based on that of Mark Henning (gnuemacs v1.10).
  1894. +
  1895. +DISTRIBUTABILITY
  1896. +
  1897. +      This is all GNU software, and is available under the standard
  1898. +      GNU Public licence, V2.x or later.  See file COPYING in the
  1899. +      distribution for more information.
  1900. +
  1901. +============================================================================
  1902. +|David Gilbert, University Of Guelph, Ontario | Two things can only be     |
  1903. +|Main:  dgilbert@gamiga.guelphnet.dweomer.org |  equal if and only if they |
  1904. +|Backup:    dgilbert@snowhite.cis.uoguelph.ca |   are precisely opposite.  |
  1905. +=========================================================GLO================
  1906. +-----BEGIN PGP PUBLIC KEY BLOCK-----
  1907. +Version: 2.6
  1908. +
  1909. +mQCNAi5r8M0AAAEEAM2rST67nC5DNuwa0ejycmbFzFSeCHuqY3jCvuFSaxKD8Qt6
  1910. +mHk87/nAVzbf8g8euGsloqTE6wH6PIyxIgooYTLofqU0iob6EXHLJI8FS40Ra0mZ
  1911. +uGKHs2JjDbQrHWbuwh9T64hmyEnBOKneA/gwZ6B8bSc1y6i+b+lPL8A93KIlAAUR
  1912. +tDVEYXZpZCBHaWxiZXJ0IDxkZ2lsYmVydEBnYW1pZ2EuZ3VlbHBobmV0LmR3ZW9t
  1913. +ZXIub3JnPokAlQIFEC6ucsDpTy/APdyiJQEBZ+gD/Aq4CDLlo+pD0wi4kz3WrwWC
  1914. +63Ru1zTmp6JC1p6WXnLuoJUfAbQmJvlwcXfSDohdHQctiWyZBw/9raHM8uE44JU8
  1915. +c+QQTyvN3ID4kBJO8zedszzHvdqznpCIVGLidyK0YR0Said0UfdX3pdvXvJkCskn
  1916. +ER46OGLhbYMeI0CmhgqviQBFAgUQLmveSEJtX8Qjp9cJAQGbsQGAj4TsXAl3kvFs
  1917. +4r3Dj8GhXztYfbbSZH6DYG9oc0Rzmg0VtEVAVCGTFwT+VHektajn
  1918. +=SoNL
  1919. +-----END PGP PUBLIC KEY BLOCK-----
  1920. +
  1921. +
  1922. +
  1923. diff -ru --new-file baseline/fsf/emacs/compile.doc amiga/fsf/emacs/compile.doc
  1924. --- baseline/fsf/emacs/compile.doc    Wed Dec 31 17:00:00 1969
  1925. +++ amiga/fsf/emacs/compile.doc    Sun Oct 15 17:05:00 1995
  1926. @@ -0,0 +1,48 @@
  1927. +To compile emacs, you will need SAS C 6.x. I use 6.51. If you try to
  1928. +make it work with Aztec C or gcc, you might run into difficulties with
  1929. +the dumping code:
  1930. +- The "small" data model (A4-relative) is used, to get all the variables
  1931. +  in one hunk.
  1932. +- Some variables are declared with the "far" attribute to get them out
  1933. +  of this hunk (and the dumping code depends on this). Move these to
  1934. +  the amiga_data.c module (which is for variables that shouldn't be
  1935. +  dumped).
  1936. +You will also need dgay's 'unix compatibility' library which should have been
  1937. +distributed alongside emacs.
  1938. +
  1939. +To compile:
  1940. +
  1941. +a) Install the 'unix compatibility' library.
  1942. +    As I recall, this is available on aminet under the name
  1943. +    "unix*.lha" or somesuch.
  1944. +
  1945. +b) Install as usual (see INSTALLATION).
  1946. +
  1947. +c) Compile the C preprocessor (SAS's one has problems ...):
  1948. +
  1949. +     cd gnuemacs:cpp
  1950. +     smake
  1951. +
  1952. +   When the preprocessor is running, it needs to find uncompacted versions
  1953. +   of the include files. If you only installed the compacted include files,
  1954. +   you will have to install the uncompacted ones somewhere.
  1955. +
  1956. +   You can check your type of include files by looking to see if (eg)
  1957. +   include:stdio.h is a readable text file (all is ok) or contains binary 
  1958. +   characters (you have the compacted files).
  1959. +
  1960. +   I've personally had trouble compiling this.  I'll include my copy.
  1961. +
  1962. +e) Compile & dump emacs
  1963. +
  1964. +     stack 100000
  1965. +     cd gnuemacs-19.25:src
  1966. +     smake
  1967. +     copy temacs /
  1968. +
  1969. +   (This takes around 20 minutes from scratch on an A2500/30).
  1970. +
  1971. +If all goes well, you should have a new version of emacs ...
  1972. +
  1973. +[Note: The DOC strings are not remade for some reason. To change this,
  1974. +edit ymakefile and remove the comment from the rule for xemacs]
  1975. diff -ru --new-file baseline/fsf/emacs/configure amiga/fsf/emacs/configure
  1976. --- baseline/fsf/emacs/configure    Sun Oct 16 01:17:37 1994
  1977. +++ amiga/fsf/emacs/configure    Mon Mar 25 14:34:09 1996
  1978. @@ -58,7 +58,7 @@
  1979.  ### Establish some default values.
  1980.  run_in_place=
  1981.  single_tree=
  1982. -prefix='/usr/local'
  1983. +prefix='/gnu'
  1984.  exec_prefix='${prefix}'
  1985.  bindir='${exec_prefix}/bin'
  1986.  datadir='${prefix}/lib'
  1987. @@ -256,7 +256,7 @@
  1988.          ## Get the next argument from the argument list, if there is one.
  1989.              if [ $# = 0 ]; then
  1990.            (echo "${progname}: You must give a value for the \`--${optname}' option, as in
  1991. -    \`--${optname}=/usr/local/X11/include'."
  1992. +    \`--${optname}=/gnu/X11/include'."
  1993.             echo "${short_usage}") >&2
  1994.            exit 1
  1995.          fi
  1996. @@ -270,7 +270,7 @@
  1997.          ## Get the next argument from the argument list, if there is one.
  1998.              if [ $# = 0 ]; then
  1999.            (echo "${progname}: You must give a value for the \`--${optname}' option, as in
  2000. -    \`--${optname}=/usr/local/X11/lib'."
  2001. +    \`--${optname}=/gnu/X11/lib'."
  2002.             echo "${short_usage}") >&2
  2003.            exit 1
  2004.          fi
  2005. @@ -503,6 +503,18 @@
  2006.      machine=alliant-2800 opsys=bsd4-3
  2007.    ;;
  2008.  
  2009. +  ## Commodore Amiga
  2010. +  m68*-cbm-amigados)
  2011. +    machine=amiga opsys=amigados
  2012. +    ## Convert absolute srcdir to canonical amigados form, which
  2013. +    ## native compilers can understand and gcc can deal with.
  2014. +    case "${srcdir}" in
  2015. +      /* )
  2016. +    srcdir=`echo ${srcdir} | sed -e 's%^/%%' -e 's%/%:%'`
  2017. +      ;;
  2018. +    esac
  2019. +  ;;
  2020. +
  2021.    ## Altos 3068
  2022.    m68*-altos-sysv* )
  2023.      machine=altos opsys=usg5-2
  2024. @@ -1208,7 +1220,7 @@
  2025.  if egrep yes conftest.out >/dev/null 2>&1; then
  2026.    GCC=1 # For later tests.
  2027.  fi
  2028. -rm -f conftest*
  2029. +rm -rf conftest*
  2030.   
  2031.  esac
  2032.  
  2033. @@ -1315,7 +1327,7 @@
  2034.    IFS="${IFS=     }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
  2035.    for ac_dir in $PATH; do
  2036.      case "$ac_dir" in
  2037. -    ''|.|/etc|/sbin|/usr/sbin|/usr/etc|/usr/afsws/bin|/usr/ucb) ;;
  2038. +    ''|.|/gnu/etc) ;;
  2039.      *)
  2040.        # OSF1 and SCO ODT 3.0 have their own names for install.
  2041.        for ac_prog in installbsd scoinst install; do
  2042. @@ -1765,7 +1777,7 @@
  2043.  #      $prefix/lib    where we will be installing things
  2044.  #      $exec_prefix/lib    likewise
  2045.  # eval it to expand exec_prefix.
  2046. -for ac_dir in `eval echo . /tmp /var/tmp /usr/tmp $prefix/lib $exec_prefix/lib` ; do
  2047. +for ac_dir in `eval echo . /tmp $prefix/lib $exec_prefix/lib` ; do
  2048.    test -d $ac_dir || continue
  2049.    test -w $ac_dir || continue # It's less confusing to not echo anything here.
  2050.    (echo 1 > $ac_dir/conftest9012345) 2>/dev/null
  2051. @@ -1834,10 +1846,10 @@
  2052.      else
  2053.        echo "  No window system specified.  Looking for X11."
  2054.        # If the user didn't specify a window system and we found X11, use it.
  2055. -      if [ -r /usr/lib/libX11.a \
  2056. -     -o -d /usr/include/X11 \
  2057. -         -o -d /usr/X386/include \
  2058. -     -o -d ${x_includes}/X11 ]; then
  2059. +      if [ -r /gnu/lib/libX11.a \
  2060. +     -o -d /gnu/include/X11 \
  2061. +         -o -d /gnu/X386/include \
  2062. +     -o -d /gnu/X11 ]; then
  2063.          window_system=x11
  2064.        fi
  2065.      fi
  2066. @@ -1876,7 +1888,7 @@
  2067.        ac_im_usrlibdir=$ac_im_libdir
  2068.      fi
  2069.      case "$ac_im_incroot" in
  2070. -    /usr/include) ;;
  2071. +    /gnu/include) ;;
  2072.      *) test -z "$x_includes" && x_includes="$ac_im_incroot" ;;
  2073.      esac
  2074.      case "$ac_im_usrlibdir" in
  2075. @@ -1910,40 +1922,40 @@
  2076.  else
  2077.    rm -rf conftest*
  2078.    for ac_dir in               \
  2079. -    /usr/X11R6/include        \
  2080. -    /usr/X11R5/include        \
  2081. -    /usr/X11R4/include        \
  2082. +    /gnu/X11R6/include        \
  2083. +    /gnu/X11R5/include        \
  2084. +    /gnu/X11R4/include        \
  2085.                                \
  2086. -    /usr/include/X11R6        \
  2087. -    /usr/include/X11R5        \
  2088. -    /usr/include/X11R4        \
  2089. +    /gnu/include/X11R6        \
  2090. +    /gnu/include/X11R5        \
  2091. +    /gnu/include/X11R4        \
  2092.                                \
  2093. -    /usr/local/X11R6/include  \
  2094. -    /usr/local/X11R5/include  \
  2095. -    /usr/local/X11R4/include  \
  2096. +    /gnu/local/X11R6/include  \
  2097. +    /gnu/local/X11R5/include  \
  2098. +    /gnu/local/X11R4/include  \
  2099.                                \
  2100. -    /usr/local/include/X11R6  \
  2101. -    /usr/local/include/X11R5  \
  2102. -    /usr/local/include/X11R4  \
  2103. +    /gnu/local/include/X11R6  \
  2104. +    /gnu/local/include/X11R5  \
  2105. +    /gnu/local/include/X11R4  \
  2106.                                \
  2107. -    /usr/X11/include          \
  2108. -    /usr/include/X11          \
  2109. -    /usr/local/X11/include    \
  2110. -    /usr/local/include/X11    \
  2111. +    /gnu/X11/include          \
  2112. +    /gnu/include/X11          \
  2113. +    /gnu/local/X11/include    \
  2114. +    /gnu/local/include/X11    \
  2115.                                \
  2116. -    /usr/X386/include         \
  2117. -    /usr/x386/include         \
  2118. -    /usr/XFree86/include/X11  \
  2119. +    /gnu/X386/include         \
  2120. +    /gnu/x386/include         \
  2121. +    /gnu/XFree86/include/X11  \
  2122.                                \
  2123. -    /usr/include              \
  2124. -    /usr/local/include        \
  2125. -    /usr/unsupported/include  \
  2126. -    /usr/athena/include       \
  2127. -    /usr/local/x11r5/include  \
  2128. -    /usr/lpp/Xamples/include  \
  2129. +    /gnu/include              \
  2130. +    /gnu/local/include        \
  2131. +    /gnu/unsupported/include  \
  2132. +    /gnu/athena/include       \
  2133. +    /gnu/local/x11r5/include  \
  2134. +    /gnu/lpp/Xamples/include  \
  2135.                                \
  2136. -    /usr/openwin/include      \
  2137. -    /usr/openwin/share/include \
  2138. +    /gnu/openwin/include      \
  2139. +    /gnu/openwin/share/include \
  2140.      ; \
  2141.    do
  2142.      if test -r "$ac_dir/$x_direct_test_include"; then
  2143. @@ -1978,40 +1990,40 @@
  2144.     :; no_x=
  2145.  else
  2146.     :; for ac_dir in `echo "$x_includes" | sed s/include/lib/` \
  2147. -    /usr/X11R6/lib        \
  2148. -    /usr/X11R5/lib        \
  2149. -    /usr/X11R4/lib        \
  2150. +    /gnu/X11R6/lib        \
  2151. +    /gnu/X11R5/lib        \
  2152. +    /gnu/X11R4/lib        \
  2153.                            \
  2154. -    /usr/lib/X11R6        \
  2155. -    /usr/lib/X11R5        \
  2156. -    /usr/lib/X11R4        \
  2157. +    /gnu/lib/X11R6        \
  2158. +    /gnu/lib/X11R5        \
  2159. +    /gnu/lib/X11R4        \
  2160.                            \
  2161. -    /usr/local/X11R6/lib  \
  2162. -    /usr/local/X11R5/lib  \
  2163. -    /usr/local/X11R4/lib  \
  2164. +    /gnu/local/X11R6/lib  \
  2165. +    /gnu/local/X11R5/lib  \
  2166. +    /gnu/local/X11R4/lib  \
  2167.                            \
  2168. -    /usr/local/lib/X11R6  \
  2169. -    /usr/local/lib/X11R5  \
  2170. -    /usr/local/lib/X11R4  \
  2171. +    /gnu/local/lib/X11R6  \
  2172. +    /gnu/local/lib/X11R5  \
  2173. +    /gnu/local/lib/X11R4  \
  2174.                            \
  2175. -    /usr/X11/lib          \
  2176. -    /usr/lib/X11          \
  2177. -    /usr/local/X11/lib    \
  2178. -    /usr/local/lib/X11    \
  2179. +    /gnu/X11/lib          \
  2180. +    /gnu/lib/X11          \
  2181. +    /gnu/local/X11/lib    \
  2182. +    /gnu/local/lib/X11    \
  2183.                            \
  2184. -    /usr/X386/lib         \
  2185. -    /usr/x386/lib         \
  2186. -    /usr/XFree86/lib/X11  \
  2187. +    /gnu/X386/lib         \
  2188. +    /gnu/x386/lib         \
  2189. +    /gnu/XFree86/lib/X11  \
  2190.                            \
  2191. -    /usr/lib              \
  2192. -    /usr/local/lib        \
  2193. -    /usr/unsupported/lib  \
  2194. -    /usr/athena/lib       \
  2195. -    /usr/local/x11r5/lib  \
  2196. -    /usr/lpp/Xamples/lib  \
  2197. +    /gnu/lib              \
  2198. +    /gnu/local/lib        \
  2199. +    /gnu/unsupported/lib  \
  2200. +    /gnu/athena/lib       \
  2201. +    /gnu/local/x11r5/lib  \
  2202. +    /gnu/lpp/Xamples/lib  \
  2203.                            \
  2204. -    /usr/openwin/lib      \
  2205. -    /usr/openwin/share/lib \
  2206. +    /gnu/openwin/lib      \
  2207. +    /gnu/openwin/share/lib \
  2208.      ; \
  2209.  do
  2210.    for ac_extension in a so sl; do
  2211. @@ -2043,8 +2055,8 @@
  2212.  [ -n "${x_libraries}" ] && LD_SWITCH_X_SITE_AUX="-R${x_libraries}"
  2213.  [ -n "${x_includes}" ] && C_SWITCH_X_SITE="-I${x_includes}"
  2214.  
  2215. -# Avoid forcing the search of /usr/include before fixed include files.
  2216. -if [ "$C_SWITCH_X_SITE" = "-I/usr/include" ]; then
  2217. +# Avoid forcing the search of /gnu/include before fixed include files.
  2218. +if [ "$C_SWITCH_X_SITE" = "-I/gnu/include" ]; then
  2219.     C_SWITCH_X_SITE=" "
  2220.  fi
  2221.  
  2222. @@ -2287,9 +2299,9 @@
  2223.  
  2224.  
  2225.  echo checking for XFree86
  2226. -if test -d /usr/X386/include; then
  2227. +if test -d /gnu/X386/include; then
  2228.    HAVE_XFREE386=yes
  2229. -  test -z "${C_SWITCH_X_SITE}" && C_SWITCH_X_SITE="-I/usr/X386/include"
  2230. +  test -z "${C_SWITCH_X_SITE}" && C_SWITCH_X_SITE="-I/gnu/X386/include"
  2231.  fi
  2232.  
  2233.  # We change CFLAGS temporarily so that C_SWITCH_X_SITE gets used
  2234. @@ -2897,7 +2909,7 @@
  2235.    exit 1
  2236.  fi
  2237.  
  2238. -if [ -f /usr/lpp/X11/bin/smt.exp ]; then
  2239. +if [ -f /gnu/lpp/X11/bin/smt.exp ]; then
  2240.    
  2241.    
  2242.  {
  2243. @@ -3254,7 +3266,9 @@
  2244.  
  2245.  trap 'rm -f config.status; exit 1' 1 2 15
  2246.  echo creating config.status
  2247. -rm -f config.status
  2248. +# Some systems, like AmigaDOS, won't allow you to remove a script that is
  2249. +# being executed, so just move it out of the way instead.
  2250. +if test -f config.status; then mv config.status config.status.old; else true; fi
  2251.  cat > config.status <<EOF
  2252.  #!/bin/sh
  2253.  # Generated automatically by configure.
  2254. @@ -3340,12 +3354,13 @@
  2255.    fi
  2256.  
  2257.    # A "../" for each directory in $ac_dir_suffix.
  2258. +  # Treat paths with ':' in them as absolute under AmigaDOS.
  2259.    ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
  2260.    case "$ac_given_srcdir" in
  2261.    .)  srcdir=.
  2262.        if test -z "$ac_dir_suffix"; then top_srcdir=.
  2263.        else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
  2264. -  /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
  2265. +  /* | *:* ) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
  2266.    *) # Relative path.
  2267.      srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
  2268.      top_srcdir="$ac_dots$ac_given_srcdir" ;;
  2269. @@ -3505,6 +3520,13 @@
  2270.  
  2271.  
  2272.  
  2273. +
  2274. +# This is an AmigaDOS specific hack that lets us continue to configure with gcc
  2275. +# but then compile with SAS/C ("sc").  It can be removed or suitable modified to
  2276. +# be a NOP when a gcc compiled port is working.
  2277. +echo "Saving generated src/config.h as src/config.h-gcc and replacing with hand modified version."
  2278. +mv src/config.h src/config.h-gcc
  2279. +cp -p ${top_srcdir}/src/config.h.in-sasc src/config.h
  2280.  
  2281.  # Build src/Makefile from ${srcdir}/src/Makefile.in.  This must be done
  2282.  # after src/config.h is built, since we rely on that file.
  2283. diff -ru --new-file baseline/fsf/emacs/configure.in amiga/fsf/emacs/configure.in
  2284. --- baseline/fsf/emacs/configure.in    Wed Oct  5 22:09:24 1994
  2285. +++ amiga/fsf/emacs/configure.in    Sun Oct 15 17:05:09 1995
  2286. @@ -62,7 +62,7 @@
  2287.  ### Establish some default values.
  2288.  run_in_place=
  2289.  single_tree=
  2290. -prefix='/usr/local'
  2291. +prefix='/gnu'
  2292.  exec_prefix='${prefix}'
  2293.  bindir='${exec_prefix}/bin'
  2294.  datadir='${prefix}/lib'
  2295. @@ -260,7 +260,7 @@
  2296.          ## Get the next argument from the argument list, if there is one.
  2297.              if [ $# = 0 ]; then
  2298.            (echo "${progname}: You must give a value for the \`--${optname}' option, as in
  2299. -    \`--${optname}=/usr/local/X11/include'."
  2300. +    \`--${optname}=/gnu/X11/include'."
  2301.             echo "${short_usage}") >&2
  2302.            exit 1
  2303.          fi
  2304. @@ -274,7 +274,7 @@
  2305.          ## Get the next argument from the argument list, if there is one.
  2306.              if [ $# = 0 ]; then
  2307.            (echo "${progname}: You must give a value for the \`--${optname}' option, as in
  2308. -    \`--${optname}=/usr/local/X11/lib'."
  2309. +    \`--${optname}=/gnu/X11/lib'."
  2310.             echo "${short_usage}") >&2
  2311.            exit 1
  2312.          fi
  2313. @@ -507,6 +507,18 @@
  2314.      machine=alliant-2800 opsys=bsd4-3
  2315.    ;;
  2316.  
  2317. +  ## Commodore Amiga
  2318. +  m68*-cbm-amigados)
  2319. +    machine=amiga opsys=amigados
  2320. +    ## Convert absolute srcdir to canonical amigados form, which
  2321. +    ## native compilers can understand and gcc can deal with.
  2322. +    case "${srcdir}" in
  2323. +      /* )
  2324. +    srcdir=`/bin/echo ${srcdir} | sed -e 's%^/%%' -e 's%/%:%'`
  2325. +      ;;
  2326. +    esac
  2327. +  ;;
  2328. +
  2329.    ## Altos 3068
  2330.    m68*-altos-sysv* )
  2331.      machine=altos opsys=usg5-2
  2332. @@ -1248,10 +1260,10 @@
  2333.      else
  2334.        echo "  No window system specified.  Looking for X11."
  2335.        # If the user didn't specify a window system and we found X11, use it.
  2336. -      if [ -r /usr/lib/libX11.a \
  2337. -     -o -d /usr/include/X11 \
  2338. -         -o -d /usr/X386/include \
  2339. -     -o -d ${x_includes}/X11 ]; then
  2340. +      if [ -r /gnu/lib/libX11.a \
  2341. +     -o -d /gnu/include/X11 \
  2342. +         -o -d /gnu/X386/include \
  2343. +     -o -d /gnu/X11 ]; then
  2344.          window_system=x11
  2345.        fi
  2346.      fi
  2347. @@ -1283,8 +1295,8 @@
  2348.  [ -n "${x_libraries}" ] && LD_SWITCH_X_SITE_AUX="-R${x_libraries}"
  2349.  [ -n "${x_includes}" ] && C_SWITCH_X_SITE="-I${x_includes}"
  2350.  
  2351. -# Avoid forcing the search of /usr/include before fixed include files.
  2352. -if [ "$C_SWITCH_X_SITE" = "-I/usr/include" ]; then
  2353. +# Avoid forcing the search of /gnu/include before fixed include files.
  2354. +if [ "$C_SWITCH_X_SITE" = "-I/gnu/include" ]; then
  2355.     C_SWITCH_X_SITE=" "
  2356.  fi
  2357.  
  2358. @@ -1478,9 +1490,9 @@
  2359.  AC_HAVE_LIBRARY(-lXbsd, LD_SWITCH_X_SITE="$LD_SWITCH_X_SITE -lXbsd")
  2360.  
  2361.  echo checking for XFree86
  2362. -if test -d /usr/X386/include; then
  2363. +if test -d /gnu/X386/include; then
  2364.    HAVE_XFREE386=yes
  2365. -  test -z "${C_SWITCH_X_SITE}" && C_SWITCH_X_SITE="-I/usr/X386/include"
  2366. +  test -z "${C_SWITCH_X_SITE}" && C_SWITCH_X_SITE="-I/gnu/X386/include"
  2367.  fi
  2368.  
  2369.  # We change CFLAGS temporarily so that C_SWITCH_X_SITE gets used
  2370. @@ -1561,7 +1573,7 @@
  2371.    exit 1
  2372.  fi
  2373.  
  2374. -if [ -f /usr/lpp/X11/bin/smt.exp ]; then
  2375. +if [ -f /gnu/lpp/X11/bin/smt.exp ]; then
  2376.    ]
  2377.    AC_DEFINE(HAVE_AIX_SMT_EXP)
  2378.    [
  2379. @@ -1711,6 +1723,13 @@
  2380.    exec_prefix=`echo "${exec_prefix}" | sed 's,\([^/]\)/*$,\1,'`
  2381.  ]
  2382.  AC_OUTPUT(Makefile lib-src/Makefile.in oldXMenu/Makefile lwlib/Makefile src/Makefile.in, [
  2383. +
  2384. +# This is an AmigaDOS specific hack that lets us continue to configure with gcc
  2385. +# but then compile with SAS/C ("sc").  It can be removed or suitable modified to
  2386. +# be a NOP when a gcc compiled port is working.
  2387. +echo "Saving generated src/config.h as src/config.h-gcc and replacing with hand modified version."
  2388. +mv src/config.h src/config.h-gcc
  2389. +cp -p ${top_srcdir}/src/config.h.in-sasc src/config.h
  2390.  
  2391.  # Build src/Makefile from ${srcdir}/src/Makefile.in.  This must be done
  2392.  # after src/config.h is built, since we rely on that file.
  2393. diff -ru --new-file baseline/fsf/emacs/cpp/SCOPTIONS amiga/fsf/emacs/cpp/SCOPTIONS
  2394. --- baseline/fsf/emacs/cpp/SCOPTIONS    Wed Dec 31 17:00:00 1969
  2395. +++ amiga/fsf/emacs/cpp/SCOPTIONS    Sun Oct 15 17:05:17 1995
  2396. @@ -0,0 +1,23 @@
  2397. +MATH=68881
  2398. +CPU=68030
  2399. +ANSI
  2400. +STRINGMERGE
  2401. +UNSIGNEDCHARS
  2402. +NOMULTIPLEINCLUDES
  2403. +SMALLCODE
  2404. +SMALLDATA
  2405. +VERBOSE
  2406. +ADDSYMBOLS
  2407. +NOVERSION
  2408. +STRICT
  2409. +STACKEXTEND
  2410. +NOCONSTLIBBASE
  2411. +COVERAGE
  2412. +NOERRORHIGHLIGHT
  2413. +GENPROTOSTATICS
  2414. +NOGENPROTOTYPEDEFS
  2415. +NOGENPROTODATAITEMS
  2416. +LINKEROPTIONS="bufsize 4096"
  2417. +OPTIMIZERCOMPLEXITY=10
  2418. +OPTIMIZERDEPTH=6
  2419. +OPTIMIZERRECURDEPTH=6
  2420. diff -ru --new-file baseline/fsf/emacs/cpp/cccp.c amiga/fsf/emacs/cpp/cccp.c
  2421. --- baseline/fsf/emacs/cpp/cccp.c    Sun Oct  9 21:54:29 1988
  2422. +++ amiga/fsf/emacs/cpp/cccp.c    Sun Oct 15 17:05:19 1995
  2423. @@ -97,12 +97,24 @@
  2424.  
  2425.  #ifdef EMACS
  2426.  #define NO_SHORTNAMES
  2427. +#ifdef AMIGA
  2428. +#include "/src/config.h"
  2429. +#undef fflush
  2430. +#undef fwrite
  2431. +#undef putchar
  2432. +/* #define fflush(fp) _flsbf(-1,fp) */
  2433. +#undef main
  2434. +#undef AMIGA_DUMP
  2435. +#include <string.h>
  2436. +#else
  2437.  #include "../src/config.h"
  2438. +#endif
  2439.  #ifdef static
  2440.  #undef static
  2441.  #endif
  2442.  #ifdef open
  2443.  #undef open
  2444. +#undef close
  2445.  #undef read
  2446.  #undef write
  2447.  #endif /* open */
  2448. @@ -114,7 +126,11 @@
  2449.  #include <ctype.h>
  2450.  #include <stdio.h>
  2451.  #ifndef USG
  2452. +#ifdef AMIGA
  2453. +#include <time.h>
  2454. +#else
  2455.  #include <sys/time.h>        /* for __DATE__ and __TIME__ */
  2456. +#endif
  2457.  #else
  2458.  #define index strchr
  2459.  #define rindex strrchr
  2460. @@ -122,8 +138,10 @@
  2461.  #include <fcntl.h>
  2462.  #endif /* USG */
  2463.  
  2464. +#ifndef AMIGA
  2465.  void bcopy (), bzero ();
  2466.  int bcmp ();
  2467. +#endif
  2468.  
  2469.  char *xmalloc (), *xrealloc (), *xcalloc ();
  2470.  void fatal (), pfatal_with_name (), perror_with_name ();
  2471. @@ -141,15 +159,29 @@
  2472.  /* #include "file" starts with the first entry in the stack */
  2473.  /* #include <file> starts with the second. */
  2474.  /* -I directories are added after the first */
  2475. +#ifdef AMIGA
  2476. +struct directory_stack default_includes[2] =
  2477. +  {
  2478. +    { &default_includes[1], "" },
  2479. +    { 0, "cpp-include:" }
  2480. +  };
  2481. +#else
  2482.  struct directory_stack default_includes[2] =
  2483.    {
  2484.      { &default_includes[1], "." },
  2485.      { 0, "/usr/include" }
  2486.    };
  2487. +#endif
  2488. +
  2489.  struct directory_stack *include = &default_includes[0];
  2490.  
  2491. +#ifdef AMIGA
  2492.  int max_include_len = 14;    /* strlen (default_include) + 2
  2493.                              (for / and null) */
  2494. +#else
  2495. +int max_include_len = 9;    /* strlen (default_include) + 1
  2496. +                            (for null) */
  2497. +#endif
  2498.  
  2499.  char STDIN_FILE[] = "";        /* Empty, like real cpp */
  2500.  int put_out_comments = 0;    /* JF non-zero means leave comments in the
  2501. @@ -378,7 +410,6 @@
  2502.      dirtmp->next = include->next;
  2503.      include->next = dirtmp;
  2504.      dirtmp->fname = argv[i]+2;
  2505. -    include = dirtmp;
  2506.      if (strlen (argv[i]) > max_include_len)
  2507.        max_include_len = strlen (argv[i]);
  2508.      break;
  2509. @@ -404,7 +435,11 @@
  2510.    else if ((f = open (in_fname, O_RDONLY)) < 0)
  2511.      goto perror;
  2512.  
  2513. +#ifdef AMIGA
  2514. +  stat (in_fname, &sbuf);
  2515. +#else
  2516.    fstat (f, &sbuf);
  2517. +#endif
  2518.    fp->fname = in_fname;
  2519.    fp->lineno = 1;
  2520.    /* JF all this is mine about reading pipes and ttys */
  2521. @@ -651,7 +686,7 @@
  2522.          register U_CHAR *p = hp->name;
  2523.          register U_CHAR *q = op->bufp - i;
  2524.  
  2525. -        if (c != (U_CHAR) -1)
  2526. +        if (c != -1)
  2527.            q--;
  2528.  
  2529.          do {        /* all this to avoid a strncmp() */
  2530. @@ -662,14 +697,14 @@
  2531.          save_ibufp = ip->bufp;
  2532.          /* back up over identifier, then expand token */
  2533.          op->bufp -= ident_length;
  2534. -        if (c != (U_CHAR) -1) op->bufp--;
  2535. +        if (c != -1) op->bufp--;
  2536.          macroexpand (hp, ip, op, &excess_newlines);
  2537.  
  2538.          check_expand(op, ip->length - (ip->bufp - ip->buf));
  2539.          
  2540.          /* If we just processed an identifier at end of input,
  2541.             return right away.  */
  2542. -        if (c == (U_CHAR) -1)
  2543. +        if (c == -1)
  2544.            return;
  2545.  
  2546.          /* if the expansion routine has not moved the input
  2547. @@ -689,7 +724,7 @@
  2548.          
  2549.        /* If we just processed an identifier at end of input,
  2550.       return right away.  */
  2551. -      if (c == (U_CHAR) -1)
  2552. +      if (c == -1)
  2553.      return;
  2554.  
  2555.        /* count the newline, if it was one.  The reason this is
  2556. @@ -977,7 +1012,7 @@
  2557.    struct stat sbuf;        /* to stat the include file */
  2558.    FILE_BUF *fp;    /* for input stack frame */
  2559.    struct directory_stack *stackp;
  2560. -  int flen;
  2561. +  int flen, maxlen;
  2562.  
  2563.    int save_indepth = indepth;
  2564.                  /* in case of errors */
  2565. @@ -1018,7 +1053,11 @@
  2566.    if (err)
  2567.      goto nope;
  2568.  
  2569. +  /* DG: This doesn't handle includes of aa:... on the Amiga */
  2570. +  /* It doesn't seem worth it. */
  2571.    other_dir = NULL;
  2572. +  maxlen = max_include_len;
  2573. +#if 0
  2574.    if (stackp == include)
  2575.      {
  2576.        fp = &instack[indepth];
  2577. @@ -1036,13 +1075,15 @@
  2578.            other_dir = (char *) alloca (n + 1);
  2579.            strncpy (other_dir, nam, n);
  2580.            other_dir[n] = '\0';
  2581. +                  if (n + 4 > maxlen) maxlen = n + 4;
  2582.          }
  2583.            break;
  2584.          }
  2585.      }
  2586.      }
  2587. +#endif
  2588.                /* JF search directory path */
  2589. -  fname = (char *) alloca (max_include_len + flen);
  2590. +  fname = (char *) alloca (maxlen + flen);
  2591.    for (; stackp; stackp = stackp->next)
  2592.      {
  2593.        if (other_dir)
  2594. @@ -1052,6 +1093,10 @@
  2595.      }
  2596.        else
  2597.      strcpy (fname, stackp->fname);
  2598. +#ifdef AMIGA
  2599. +      if (fname[0] != 0 && fname[strlen(fname) - 1] != ':')
  2600. +      /* Don't add / after : or empty strings */
  2601. +#endif
  2602.        strcat (fname, "/");
  2603.        strncat (fname, fbeg, flen);
  2604.        if ((f = open (fname, O_RDONLY)) >= 0)
  2605. @@ -1063,7 +1108,11 @@
  2606.        goto nope;
  2607.      }
  2608.  
  2609. +#ifdef AMIGA
  2610. +  if (stat(fname, &sbuf) < 0)
  2611. +#else
  2612.    if (fstat(f, &sbuf) < 0)
  2613. +#endif
  2614.      {
  2615.        perror_with_name (fname);
  2616.        goto nope;        /* impossible? */
  2617. @@ -1307,7 +1356,7 @@
  2618.  
  2619.      if (is_idstart[*p] && (p==buf || !is_idchar[*(p-1)])) {
  2620.  
  2621. -      for (id_len = 0; is_idchar[p[id_len]]; id_len++)
  2622. +      for (id_len = 0; p+id_len < buf+size && is_idchar[p[id_len]]; id_len++)
  2623.      ;
  2624.        for (arg = arglist; arg != NULL; arg = arg->next) {
  2625.      struct reflist *tpat;
  2626. @@ -1464,6 +1513,21 @@
  2627.   * the behavior of the #pragma directive is implementation defined.
  2628.   * this implementation defines it as follows.
  2629.   */
  2630. +#ifdef AMIGA
  2631. +do_pragma(buf, limit, op, keyword)
  2632. +     U_CHAR *buf, *limit;
  2633. +     FILE_BUF *op;
  2634. +     struct keyword_table *keyword;
  2635. +{
  2636. +    /* Just copy the pragma directibe back out */
  2637. +    int len2 = limit - buf, len1 = sizeof("#pragma") - 1;
  2638. +
  2639. +    check_expand(op, len1 + len2);
  2640. +    bcopy("#pragma", op->bufp, len1);
  2641. +    bcopy(buf, op->bufp + len1, len2);
  2642. +    op->bufp += len1 + len2;
  2643. +}
  2644. +#else
  2645.  do_pragma()
  2646.  {
  2647.    close (0);
  2648. @@ -1478,6 +1542,7 @@
  2649.  nope:
  2650.    fatal ("You are in a maze of twisty compiler features, all different");
  2651.  }
  2652. +#endif
  2653.  
  2654.  typedef struct if_stack {
  2655.    struct if_stack *next;    /* for chaining to the next stack frame */
  2656. @@ -2083,9 +2148,9 @@
  2657.      }
  2658.  
  2659.    if (ip != NULL)
  2660. -    fprintf(stdout, "file %s, offset %d (line %d): ",
  2661. +    fprintf(stderr, "file %s, offset %d (line %d): ",
  2662.          ip->fname, ip->bufp - ip->buf, ip->lineno);
  2663. -  fprintf(stdout, "%s\n", msg);
  2664. +  fprintf(stderr, "%s\n", msg);
  2665.    return 0;
  2666.  }
  2667.  
  2668. diff -ru --new-file baseline/fsf/emacs/cpp/cccp.lnk amiga/fsf/emacs/cpp/cccp.lnk
  2669. --- baseline/fsf/emacs/cpp/cccp.lnk    Wed Dec 31 17:00:00 1969
  2670. +++ amiga/fsf/emacs/cpp/cccp.lnk    Sun Oct 15 17:05:22 1995
  2671. @@ -0,0 +1,10 @@
  2672. +FROM LIB:c.o "cccp.o"+"alloca.o"+"cexp.tab.o"
  2673. +TO "cccp"
  2674. +LIB src:unix/src/unix.lib LIB:scm881.lib
  2675. +    LIB:sc.lib LIB:amiga.lib
  2676. +ADDSYM
  2677. +SMALLCODE
  2678. +SMALLDATA
  2679. +VERBOSE
  2680. +
  2681. +bufsize 4096
  2682. diff -ru --new-file baseline/fsf/emacs/cpp/lmkfile amiga/fsf/emacs/cpp/lmkfile
  2683. --- baseline/fsf/emacs/cpp/lmkfile    Wed Dec 31 17:00:00 1969
  2684. +++ amiga/fsf/emacs/cpp/lmkfile    Sun Oct 15 17:05:24 1995
  2685. @@ -0,0 +1,26 @@
  2686. +# Makefile for cccp in the Emacs distribution only.
  2687. +# Here we assume that you are using SASC
  2688. +# (since cccp is used by Emacs only to deal with long strings in macros.
  2689. +
  2690. +CFLAGS=DEFINE EMACS DEFINE AMIGA INDIRECTORY=src:unix/include/ \
  2691. +     DEFINE STACK_DIRECTION=-1 DEFINE OUTPUT_LINE_COMMANDS\
  2692. +       NOWARNVOIDRETURN
  2693. +
  2694. +cpp: cccp
  2695. +        -delete cpp
  2696. +        makelink cpp cccp
  2697. +cccp: cccp.o cexp.tab.o alloca.o
  2698. +        SC cccp.o alloca.o cexp.tab.o PROGRAMNAME cccp\
  2699. +        LIBRARY=src:unix/src/unix.lib LINK
  2700. +
  2701. +testexp: y.tab.c
  2702. +        cc -g -DTEST_EXP_READER y.tab.c -o testexp
  2703. +
  2704. +cexp.tab.c: cexp.y
  2705. +        echo "expect 40 shift/reduce conflicts"
  2706. +        bin:bison cexp.y >bison.debug
  2707. +
  2708. +cccp.o: cccp.c
  2709. +cexp.tab.o: cexp.tab.c
  2710. +alloca.o: /src/alloca.c
  2711. +        $(CC) $(CFLAGS) OBJECTNAME=alloca.o /src/alloca.c
  2712. diff -ru --new-file baseline/fsf/emacs/etc/DOC amiga/fsf/emacs/etc/DOC
  2713. --- baseline/fsf/emacs/etc/DOC    Wed Dec 31 17:00:00 1969
  2714. +++ amiga/fsf/emacs/etc/DOC    Sun Oct 15 17:05:31 1995
  2715. @@ -0,0 +1,11272 @@
  2716. +Fredraw-frame
  2717. +Clear frame FRAME and output again what is supposed to appear on it.
  2718. +
  2719. +(redraw-frame FRAME)Fredraw-frame
  2720. +Clear frame FRAME and output again what is supposed to appear on it.
  2721. +
  2722. +(redraw-frame FRAME)Fredraw-display
  2723. +Clear and redisplay all visible frames.
  2724. +
  2725. +(redraw-display)Fframe-or-buffer-changed-p
  2726. +Return non-nil if the frame and buffer state appears to have changed.
  2727. +The state variable is an internal vector containing all frames and buffers,
  2728. +along with the buffers' read-only and modified flags, which allows a fast
  2729. +check to see whether the menu bars might need to be recomputed.
  2730. +If this function returns non-nil, it updates the internal vector to reflect
  2731. +the current state.
  2732. +
  2733. +
  2734. +(frame-or-buffer-changed-p)Fopen-termscript
  2735. +Start writing all terminal output to FILE as well as the terminal.
  2736. +FILE = nil means just close any termscript file currently open.
  2737. +
  2738. +(open-termscript FILE)Fsend-string-to-terminal
  2739. +Send STRING to the terminal without alteration.
  2740. +Control characters in STRING will have terminal-dependent effects.
  2741. +
  2742. +(send-string-to-terminal STR)Fding
  2743. +Beep, or flash the screen.
  2744. +Also, unless an argument is given,
  2745. +terminate any keyboard macro currently executing.
  2746. +
  2747. +(ding &optional ARG)Fsleep-for
  2748. +Pause, without updating display, for SECONDS seconds.
  2749. +SECONDS may be a floating-point value, meaning that you can wait for a
  2750. +fraction of a second.  Optional second arg MILLISECONDS specifies an
  2751. +additional wait period, in milliseconds; this may be useful if your
  2752. +Emacs was built without floating point support.
  2753. +(Not all operating systems support waiting for a fraction of a second.)
  2754. +
  2755. +(sleep-for SECONDS &optional MILLISECONDS)Fsit-for
  2756. +Perform redisplay, then wait for SECONDS seconds or until input is available.
  2757. +SECONDS may be a floating-point value, meaning that you can wait for a
  2758. +fraction of a second.  Optional second arg MILLISECONDS specifies an
  2759. +additional wait period, in milliseconds; this may be useful if your
  2760. +Emacs was built without floating point support.
  2761. +(Not all operating systems support waiting for a fraction of a second.)
  2762. +Optional third arg non-nil means don't redisplay, just wait for input.
  2763. +Redisplay is preempted as always if input arrives, and does not happen
  2764. +if input is available before it starts.
  2765. +Value is t if waited the full time with no input arriving.
  2766. +
  2767. +(sit-for SECONDS &optional MILLISECONDS NODISP)Vbaud-rate
  2768. +*The output baud rate of the terminal.
  2769. +On most systems, changing this value will affect the amount of padding
  2770. +and the other strategic decisions made during redisplay.Vinverse-video
  2771. +*Non-nil means invert the entire frame display.
  2772. +This means everything is in inverse video which otherwise would not be.Vvisible-bell
  2773. +*Non-nil means try to flash the frame to represent a bell.Vno-redraw-on-reenter
  2774. +*Non-nil means no need to redraw entire frame after suspending.
  2775. +A non-nil value is useful if the terminal can automatically preserve
  2776. +Emacs's frame display when you reenter Emacs.
  2777. +It is up to you to set this variable if your terminal can do that.Vwindow-system
  2778. +A symbol naming the window-system under which Emacs is running
  2779. +(such as `x'), or nil if emacs is running on an ordinary terminal.Vwindow-system-version
  2780. +The version number of the window system in use.
  2781. +For X windows, this is 10 or 11.Vcursor-in-echo-area
  2782. +Non-nil means put cursor in minibuffer, at end of any message there.Vglyph-table
  2783. +Table defining how to output a glyph code to the frame.
  2784. +If not nil, this is a vector indexed by glyph code to define the glyph.
  2785. +Each element can be:
  2786. + integer: a glyph code which this glyph is an alias for.
  2787. + string: output this glyph using that string (not impl. in X windows).
  2788. + nil: this glyph mod 256 is char code to output,
  2789. +    and this glyph / 256 is face code for X windows (see `face-id').Vstandard-display-table
  2790. +Display table to use for buffers that specify none.
  2791. +See `buffer-display-table' for more information.Fframep
  2792. +Return non-nil if OBJECT is a frame.
  2793. +Value is t for a termcap frame (a character-only terminal),
  2794. +`x' for an Emacs frame that is really an X window.
  2795. +Also see `live-frame-p'.
  2796. +
  2797. +(framep OBJECT)Fframe-live-p
  2798. +Return non-nil if OBJECT is a frame which has not been deleted.
  2799. +Value is nil if OBJECT is not a live frame.  If object is a live
  2800. +frame, the return value indicates what sort of output device it is
  2801. +displayed on.  Value is t for a termcap frame (a character-only
  2802. +terminal), `x' for an Emacs frame being displayed in an X window.
  2803. +
  2804. +(frame-live-p OBJECT)Fselect-frame
  2805. +Select the frame FRAME.
  2806. +Subsequent editing commands apply to its selected window.
  2807. +The selection of FRAME lasts until the next time the user does
  2808. +something to select a different frame, or until the next time this
  2809. +function is called.
  2810. +
  2811. +(select-frame FRAME &optional NO-ENTER)Fhandle-switch-frame
  2812. +Handle a switch-frame event EVENT.
  2813. +Switch-frame events are usually bound to this function.
  2814. +A switch-frame event tells Emacs that the window manager has requested
  2815. +that the user's events be directed to the frame mentioned in the event.
  2816. +This function selects the selected window of the frame of EVENT.
  2817. +
  2818. +If EVENT is frame object, handle it as if it were a switch-frame event
  2819. +to that frame.
  2820. +
  2821. +(handle-switch-frame FRAME &optional NO-ENTER)Fselected-frame
  2822. +Return the frame that is now selected.
  2823. +
  2824. +(selected-frame)Fwindow-frame
  2825. +Return the frame object that window WINDOW is on.
  2826. +
  2827. +(window-frame WINDOW)Fframe-first-window
  2828. +Returns the topmost, leftmost window of FRAME.
  2829. +If omitted, FRAME defaults to the currently selected frame.
  2830. +
  2831. +(frame-first-window &optional FRAME)Fframe-root-window
  2832. +Returns the root-window of FRAME.
  2833. +If omitted, FRAME defaults to the currently selected frame.
  2834. +
  2835. +(frame-root-window &optional FRAME)Fframe-selected-window
  2836. +Return the selected window of frame object FRAME.
  2837. +If omitted, FRAME defaults to the currently selected frame.
  2838. +
  2839. +(frame-selected-window &optional FRAME)Fset-frame-selected-window
  2840. +Set the selected window of frame object FRAME to WINDOW.
  2841. +If FRAME is nil, the selected frame is used.
  2842. +If FRAME is the selected frame, this makes WINDOW the selected window.
  2843. +
  2844. +(set-frame-selected-window FRAME WINDOW)Fframe-list
  2845. +Return a list of all frames.
  2846. +
  2847. +(frame-list)Fnext-frame
  2848. +Return the next frame in the frame list after FRAME.
  2849. +By default, skip minibuffer-only frames.
  2850. +If omitted, FRAME defaults to the selected frame.
  2851. +If optional argument MINIFRAME is nil, exclude minibuffer-only frames.
  2852. +If MINIBUF is a window, include only its own frame
  2853. +and any frame now using that window as the minibuffer.
  2854. +If MINIFRAME is `visible', include all visible frames.
  2855. +If MINIBUF is 0, include all visible and iconified frames.
  2856. +Otherwise, include all frames.
  2857. +
  2858. +(next-frame &optional FRAME MINIFRAME)Fprevious-frame
  2859. +Return the previous frame in the frame list before FRAME.
  2860. +By default, skip minibuffer-only frames.
  2861. +If omitted, FRAME defaults to the selected frame.
  2862. +If optional argument MINIFRAME is nil, exclude minibuffer-only frames.
  2863. +If MINIBUF is a window, include only its own frame
  2864. +and any frame now using that window as the minibuffer.
  2865. +If MINIFRAME is `visible', include all visible frames.
  2866. +If MINIBUF is 0, include all visible and iconified frames.
  2867. +Otherwise, include all frames.
  2868. +
  2869. +(previous-frame &optional FRAME MINIFRAME)Fdelete-frame
  2870. +Delete FRAME, permanently eliminating it from use.
  2871. +If omitted, FRAME defaults to the selected frame.
  2872. +A frame may not be deleted if its minibuffer is used by other frames.
  2873. +Normally, you may not delete a frame if all other frames are invisible,
  2874. +but if the second optional argument FORCE is non-nil, you may do so.
  2875. +
  2876. +(delete-frame &optional FRAME FORCE)Fmouse-position
  2877. +Return a list (FRAME X . Y) giving the current mouse frame and position.
  2878. +The position is given in character cells, where (0, 0) is the
  2879. +upper-left corner.
  2880. +If Emacs is running on a mouseless terminal or hasn't been programmed
  2881. +to read the mouse position, it returns the selected frame for FRAME
  2882. +and nil for X and Y.
  2883. +
  2884. +(mouse-position)Fmouse-pixel-position
  2885. +Return a list (FRAME X . Y) giving the current mouse frame and position.
  2886. +The position is given in pixel units, where (0, 0) is the
  2887. +upper-left corner.
  2888. +If Emacs is running on a mouseless terminal or hasn't been programmed
  2889. +to read the mouse position, it returns the selected frame for FRAME
  2890. +and nil for X and Y.
  2891. +
  2892. +(mouse-pixel-position)Fset-mouse-position
  2893. +Move the mouse pointer to the center of character cell (X,Y) in FRAME.
  2894. +WARNING:  If you use this under X windows,
  2895. +you should call `unfocus-frame' afterwards.
  2896. +
  2897. +(set-mouse-position FRAME X Y)Fset-mouse-pixel-position
  2898. +Move the mouse pointer to pixel position (X,Y) in FRAME.
  2899. +WARNING:  If you use this under X windows,
  2900. +you should call `unfocus-frame' afterwards.
  2901. +
  2902. +(set-mouse-pixel-position FRAME X Y)Fmake-frame-visible
  2903. +Make the frame FRAME visible (assuming it is an X-window).
  2904. +If omitted, FRAME defaults to the currently selected frame.
  2905. +
  2906. +(make-frame-visible &optional FRAME)Fmake-frame-invisible
  2907. +Make the frame FRAME invisible (assuming it is an X-window).
  2908. +If omitted, FRAME defaults to the currently selected frame.
  2909. +Normally you may not make FRAME invisible if all other frames are invisible,
  2910. +but if the second optional argument FORCE is non-nil, you may do so.
  2911. +
  2912. +(make-frame-invisible &optional FRAME FORCE)Ficonify-frame
  2913. +Make the frame FRAME into an icon.
  2914. +If omitted, FRAME defaults to the currently selected frame.
  2915. +
  2916. +(iconify-frame &optional FRAME)Fframe-visible-p
  2917. +Return t if FRAME is now "visible" (actually in use for display).
  2918. +A frame that is not "visible" is not updated and, if it works through
  2919. +a window system, it may not show at all.
  2920. +Return the symbol `icon' if frame is visible only as an icon.
  2921. +
  2922. +(frame-visible-p FRAME)Fvisible-frame-list
  2923. +Return a list of all frames now "visible" (being updated).
  2924. +
  2925. +(visible-frame-list)Fraise-frame
  2926. +Bring FRAME to the front, so it occludes any frames it overlaps.
  2927. +If FRAME is invisible, make it visible.
  2928. +If Emacs is displaying on an ordinary terminal or some other device which
  2929. +doesn't support multiple overlapping frames, this function does nothing.
  2930. +
  2931. +(raise-frame FRAME)Flower-frame
  2932. +Send FRAME to the back, so it is occluded by any frames that overlap it.
  2933. +If Emacs is displaying on an ordinary terminal or some other device which
  2934. +doesn't support multiple overlapping frames, this function does nothing.
  2935. +
  2936. +(lower-frame FRAME)Fredirect-frame-focus
  2937. +Arrange for keystrokes typed at FRAME to be sent to FOCUS-FRAME.
  2938. +In other words, switch-frame events caused by events in FRAME will
  2939. +request a switch to FOCUS-FRAME, and `last-event-frame' will be
  2940. +FOCUS-FRAME after reading an event typed at FRAME.
  2941. +
  2942. +If FOCUS-FRAME is omitted or nil, any existing redirection is
  2943. +cancelled, and the frame again receives its own keystrokes.
  2944. +
  2945. +Focus redirection is useful for temporarily redirecting keystrokes to
  2946. +a surrogate minibuffer frame when a frame doesn't have its own
  2947. +minibuffer window.
  2948. +
  2949. +A frame's focus redirection can be changed by select-frame.  If frame
  2950. +FOO is selected, and then a different frame BAR is selected, any
  2951. +frames redirecting their focus to FOO are shifted to redirect their
  2952. +focus to BAR.  This allows focus redirection to work properly when the
  2953. +user switches from one frame to another using `select-window'.
  2954. +
  2955. +This means that a frame whose focus is redirected to itself is treated
  2956. +differently from a frame whose focus is redirected to nil; the former
  2957. +is affected by select-frame, while the latter is not.
  2958. +
  2959. +The redirection lasts until `redirect-frame-focus' is called to change it.
  2960. +
  2961. +(redirect-frame-focus FRAME &optional FOCUS-FRAME)Fframe-focus
  2962. +Return the frame to which FRAME's keystrokes are currently being sent.
  2963. +This returns nil if FRAME's focus is not redirected.
  2964. +See `redirect-frame-focus'.
  2965. +
  2966. +(frame-focus FRAME)Fframe-parameters
  2967. +Return the parameters-alist of frame FRAME.
  2968. +It is a list of elements of the form (PARM . VALUE), where PARM is a symbol.
  2969. +The meaningful PARMs depend on the kind of frame.
  2970. +If FRAME is omitted, return information on the currently selected frame.
  2971. +
  2972. +(frame-parameters &optional FRAME)Fmodify-frame-parameters
  2973. +Modify the parameters of frame FRAME according to ALIST.
  2974. +ALIST is an alist of parameters to change and their new values.
  2975. +Each element of ALIST has the form (PARM . VALUE), where PARM is a symbol.
  2976. +The meaningful PARMs depend on the kind of frame; undefined PARMs are ignored.
  2977. +
  2978. +(modify-frame-parameters FRAME ALIST)Fframe-char-height
  2979. +Height in pixels of a line in the font in frame FRAME.
  2980. +If FRAME is omitted, the selected frame is used.
  2981. +For a terminal frame, the value is always 1.
  2982. +
  2983. +(frame-char-height &optional FRAME)Fframe-char-width
  2984. +Width in pixels of characters in the font in frame FRAME.
  2985. +If FRAME is omitted, the selected frame is used.
  2986. +The width is the same for all characters, because
  2987. +currently Emacs supports only fixed-width fonts.
  2988. +For a terminal screen, the value is always 1.
  2989. +
  2990. +(frame-char-width &optional FRAME)Fframe-pixel-height
  2991. +Return a FRAME's height in pixels.
  2992. +For a terminal frame, the result really gives the height in characters.
  2993. +If FRAME is omitted, the selected frame is used.
  2994. +
  2995. +(frame-pixel-height &optional FRAME)Fframe-pixel-width
  2996. +Return FRAME's width in pixels.
  2997. +For a terminal frame, the result really gives the width in characters.
  2998. +If FRAME is omitted, the selected frame is used.
  2999. +
  3000. +(frame-pixel-width &optional FRAME)Fset-frame-height
  3001. +Specify that the frame FRAME has LINES lines.
  3002. +Optional third arg non-nil means that redisplay should use LINES lines
  3003. +but that the idea of the actual height of the frame should not be changed.
  3004. +
  3005. +(set-frame-height FRAME ROWS &optional PRETEND)Fset-frame-width
  3006. +Specify that the frame FRAME has COLS columns.
  3007. +Optional third arg non-nil means that redisplay should use COLS columns
  3008. +but that the idea of the actual width of the frame should not be changed.
  3009. +
  3010. +(set-frame-width FRAME COLS &optional PRETEND)Fset-frame-size
  3011. +Sets size of FRAME to COLS by ROWS, measured in characters.
  3012. +
  3013. +(set-frame-size FRAME COLS ROWS)Fset-frame-position
  3014. +Sets position of FRAME in pixels to XOFFSET by YOFFSET.
  3015. +This is actually the position of the upper left corner of the frame.
  3016. +Negative values for XOFFSET or YOFFSET are interpreted relative to
  3017. +the rightmost or bottommost possible position (that stays within the screen).
  3018. +
  3019. +(set-frame-position FRAME XOFFSET YOFFSET)Vterminal-frame
  3020. +The initial frame-object, which represents Emacs's stdout.Vemacs-iconified
  3021. +Non-nil if all of emacs is iconified and frame updates are not needed.Vdefault-minibuffer-frame
  3022. +Minibufferless frames use this frame's minibuffer.
  3023. +
  3024. +Emacs cannot create minibufferless frames unless this is set to an
  3025. +appropriate surrogate.
  3026. +
  3027. +Emacs consults this variable only when creating minibufferless
  3028. +frames; once the frame is created, it sticks with its assigned
  3029. +minibuffer, no matter what this variable is set to.  This means that
  3030. +this variable doesn't necessarily say anything meaningful about the
  3031. +current set of frames, or where the minibuffer is currently being
  3032. +displayed.Vdefault-frame-alist
  3033. +Alist of default values for frame creation.
  3034. +These may be set in your init file, like this:
  3035. +  (setq default-frame-alist '((width . 80) (height . 55)))
  3036. +These override values given in window system configuration data, like
  3037. +X Windows' defaults database.
  3038. +For values specific to the first Emacs frame, see `initial-frame-alist'.
  3039. +For values specific to the separate minibuffer frame, see
  3040. +`minibuffer-frame-alist'.Fframe-height
  3041. +Return number of lines available for display on FRAME.
  3042. +If FRAME is omitted, describe the currently selected frame.
  3043. +
  3044. +(frame-height &optional FRAME)Fframe-width
  3045. +Return number of columns available for display on FRAME.
  3046. +If FRAME is omitted, describe the currently selected frame.
  3047. +
  3048. +(frame-width &optional FRAME)Fset-screen-height
  3049. +Tell redisplay that the screen has LINES lines.
  3050. +Optional second arg non-nil means that redisplay should use LINES lines
  3051. +but that the idea of the actual height of the screen should not be changed.
  3052. +
  3053. +(set-screen-height LINES &optional PRETEND)Fset-screen-width
  3054. +Tell redisplay that the screen has COLS columns.
  3055. +Optional second arg non-nil means that redisplay should use COLS columns
  3056. +but that the idea of the actual width of the screen should not be changed.
  3057. +
  3058. +(set-screen-width COLS &optional PRETEND)Fmouse-pixel-position
  3059. +Return a list (FRAME X . Y) giving the current mouse frame and position.
  3060. +The position is given in pixel units, where (0, 0) is the
  3061. +upper-left corner.
  3062. +If Emacs is running on a mouseless terminal or hasn't been programmed
  3063. +to read the mouse position, it returns the selected frame for FRAME
  3064. +and nil for X and Y.
  3065. +
  3066. +(mouse-pixel-position)Vterminal-frame
  3067. +The initial frame-object, which represents Emacs's stdout.Vdefault-frame-alist
  3068. +Alist of default values for frame creation.
  3069. +These may be set in your init file, like this:
  3070. +  (setq default-frame-alist '((width . 80) (height . 55)))
  3071. +These override values given in window system configuration data, like
  3072. +X Windows' defaults database.
  3073. +For values specific to the first Emacs frame, see `initial-frame-alist'.
  3074. +For values specific to the separate minibuffer frame, see
  3075. +`minibuffer-frame-alist'.Vglobal-mode-string
  3076. +String (or mode line construct) included (normally) in `mode-line-format'.Voverlay-arrow-position
  3077. +Marker for where to display an arrow on top of the buffer text.
  3078. +This must be the beginning of a line in order to work.
  3079. +See also `overlay-arrow-string'.Voverlay-arrow-string
  3080. +String to display as an arrow.  See also `overlay-arrow-position'.Vscroll-step
  3081. +*The number of lines to try scrolling a window by when point moves out.
  3082. +If that fails to bring point back on frame, point is centered instead.
  3083. +If this is zero, point is always centered after it moves off frame.Vdebug-end-pos
  3084. +Don't askVtruncate-partial-width-windows
  3085. +*Non-nil means truncate lines in all windows less than full frame wide.Vmode-line-inverse-video
  3086. +*Non-nil means use inverse video for the mode line.Vline-number-display-limit
  3087. +*Maximum buffer size for which line number should be displayed.Vhighlight-nonselected-windows
  3088. +*Non-nil means highlight region even in nonselected windows.Fwindowp
  3089. +Returns t if OBJ is a window.
  3090. +
  3091. +(windowp OBJ)Fwindow-live-p
  3092. +Returns t if OBJ is a window which is currently visible.
  3093. +
  3094. +(window-live-p OBJ)Fselected-window
  3095. +Return the window that the cursor now appears in and commands apply to.
  3096. +
  3097. +(selected-window)Fminibuffer-window
  3098. +Return the window used now for minibuffers.
  3099. +If the optional argument FRAME is specified, return the minibuffer window
  3100. +used by that frame.
  3101. +
  3102. +(minibuffer-window &optional FRAME)Fwindow-minibuffer-p
  3103. +Returns non-nil if WINDOW is a minibuffer window.
  3104. +
  3105. +(window-minibuffer-p &optional WINDOW)Fpos-visible-in-window-p
  3106. +Return t if position POS is currently on the frame in WINDOW.
  3107. +Returns nil if that position is scrolled vertically out of view.
  3108. +POS defaults to point; WINDOW, to the selected window.
  3109. +
  3110. +(pos-visible-in-window-p &optional POS WINDOW)Fwindow-buffer
  3111. +Return the buffer that WINDOW is displaying.
  3112. +
  3113. +(window-buffer &optional WINDOW)Fwindow-height
  3114. +Return the number of lines in WINDOW (including its mode line).
  3115. +
  3116. +(window-height &optional WINDOW)Fwindow-width
  3117. +Return the number of display columns in WINDOW.
  3118. +This is the width that is usable columns available for text in WINDOW.
  3119. +If you want to find out how many columns WINDOW takes up,
  3120. +use  (let ((edges (window-edges))) (- (nth 2 edges) (nth 0 edges))).
  3121. +
  3122. +(window-width &optional WINDOW)Fwindow-hscroll
  3123. +Return the number of columns by which WINDOW is scrolled from left margin.
  3124. +
  3125. +(window-hscroll &optional WINDOW)Fset-window-hscroll
  3126. +Set number of columns WINDOW is scrolled from left margin to NCOL.
  3127. +NCOL should be zero or positive.
  3128. +
  3129. +(set-window-hscroll WINDOW NCOL)Fwindow-edges
  3130. +Return a list of the edge coordinates of WINDOW.
  3131. +(LEFT TOP RIGHT BOTTOM), all relative to 0, 0 at top left corner of frame.
  3132. +RIGHT is one more than the rightmost column used by WINDOW,
  3133. +and BOTTOM is one more than the bottommost row used by WINDOW
  3134. + and its mode-line.
  3135. +
  3136. +(window-edges &optional WINDOW)Fcoordinates-in-window-p
  3137. +Return non-nil if COORDINATES are in WINDOW.
  3138. +COORDINATES is a cons of the form (X . Y), X and Y being distances
  3139. +measured in characters from the upper-left corner of the frame.
  3140. +(0 .  0) denotes the character in the upper left corner of the
  3141. +frame.
  3142. +If COORDINATES are in the text portion of WINDOW,
  3143. +   the coordinates relative to the window are returned.
  3144. +If they are in the mode line of WINDOW, `mode-line' is returned.
  3145. +If they are on the border between WINDOW and its right sibling,
  3146. +   `vertical-line' is returned.
  3147. +
  3148. +(coordinates-in-window-p COORDINATES WINDOW)Fwindow-at
  3149. +Return window containing coordinates X and Y on FRAME.
  3150. +If omitted, FRAME defaults to the currently selected frame.
  3151. +The top left corner of the frame is considered to be row 0,
  3152. +column 0.
  3153. +
  3154. +(window-at X Y &optional FRAME)Fwindow-point
  3155. +Return current value of point in WINDOW.
  3156. +For a nonselected window, this is the value point would have
  3157. +if that window were selected.
  3158. +
  3159. +Note that, when WINDOW is the selected window and its buffer
  3160. +is also currently selected, the value returned is the same as (point).
  3161. +It would be more strictly correct to return the `top-level' value
  3162. +of point, outside of any save-excursion forms.
  3163. +But that is hard to define.
  3164. +
  3165. +(window-point &optional WINDOW)Fwindow-start
  3166. +Return position at which display currently starts in WINDOW.
  3167. +
  3168. +(window-start &optional WINDOW)Fwindow-end
  3169. +Return position at which display currently ends in WINDOW.
  3170. +This is updated by redisplay, when it runs to completion.
  3171. +Simply changing the buffer text or setting `window-start'
  3172. +does not update this value.
  3173. +
  3174. +(window-end &optional WINDOW)Fset-window-point
  3175. +Make point value in WINDOW be at position POS in WINDOW's buffer.
  3176. +
  3177. +(set-window-point WINDOW POS)Fset-window-start
  3178. +Make display in WINDOW start at position POS in WINDOW's buffer.
  3179. +Optional third arg NOFORCE non-nil inhibits next redisplay
  3180. +from overriding motion of point in order to display at this exact start.
  3181. +
  3182. +(set-window-start WINDOW POS &optional NOFORCE)Fwindow-dedicated-p
  3183. +Return WINDOW's dedicated object, usually t or nil.
  3184. +See also `set-window-dedicated-p'.
  3185. +
  3186. +(window-dedicated-p WINDOW)Fset-window-dedicated-p
  3187. +Control whether WINDOW is dedicated to the buffer it displays.
  3188. +If it is dedicated, Emacs will not automatically change
  3189. +which buffer appears in it.
  3190. +The second argument is the new value for the dedication flag;
  3191. +non-nil means yes.
  3192. +
  3193. +(set-window-dedicated-p WINDOW ARG)Fwindow-display-table
  3194. +Return the display-table that WINDOW is using.
  3195. +
  3196. +(window-display-table &optional WINDOW)Fset-window-display-table
  3197. +Set WINDOW's display-table to TABLE.
  3198. +
  3199. +(set-window-display-table WINDOW TABLE)Fdelete-window
  3200. +Remove WINDOW from the display.  Default is selected window.
  3201. +
  3202. +(delete-window &optional WINDOW)Fnext-window
  3203. +Return next window after WINDOW in canonical ordering of windows.
  3204. +If omitted, WINDOW defaults to the selected window.
  3205. +
  3206. +Optional second arg MINIBUF t means count the minibuffer window even
  3207. +if not active.  MINIBUF nil or omitted means count the minibuffer iff
  3208. +it is active.  MINIBUF neither t nor nil means not to count the
  3209. +minibuffer even if it is active.
  3210. +
  3211. +Several frames may share a single minibuffer; if the minibuffer
  3212. +counts, all windows on all frames that share that minibuffer count
  3213. +too.  Therefore, `next-window' can be used to iterate through the
  3214. +set of windows even when the minibuffer is on another frame.  If the
  3215. +minibuffer does not count, only windows from WINDOW's frame count.
  3216. +
  3217. +Optional third arg ALL-FRAMES t means include windows on all frames.
  3218. +ALL-FRAMES nil or omitted means cycle within the frames as specified
  3219. +above.  ALL-FRAMES = `visible' means include windows on all visible frames.
  3220. +ALL-FRAMES = 0 means include windows on all visible and iconified frames.
  3221. +Anything else means restrict to WINDOW's frame.
  3222. +
  3223. +If you use consistent values for MINIBUF and ALL-FRAMES, you can use
  3224. +`next-window' to iterate through the entire cycle of acceptable
  3225. +windows, eventually ending up back at the window you started with.
  3226. +`previous-window' traverses the same cycle, in the reverse order.
  3227. +
  3228. +(next-window &optional WINDOW MINIBUF ALL-FRAMES)Fprevious-window
  3229. +Return the window preceeding WINDOW in canonical ordering of windows.
  3230. +If omitted, WINDOW defaults to the selected window.
  3231. +
  3232. +Optional second arg MINIBUF t means count the minibuffer window even
  3233. +if not active.  MINIBUF nil or omitted means count the minibuffer iff
  3234. +it is active.  MINIBUF neither t nor nil means not to count the
  3235. +minibuffer even if it is active.
  3236. +
  3237. +Several frames may share a single minibuffer; if the minibuffer
  3238. +counts, all windows on all frames that share that minibuffer count
  3239. +too.  Therefore, `previous-window' can be used to iterate through
  3240. +the set of windows even when the minibuffer is on another frame.  If
  3241. +the minibuffer does not count, only windows from WINDOW's frame count
  3242. +
  3243. +Optional third arg ALL-FRAMES t means include windows on all frames.
  3244. +ALL-FRAMES nil or omitted means cycle within the frames as specified
  3245. +above.  ALL-FRAMES = `visible' means include windows on all visible frames.
  3246. +ALL-FRAMES = 0 means include windows on all visible and iconified frames.
  3247. +Anything else means restrict to WINDOW's frame.
  3248. +
  3249. +If you use consistent values for MINIBUF and ALL-FRAMES, you can use
  3250. +`previous-window' to iterate through the entire cycle of acceptable
  3251. +windows, eventually ending up back at the window you started with.
  3252. +`next-window' traverses the same cycle, in the reverse order.
  3253. +
  3254. +(previous-window &optional WINDOW MINIBUF ALL-FRAMES)Fother-window
  3255. +Select the ARG'th different window on this frame.
  3256. +All windows on current frame are arranged in a cyclic order.
  3257. +This command selects the window ARG steps away in that order.
  3258. +A negative ARG moves in the opposite order.  If the optional second
  3259. +argument ALL_FRAMES is non-nil, cycle through all frames.
  3260. +
  3261. +(other-window N &optional ALL-FRAMES)Fget-lru-window
  3262. +Return the window least recently selected or used for display.
  3263. +If optional argument FRAME is `visible', search all visible frames.
  3264. +If FRAME is 0, search all visible and iconified frames.
  3265. +If FRAME is t, search all frames.
  3266. +If FRAME is nil, search only the selected frame.
  3267. +If FRAME is a frame, search only that frame.
  3268. +
  3269. +(get-lru-window &optional FRAME)Fget-largest-window
  3270. +Return the largest window in area.
  3271. +If optional argument FRAME is `visible', search all visible frames.
  3272. +If FRAME is 0, search all visible and iconified frames.
  3273. +If FRAME is t, search all frames.
  3274. +If FRAME is nil, search only the selected frame.
  3275. +If FRAME is a frame, search only that frame.
  3276. +
  3277. +(get-largest-window &optional FRAME)Fget-buffer-window
  3278. +Return a window currently displaying BUFFER, or nil if none.
  3279. +If optional argument FRAME is `visible', search all visible frames.
  3280. +If optional argument FRAME is 0, search all visible and iconified frames.
  3281. +If FRAME is t, search all frames.
  3282. +If FRAME is nil, search only the selected frame.
  3283. +If FRAME is a frame, search only that frame.
  3284. +
  3285. +(get-buffer-window BUFFER &optional FRAME)Fdelete-other-windows
  3286. +Make WINDOW (or the selected window) fill its frame.
  3287. +Only the frame WINDOW is on is affected.
  3288. +This function tries to reduce display jumps
  3289. +by keeping the text previously visible in WINDOW
  3290. +in the same place on the frame.  Doing this depends on
  3291. +the value of (window-start WINDOW), so if calling this function
  3292. +in a program gives strange scrolling, make sure the window-start
  3293. +value is reasonable when this function is called.
  3294. +
  3295. +(delete-other-windows &optional WINDOW)Fdelete-windows-on
  3296. +Delete all windows showing BUFFER.
  3297. +Optional second argument FRAME controls which frames are affected.
  3298. +If nil or omitted, delete all windows showing BUFFER in any frame.
  3299. +If t, delete only windows showing BUFFER in the selected frame.
  3300. +If `visible', delete all windows showing BUFFER in any visible frame.
  3301. +If a frame, delete only windows showing BUFFER in that frame.
  3302. +
  3303. +(delete-windows-on BUFFER &optional FRAME)Freplace-buffer-in-windows
  3304. +Replace BUFFER with some other buffer in all windows showing it.
  3305. +
  3306. +(replace-buffer-in-windows BUFFER)Fset-window-buffer
  3307. +Make WINDOW display BUFFER as its contents.
  3308. +BUFFER can be a buffer or buffer name.
  3309. +
  3310. +(set-window-buffer WINDOW BUFFER)Fselect-window
  3311. +Select WINDOW.  Most editing will apply to WINDOW's buffer.
  3312. +The main editor command loop selects the buffer of the selected window
  3313. +before each command.
  3314. +
  3315. +(select-window WINDOW)Fdisplay-buffer
  3316. +Make BUFFER appear in some window but don't select it.
  3317. +BUFFER can be a buffer or a buffer name.
  3318. +If BUFFER is shown already in some window, just use that one,
  3319. +unless the window is the selected window and the optional second
  3320. +argument NOT-THIS-WINDOW is non-nil (interactively, with prefix arg).
  3321. +If `pop-up-frames' is non-nil, make a new frame if no window shows BUFFER.
  3322. +Returns the window displaying BUFFER.
  3323. +
  3324. +(display-buffer BUFFER &optional NOT-THIS-WINDOW)Fsplit-window
  3325. +Split WINDOW, putting SIZE lines in the first of the pair.
  3326. +WINDOW defaults to selected one and SIZE to half its size.
  3327. +If optional third arg HOR-FLAG is non-nil, split side by side
  3328. +and put SIZE columns in the first of the pair.
  3329. +
  3330. +(split-window &optional WINDOW CHSIZE HORFLAG)Fenlarge-window
  3331. +Make current window ARG lines bigger.
  3332. +From program, optional second arg non-nil means grow sideways ARG columns.
  3333. +
  3334. +(enlarge-window N &optional SIDE)Fshrink-window
  3335. +Make current window ARG lines smaller.
  3336. +From program, optional second arg non-nil means shrink sideways ARG columns.
  3337. +
  3338. +(shrink-window N &optional SIDE)Fscroll-up
  3339. +Scroll text of current window upward ARG lines; or near full screen if no ARG.
  3340. +A near full screen is `next-screen-context-lines' less than a full screen.
  3341. +Negative ARG means scroll downward.
  3342. +When calling from a program, supply a number as argument or nil.
  3343. +
  3344. +(scroll-up &optional N)Fscroll-down
  3345. +Scroll text of current window downward ARG lines; or near full screen if no ARG.
  3346. +A near full screen is `next-screen-context-lines' less than a full screen.
  3347. +Negative ARG means scroll upward.
  3348. +When calling from a program, supply a number as argument or nil.
  3349. +
  3350. +(scroll-down &optional N)Fother-window-for-scrolling
  3351. +Return the other window for "other window scroll" commands.
  3352. +If in the minibuffer, `minibuffer-scroll-window' if non-nil
  3353. +specifies the window.
  3354. +If `other-window-scroll-buffer' is non-nil, a window
  3355. +showing that buffer is used.
  3356. +
  3357. +(other-window-for-scrolling)Fscroll-other-window
  3358. +Scroll next window upward ARG lines; or near full screen if no ARG.
  3359. +The next window is the one below the current one; or the one at the top
  3360. +if the current one is at the bottom.  Negative ARG means scroll downward.
  3361. +When calling from a program, supply a number as argument or nil.
  3362. +
  3363. +If in the minibuffer, `minibuffer-scroll-window' if non-nil
  3364. +specifies the window to scroll.
  3365. +If `other-window-scroll-buffer' is non-nil, scroll the window
  3366. +showing that buffer, popping the buffer up if necessary.
  3367. +
  3368. +(scroll-other-window &optional N)Fscroll-left
  3369. +Scroll selected window display ARG columns left.
  3370. +Default for ARG is window width minus 2.
  3371. +
  3372. +(scroll-left &optional ARG)Fscroll-right
  3373. +Scroll selected window display ARG columns right.
  3374. +Default for ARG is window width minus 2.
  3375. +
  3376. +(scroll-right &optional ARG)Frecenter
  3377. +Center point in window and redisplay frame.  With ARG, put point on line ARG.
  3378. +The desired position of point is always relative to the current window.
  3379. +Just C-u as prefix means put point in the center of the window.
  3380. +No arg (i.e., it is nil) erases the entire frame and then
  3381. +redraws with point in the center of the current window.
  3382. +
  3383. +(recenter &optional N)Fmove-to-window-line
  3384. +Position point relative to window.
  3385. +With no argument, position point at center of window.
  3386. +An argument specifies frame line; zero means top of window,
  3387. +negative means relative to bottom of window.
  3388. +
  3389. +(move-to-window-line ARG)Fwindow-configuration-p
  3390. +T if OBJECT is a window-configration object.
  3391. +
  3392. +(window-configuration-p OBJ)Fset-window-configuration
  3393. +Set the configuration of windows and buffers as specified by CONFIGURATION.
  3394. +CONFIGURATION must be a value previously returned
  3395. +by `current-window-configuration' (which see).
  3396. +
  3397. +(set-window-configuration CONFIGURATION)Fcurrent-window-configuration
  3398. +Return an object representing the current window configuration of FRAME.
  3399. +If FRAME is nil or omitted, use the selected frame.
  3400. +This describes the number of windows, their sizes and current buffers,
  3401. +and for each displayed buffer, where display starts, and the positions of
  3402. +point and mark.  An exception is made for point in the current buffer:
  3403. +its value is -not- saved.
  3404. +This also records the currently selected frame, and FRAME's focus
  3405. +redirection (see `redirect-frame-focus').
  3406. +
  3407. +(current-window-configuration &optional FRAME)Fsave-window-excursion
  3408. +Execute body, preserving window sizes and contents.
  3409. +Restore which buffer appears in which window, where display starts,
  3410. +and the value of point and mark for each window.
  3411. +Also restore which buffer is current.
  3412. +But do not preserve point in the current buffer.
  3413. +Does not restore the value of point in current buffer.Vtemp-buffer-show-function
  3414. +Non-nil means call as function to display a help buffer.
  3415. +Used by `with-output-to-temp-buffer'.Vdisplay-buffer-function
  3416. +If non-nil, function to call to handle `display-buffer'.
  3417. +It will receive two args, the buffer and a flag which if non-nil means
  3418. + that the currently selected window is not acceptable.
  3419. +Commands such as `switch-to-buffer-other-window' and `find-file-other-window'
  3420. +work using this function.Vminibuffer-scroll-window
  3421. +Non-nil means it is the window that C-M-v in minibuffer should scroll.Vother-window-scroll-buffer
  3422. +If non-nil, this is a buffer and \[scroll-other-window] should scroll its window.Vpop-up-frames
  3423. +*Non-nil means `display-buffer' should make a separate frame.Vpop-up-frame-function
  3424. +Function to call to handle automatic new frame creation.
  3425. +It is called with no arguments and should return a newly created frame.
  3426. +
  3427. +A typical value might be `(lambda () (new-frame pop-up-frame-alist))'
  3428. +where `pop-up-frame-alist' would hold the default frame parameters.Vspecial-display-buffer-names
  3429. +*List of buffer names that should have their own special frames.
  3430. +Displaying a buffer whose name is in this list makes a special frame for it
  3431. +using `special-display-function'.  See also `special-display-regexps'.Vspecial-display-regexps
  3432. +*List of regexps saying which buffers should have their own special frames.
  3433. +If a buffer name matches one of these regexps, it gets its own frame.
  3434. +Displaying a buffer whose name is in this list makes a special frame for it
  3435. +using `special-display-function'.  See also `special-display-buffer-names'.Vspecial-display-function
  3436. +Function to call to make a new frame for a special buffer.
  3437. +It is called with one argument, the buffer,
  3438. +and should return a window displaying that buffer.
  3439. +The default value makes a separate frame for the buffer,
  3440. +using `special-display-alist' to specify the frame parameters.
  3441. +
  3442. +A buffer is special if its is listed in `special-display-buffer-names'
  3443. +or matches a regexp in `special-display-regexps'.Vpop-up-windows
  3444. +*Non-nil means display-buffer should make new windows.Vnext-screen-context-lines
  3445. +*Number of lines of continuity when scrolling by screenfuls.Vsplit-height-threshold
  3446. +*display-buffer would prefer to split the largest window if this large.
  3447. +If there is only one window, it is split regardless of this value.Vwindow-min-height
  3448. +*Delete any window less than this tall (including its mode line).Vwindow-min-width
  3449. +*Delete any window less than this wide.Vsystem-uses-terminfo
  3450. +Non-nil means the system uses terminfo rather than termcap.
  3451. +This variable can be used by terminal emulator packages.Finvocation-name
  3452. +Return the program name that was used to run Emacs.
  3453. +Any directory names are omitted.
  3454. +
  3455. +(invocation-name)Finvocation-directory
  3456. +Return the directory name in which the Emacs executable was located
  3457. +
  3458. +(invocation-directory)Fkill-emacs
  3459. +Exit the Emacs job and kill it.
  3460. +If ARG is an integer, return ARG as the exit program code.
  3461. +If ARG is a  string, stuff it as keyboard input.
  3462. +
  3463. +The value of `kill-emacs-hook', if not void,
  3464. +is a list of functions (of no args),
  3465. +all of which are called before Emacs is actually killed.
  3466. +
  3467. +(kill-emacs &optional ARG)Fdump-emacs-data
  3468. +Dump current state of Emacs into data file FILENAME.
  3469. +This function exists on systems that use HAVE_SHM.
  3470. +
  3471. +(dump-emacs-data INTONAME)Fdump-emacs
  3472. +Dump current state of Emacs into executable file FILENAME.
  3473. +Take symbols from SYMFILE (presumably the file you executed to run Emacs).
  3474. +This is used in the file `loadup.el' when building Emacs.
  3475. +
  3476. +Bind `command-line-processed' to nil before dumping,
  3477. +if you want the dumped Emacs to process its command line
  3478. +and announce itself normally when it is run.
  3479. +
  3480. +(dump-emacs INTONAME SYMNAME)Vcommand-line-args
  3481. +Args passed by shell to Emacs, as a list of strings.Vsystem-type
  3482. +Value is symbol indicating type of operating system you are using.Vsystem-configuration
  3483. +Value is string indicating configuration Emacs was built for.Vnoninteractive
  3484. +Non-nil means Emacs is running without interactive terminal.Vkill-emacs-hook
  3485. +Hook to be run whenever kill-emacs is called.
  3486. +Since kill-emacs may be invoked when the terminal is disconnected (or
  3487. +in other similar situations), functions placed on this hook should not
  3488. +expect to be able to interact with the user.Vemacs-priority
  3489. +Priority for Emacs to run at.
  3490. +This value is effective only if set before Emacs is dumped,
  3491. +and only if the Emacs executable is installed with setuid to permit
  3492. +it to change priority.  (Emacs sets its uid back to the real uid.)
  3493. +Currently, you need to define SET_EMACS_PRIORITY in `config.h'
  3494. +before you compile Emacs, to enable the code for this feature.Vinvocation-name
  3495. +The program name that was used to run Emacs.
  3496. +Any directory names are omitted.Vinvocation-directory
  3497. +The directory in which the Emacs executable was found, to run it.
  3498. +The value is nil if that directory's name is not known.Vinstallation-directory
  3499. +A directory within which to look for the `lib-src' and `etc' directories.
  3500. +This is non-nil when we can't find those directories in their standard
  3501. +installed locations, but we can find them
  3502. +near where the Emacs executable was found.Frecursive-edit
  3503. +Invoke the editor command loop recursively.
  3504. +To get out of the recursive edit, a command can do `(throw 'exit nil)';
  3505. +that tells this function to return.
  3506. +Alternately, `(throw 'exit t)' makes this function signal an error.
  3507. +This function is called by the editor initialization to begin editing.
  3508. +
  3509. +(recursive-edit)Ftop-level
  3510. +Exit all recursive editing levels.
  3511. +
  3512. +(top-level)Fexit-recursive-edit
  3513. +Exit from the innermost recursive edit or minibuffer.
  3514. +
  3515. +(exit-recursive-edit)Fabort-recursive-edit
  3516. +Abort the command that requested this recursive edit or minibuffer input.
  3517. +
  3518. +(abort-recursive-edit)Ftrack-mouse
  3519. +Evaluate BODY with mouse movement events enabled.
  3520. +Within a `track-mouse' form, mouse motion generates input events that
  3521. +you can read with `read-event'.
  3522. +Normally, mouse motion is ignored.Fread-key-sequence
  3523. +Read a sequence of keystrokes and return as a string or vector.
  3524. +The sequence is sufficient to specify a non-prefix command in the
  3525. +current local and global maps.
  3526. +
  3527. +First arg PROMPT is a prompt string.  If nil, do not prompt specially.
  3528. +Second (optional) arg CONTINUE-ECHO, if non-nil, means this key echos
  3529. +as a continuation of the previous key.
  3530. +
  3531. +A C-g typed while in this function is treated like any other character,
  3532. +and `quit-flag' is not set.
  3533. +
  3534. +If the key sequence starts with a mouse click, then the sequence is read
  3535. +using the keymaps of the buffer of the window clicked in, not the buffer
  3536. +of the selected window as normal.
  3537. +
  3538. +`read-key-sequence' drops unbound button-down events, since you normally
  3539. +only care about the click or drag events which follow them.  If a drag
  3540. +or multi-click event is unbound, but the corresponding click event would
  3541. +be bound, `read-key-sequence' turns the event into a click event at the
  3542. +drag's starting position.  This means that you don't have to distinguish
  3543. +between click and drag, double, or triple events unless you want to.
  3544. +
  3545. +`read-key-sequence' prefixes mouse events on mode lines, the vertical
  3546. +lines separating windows, and scroll bars with imaginary keys
  3547. +`mode-line', `vertical-line', and `vertical-scroll-bar'.
  3548. +
  3549. +If the user switches frames in the middle of a key sequence, the
  3550. +frame-switch event is put off until after the current key sequence.
  3551. +
  3552. +`read-key-sequence' checks `function-key-map' for function key
  3553. +sequences, where they wouldn't conflict with ordinary bindings.  See
  3554. +`function-key-map' for more details.
  3555. +
  3556. +(read-key-sequence PROMPT &optional CONTINUE-ECHO)Fcommand-execute
  3557. +Execute CMD as an editor command.
  3558. +CMD must be a symbol that satisfies the `commandp' predicate.
  3559. +Optional second arg RECORD-FLAG non-nil
  3560. +means unconditionally put this command in `command-history'.
  3561. +Otherwise, that is done only if an arg is read using the minibuffer.
  3562. +
  3563. +(command-execute CMD &optional RECORD)Fexecute-extended-command
  3564. +Read function name, then read its arguments and call it.
  3565. +
  3566. +(execute-extended-command PREFIXARG)Finput-pending-p
  3567. +T if command input is currently available with no waiting.
  3568. +Actually, the value is nil only if we can be sure that no input is available.
  3569. +
  3570. +(input-pending-p)Frecent-keys
  3571. +Return vector of last 100 events, not counting those from keyboard macros.
  3572. +
  3573. +(recent-keys)Fthis-command-keys
  3574. +Return the key sequence that invoked this command.
  3575. +The value is a string or a vector.
  3576. +
  3577. +(this-command-keys)Frecursion-depth
  3578. +Return the current depth in recursive edits.
  3579. +
  3580. +(recursion-depth)Fopen-dribble-file
  3581. +Start writing all keyboard characters to a dribble file called FILE.
  3582. +If FILE is nil, close any open dribble file.
  3583. +
  3584. +(open-dribble-file FILE)Fdiscard-input
  3585. +Discard the contents of the terminal input buffer.
  3586. +Also cancel any kbd macro being defined.
  3587. +
  3588. +(discard-input)Fsuspend-emacs
  3589. +Stop Emacs and return to superior process.  You can resume later.
  3590. +If `cannot-suspend' is non-nil, or if the system doesn't support job
  3591. +control, run a subshell instead.
  3592. +
  3593. +If optional arg STUFFSTRING is non-nil, its characters are stuffed
  3594. +to be read as terminal input by Emacs's parent, after suspension.
  3595. +
  3596. +Before suspending, call the functions in `suspend-hook' with no args.
  3597. +If any of them returns nil, don't call the rest and don't suspend.
  3598. +Otherwise, suspend normally and after resumption run the normal hook
  3599. +`suspend-resume-hook' if that is bound and non-nil.
  3600. +
  3601. +Some operating systems cannot stop the Emacs process and resume it later.
  3602. +On such systems, Emacs starts a subshell instead of suspending.
  3603. +
  3604. +(suspend-emacs &optional STUFFSTRING)Fset-input-mode
  3605. +Set mode of reading keyboard input.
  3606. +First arg INTERRUPT non-nil means use input interrupts;
  3607. + nil means use CBREAK mode.
  3608. +Second arg FLOW non-nil means use ^S/^Q flow control for output to terminal
  3609. + (no effect except in CBREAK mode).
  3610. +Third arg META t means accept 8-bit input (for a Meta key).
  3611. + META nil means ignore the top bit, on the assumption it is parity.
  3612. + Otherwise, accept 8-bit input and don't use the top bit for Meta.
  3613. +Optional fourth arg QUIT if non-nil specifies character to use for quitting.
  3614. +See also `current-input-mode'.
  3615. +
  3616. +(set-input-mode INTERRUPT FLOW META &optional QUIT)Fcurrent-input-mode
  3617. +Return information about the way Emacs currently reads keyboard input.
  3618. +The value is a list of the form (INTERRUPT FLOW META QUIT), where
  3619. +  INTERRUPT is non-nil if Emacs is using interrupt-driven input; if
  3620. +    nil, Emacs is using CBREAK mode.
  3621. +  FLOW is non-nil if Emacs uses ^S/^Q flow control for output to the
  3622. +    terminal; this does not apply if Emacs uses interrupt-driven input.
  3623. +  META is t if accepting 8-bit input with 8th bit as Meta flag.
  3624. +    META nil means ignoring the top bit, on the assumption it is parity.
  3625. +    META is neither t nor nil if accepting 8-bit input and using
  3626. +    all 8 bits as the character code.
  3627. +  QUIT is the character Emacs currently uses to quit.
  3628. +The elements of this list correspond to the arguments of
  3629. +`set-input-mode'.
  3630. +
  3631. +(current-input-mode)Vlast-command-char
  3632. +Last input event that was part of a command.Vlast-command-event
  3633. +Last input event that was part of a command.Vlast-nonmenu-event
  3634. +Last input event in a command, except for mouse menu events.
  3635. +Mouse menus give back keys that don't look like mouse events;
  3636. +this variable holds the actual mouse event that led to the menu,
  3637. +so that you can determine whether the command was run by mouse or not.Vlast-input-char
  3638. +Last input event.Vlast-input-event
  3639. +Last input event.Vunread-command-events
  3640. +List of objects to be read as next command input events.Vunread-command-char
  3641. +If not -1, an object to be read as next command input event.Vmeta-prefix-char
  3642. +Meta-prefix character code.  Meta-foo as command input
  3643. +turns into this character followed by foo.Vlast-command
  3644. +The last command executed.  Normally a symbol with a function definition,
  3645. +but can be whatever was found in the keymap, or whatever the variable
  3646. +`this-command' was set to by that command.Vthis-command
  3647. +The command now being executed.
  3648. +The command can set this variable; whatever is put here
  3649. +will be in `last-command' during the following command.Vauto-save-interval
  3650. +*Number of keyboard input characters between auto-saves.
  3651. +Zero means disable autosaving due to number of characters typed.Vauto-save-timeout
  3652. +*Number of seconds idle time before auto-save.
  3653. +Zero or nil means disable auto-saving due to idleness.
  3654. +After auto-saving due to this many seconds of idle time,
  3655. +Emacs also does a garbage collection if that seems to be warranted.Vecho-keystrokes
  3656. +*Nonzero means echo unfinished commands after this many seconds of pause.Vpolling-period
  3657. +*Interval between polling for input during Lisp execution.
  3658. +The reason for polling is to make C-g work to stop a running program.
  3659. +Polling is needed only when using X windows and SIGIO does not work.
  3660. +Polling is automatically disabled in all other cases.Vdouble-click-time
  3661. +*Maximum time between mouse clicks to make a double-click.
  3662. +Measured in milliseconds.  nil means disable double-click recognition;
  3663. +t means double-clicks have no time limit and are detected
  3664. +by position only.Vnum-input-keys
  3665. +*Number of complete keys read from the keyboard so far.Vlast-event-frame
  3666. +*The frame in which the most recently read event occurred.
  3667. +If the last event came from a keyboard macro, this is set to `macro'.Vhelp-char
  3668. +Character to recognize as meaning Help.
  3669. +When it is read, do `(eval help-form)', and display result if it's a string.
  3670. +If the value of `help-form' is nil, this char can be read normally.Vhelp-form
  3671. +Form to execute when character `help-char' is read.
  3672. +If the form returns a string, that string is displayed.
  3673. +If `help-form' is nil, the help char is not recognized.Vprefix-help-command
  3674. +Command to run when `help-char' character follows a prefix key.
  3675. +This command is used only when there is no actual binding
  3676. +for that character after that prefix key.Vtop-level
  3677. +Form to evaluate when Emacs starts up.
  3678. +Useful to set before you dump a modified Emacs.Vkeyboard-translate-table
  3679. +String used as translate table for keyboard input, or nil.
  3680. +Each character is looked up in this string and the contents used instead.
  3681. +If string is of length N, character codes N and up are untranslated.Vkey-translation-map
  3682. +Keymap of key translations that can override keymaps.
  3683. +This keymap works like `function-key-map', but comes after that,
  3684. +and applies even for keys that have ordinary bindings.Vcannot-suspend
  3685. +Non-nil means to always spawn a subshell instead of suspending,
  3686. +even if the operating system has support for stopping a process.Vmenu-prompting
  3687. +Non-nil means prompt with menus when appropriate.
  3688. +This is done when reading from a keymap that has a prompt string,
  3689. +for elements that have prompt strings.
  3690. +The menu is displayed on the screen
  3691. +if X menus were enabled at configuration
  3692. +time and the previous event was a mouse click prefix key.
  3693. +Otherwise, menu prompting uses the echo area.Vmenu-prompt-more-char
  3694. +Character to see next line of menu prompt.
  3695. +Type this character while in a menu prompt to rotate around the lines of it.Vextra-keyboard-modifiers
  3696. +A mask of additional modifier keys to use with every keyboard character.
  3697. +Emacs applies the modifiers of the character stored here to each keyboard
  3698. +character it reads.  For example, after evaluating the expression
  3699. +    (setq extra-keyboard-modifiers ?C-x)
  3700. +all input characters will have the control modifier applied to them.
  3701. +
  3702. +Note that the character ?C-@, equivalent to the integer zero, does
  3703. +not count as a control character; rather, it counts as a character
  3704. +with no modifiers; thus, setting `extra-keyboard-modifiers' to zero
  3705. +cancels any modification.Vdeactivate-mark
  3706. +If an editing command sets this to t, deactivate the mark afterward.
  3707. +The command loop sets this to nil before each command,
  3708. +and tests the value when the command returns.
  3709. +Buffer modification stores t in this variable.Vcommand-hook-internal
  3710. +Temporary storage of pre-command-hook or post-command-hook.Vpre-command-hook
  3711. +Normal hook run before each command is executed.
  3712. +While the hook is run, its value is temporarily set to nil
  3713. +to avoid an unbreakable infinite loop if a hook function gets an error.
  3714. +As a result, a hook function cannot straightforwardly alter the value of
  3715. +`pre-command-hook'.  See the Emacs Lisp manual for a way of
  3716. +implementing hook functions that alter the set of hook functions.Vpost-command-hook
  3717. +Normal hook run after each command is executed.
  3718. +While the hook is run, its value is temporarily set to nil
  3719. +to avoid an unbreakable infinite loop if a hook function gets an error.
  3720. +As a result, a hook function cannot straightforwardly alter the value of
  3721. +`post-command-hook'.  See the Emacs Lisp manual for a way of
  3722. +implementing hook functions that alter the set of hook functions.Vlucid-menu-bar-dirty-flag
  3723. +t means menu bar, specified Lucid style, needs to be recomputed.Vmenu-bar-final-items
  3724. +List of menu bar items to move to the end of the menu bar.
  3725. +The elements of the list are event types that may have menu bar bindings.Voverriding-local-map
  3726. +Keymap that overrides all other local keymaps.
  3727. +If this variable is non-nil, it is used as a keymap instead of the
  3728. +buffer's local map, and the minor mode keymaps and text property keymaps.Vtrack-mouse
  3729. +*Non-nil means generate motion events for mouse motion.Vsystem-key-alist
  3730. +Alist of system-specific X windows key symbols.
  3731. +Each element should have the form (N . SYMBOL) where N is the
  3732. +numeric keysym code (sans the "system-specific" bit 1<<28)
  3733. +and SYMBOL is its name.Vdeferred-action-list
  3734. +List of deferred actions to be performed at a later time.
  3735. +The precise format isn't relevant here; we just check whether it is nil.Vdeferred-action-function
  3736. +Function to call to handle deferred actions, after each command.
  3737. +This function is called with no arguments after each command
  3738. +whenever `deferred-action-list' is non-nil.Fstart-kbd-macro
  3739. +Record subsequent keyboard input, defining a keyboard macro.
  3740. +The commands are recorded even as they are executed.
  3741. +Use \[end-kbd-macro] to finish recording and make the macro available.
  3742. +Use \[name-last-kbd-macro] to give it a permanent name.
  3743. +Non-nil arg (prefix arg) means append to last macro defined;
  3744. + This begins by re-executing that macro as if you typed it again.
  3745. +
  3746. +(start-kbd-macro APPEND)Fend-kbd-macro
  3747. +Finish defining a keyboard macro.
  3748. +The definition was started by \[start-kbd-macro].
  3749. +The macro is now available for use via \[call-last-kbd-macro],
  3750. +or it can be given a name with \[name-last-kbd-macro] and then invoked
  3751. +under that name.
  3752. +
  3753. +With numeric arg, repeat macro now that many times,
  3754. +counting the definition just completed as the first repetition.
  3755. +An argument of zero means repeat until error.
  3756. +
  3757. +(end-kbd-macro &optional ARG)Fcall-last-kbd-macro
  3758. +Call the last keyboard macro that you defined with \[start-kbd-macro].
  3759. +
  3760. +A prefix argument serves as a repeat count.  Zero means repeat until error.
  3761. +
  3762. +To make a macro permanent so you can call it even after
  3763. +defining others, use \[name-last-kbd-macro].
  3764. +
  3765. +(call-last-kbd-macro &optional PREFIX)Fexecute-kbd-macro
  3766. +Execute MACRO as string of editor command characters.
  3767. +If MACRO is a symbol, its function definition is used.
  3768. +COUNT is a repeat count, or nil for once, or 0 for infinite loop.
  3769. +
  3770. +(execute-kbd-macro MACRO &optional PREFIXARG)Vdefining-kbd-macro
  3771. +Non-nil while a keyboard macro is being defined.  Don't set this!Vexecuting-macro
  3772. +Currently executing keyboard macro (a string); nil if none executing.Vexecuting-kbd-macro
  3773. +Currently executing keyboard macro (a string); nil if none executing.Vlast-kbd-macro
  3774. +Last kbd macro defined, as a string; nil if none defined.Fmake-keymap
  3775. +Construct and return a new keymap, of the form (keymap VECTOR . ALIST).
  3776. +VECTOR is a vector which holds the bindings for the ASCII
  3777. +characters.  ALIST is an assoc-list which holds bindings for function keys,
  3778. +mouse events, and any other things that appear in the input stream.
  3779. +All entries in it are initially nil, meaning "command undefined".
  3780. +
  3781. +The optional arg STRING supplies a menu name for the keymap
  3782. +in case you use it as a menu with `x-popup-menu'.
  3783. +
  3784. +(make-keymap &optional STRING)Fmake-sparse-keymap
  3785. +Construct and return a new sparse-keymap list.
  3786. +Its car is `keymap' and its cdr is an alist of (CHAR . DEFINITION),
  3787. +which binds the character CHAR to DEFINITION, or (SYMBOL . DEFINITION),
  3788. +which binds the function key or mouse event SYMBOL to DEFINITION.
  3789. +Initially the alist is nil.
  3790. +
  3791. +The optional arg STRING supplies a menu name for the keymap
  3792. +in case you use it as a menu with `x-popup-menu'.
  3793. +
  3794. +(make-sparse-keymap &optional STRING)Fkeymapp
  3795. +Return t if ARG is a keymap.
  3796. +
  3797. +A keymap is a list (keymap . ALIST),
  3798. +or a symbol whose function definition is itself a keymap.
  3799. +ALIST elements look like (CHAR . DEFN) or (SYMBOL . DEFN);
  3800. +a vector of densely packed bindings for small character codes
  3801. +is also allowed as an element.
  3802. +
  3803. +(keymapp OBJECT)Fcopy-keymap
  3804. +Return a copy of the keymap KEYMAP.
  3805. +The copy starts out with the same definitions of KEYMAP,
  3806. +but changing either the copy or KEYMAP does not affect the other.
  3807. +Any key definitions that are subkeymaps are recursively copied.
  3808. +However, a key definition which is a symbol whose definition is a keymap
  3809. +is not copied.
  3810. +
  3811. +(copy-keymap KEYMAP)Fdefine-key
  3812. +Args KEYMAP, KEY, DEF.  Define key sequence KEY, in KEYMAP, as DEF.
  3813. +KEYMAP is a keymap.  KEY is a string or a vector of symbols and characters
  3814. +meaning a sequence of keystrokes and events.
  3815. +Non-ASCII characters with codes above 127 (such as ISO Latin-1)
  3816. +can be included if you use a vector.
  3817. +DEF is anything that can be a key's definition:
  3818. + nil (means key is undefined in this keymap),
  3819. + a command (a Lisp function suitable for interactive calling)
  3820. + a string (treated as a keyboard macro),
  3821. + a keymap (to define a prefix key),
  3822. + a symbol.  When the key is looked up, the symbol will stand for its
  3823. +    function definition, which should at that time be one of the above,
  3824. +    or another symbol whose function definition is used, etc.
  3825. + a cons (STRING . DEFN), meaning that DEFN is the definition
  3826. +    (DEFN should be a valid definition in its own right),
  3827. + or a cons (KEYMAP . CHAR), meaning use definition of CHAR in map KEYMAP.
  3828. +
  3829. +If KEYMAP is a sparse keymap, the pair binding KEY to DEF is added at
  3830. +the front of KEYMAP.
  3831. +
  3832. +(define-key KEYMAP KEY DEF)Flookup-key
  3833. +In keymap KEYMAP, look up key sequence KEY.  Return the definition.
  3834. +nil means undefined.  See doc of `define-key' for kinds of definitions.
  3835. +
  3836. +A number as value means KEY is "too long";
  3837. +that is, characters or symbols in it except for the last one
  3838. +fail to be a valid sequence of prefix characters in KEYMAP.
  3839. +The number is how many characters at the front of KEY
  3840. +it takes to reach a non-prefix command.
  3841. +
  3842. +Normally, `lookup-key' ignores bindings for t, which act as default
  3843. +bindings, used when nothing else in the keymap applies; this makes it
  3844. +useable as a general function for probing keymaps.  However, if the
  3845. +third optional argument ACCEPT-DEFAULT is non-nil, `lookup-key' will
  3846. +recognize the default bindings, just as `read-key-sequence' does.
  3847. +
  3848. +(lookup-key KEYMAP KEY &optional ACCEPT-DEFAULT)Fkey-binding
  3849. +Return the binding for command KEY in current keymaps.
  3850. +KEY is a string or vector, a sequence of keystrokes.
  3851. +The binding is probably a symbol with a function definition.
  3852. +
  3853. +Normally, `key-binding' ignores bindings for t, which act as default
  3854. +bindings, used when nothing else in the keymap applies; this makes it
  3855. +usable as a general function for probing keymaps.  However, if the
  3856. +optional second argument ACCEPT-DEFAULT is non-nil, `key-binding' does
  3857. +recognize the default bindings, just as `read-key-sequence' does.
  3858. +
  3859. +(key-binding KEY &optional ACCEPT-DEFAULT)Flocal-key-binding
  3860. +Return the binding for command KEYS in current local keymap only.
  3861. +KEYS is a string, a sequence of keystrokes.
  3862. +The binding is probably a symbol with a function definition.
  3863. +
  3864. +If optional argument ACCEPT-DEFAULT is non-nil, recognize default
  3865. +bindings; see the description of `lookup-key' for more details about this.
  3866. +
  3867. +(local-key-binding KEYS &optional ACCEPT-DEFAULT)Fglobal-key-binding
  3868. +Return the binding for command KEYS in current global keymap only.
  3869. +KEYS is a string, a sequence of keystrokes.
  3870. +The binding is probably a symbol with a function definition.
  3871. +This function's return values are the same as those of lookup-key
  3872. +(which see).
  3873. +
  3874. +If optional argument ACCEPT-DEFAULT is non-nil, recognize default
  3875. +bindings; see the description of `lookup-key' for more details about this.
  3876. +
  3877. +(global-key-binding KEYS &optional ACCEPT-DEFAULT)Fminor-mode-key-binding
  3878. +Find the visible minor mode bindings of KEY.
  3879. +Return an alist of pairs (MODENAME . BINDING), where MODENAME is the
  3880. +the symbol which names the minor mode binding KEY, and BINDING is
  3881. +KEY's definition in that mode.  In particular, if KEY has no
  3882. +minor-mode bindings, return nil.  If the first binding is a
  3883. +non-prefix, all subsequent bindings will be omitted, since they would
  3884. +be ignored.  Similarly, the list doesn't include non-prefix bindings
  3885. +that come after prefix bindings.
  3886. +
  3887. +If optional argument ACCEPT-DEFAULT is non-nil, recognize default
  3888. +bindings; see the description of `lookup-key' for more details about this.
  3889. +
  3890. +(minor-mode-key-binding KEY &optional ACCEPT-DEFAULT)Fglobal-set-key
  3891. +Give KEY a global binding as COMMAND.
  3892. +COMMAND is a symbol naming an interactively-callable function.
  3893. +KEY is a key sequence (a string or vector of characters or event types).
  3894. +Non-ASCII characters with codes above 127 (such as ISO Latin-1)
  3895. +can be included if you use a vector.
  3896. +Note that if KEY has a local binding in the current buffer
  3897. +that local binding will continue to shadow any global binding.
  3898. +
  3899. +(global-set-key KEYS FUNCTION)Flocal-set-key
  3900. +Give KEY a local binding as COMMAND.
  3901. +COMMAND is a symbol naming an interactively-callable function.
  3902. +KEY is a key sequence (a string or vector of characters or event types).
  3903. +Non-ASCII characters with codes above 127 (such as ISO Latin-1)
  3904. +can be included if you use a vector.
  3905. +The binding goes in the current buffer's local map,
  3906. +which in most cases is shared with all other buffers in the same major mode.
  3907. +
  3908. +(local-set-key KEYS FUNCTION)Fglobal-unset-key
  3909. +Remove global binding of KEY.
  3910. +KEY is a string representing a sequence of keystrokes.
  3911. +
  3912. +(global-unset-key KEYS)Flocal-unset-key
  3913. +Remove local binding of KEY.
  3914. +KEY is a string representing a sequence of keystrokes.
  3915. +
  3916. +(local-unset-key KEYS)Fdefine-prefix-command
  3917. +Define COMMAND as a prefix command.  COMMAND should be a symbol.
  3918. +A new sparse keymap is stored as COMMAND's function definition and its value.
  3919. +If a second optional argument MAPVAR is given, the map is stored as
  3920. +its value instead of as COMMAND's value; but COMMAND is still defined
  3921. +as a function.
  3922. +
  3923. +(define-prefix-command NAME &optional MAPVAR)Fuse-global-map
  3924. +Select KEYMAP as the global keymap.
  3925. +
  3926. +(use-global-map KEYMAP)Fuse-local-map
  3927. +Select KEYMAP as the local keymap.
  3928. +If KEYMAP is nil, that means no local keymap.
  3929. +
  3930. +(use-local-map KEYMAP)Fcurrent-local-map
  3931. +Return current buffer's local keymap, or nil if it has none.
  3932. +
  3933. +(current-local-map)Fcurrent-global-map
  3934. +Return the current global keymap.
  3935. +
  3936. +(current-global-map)Fcurrent-minor-mode-maps
  3937. +Return a list of keymaps for the minor modes of the current buffer.
  3938. +
  3939. +(current-minor-mode-maps)Faccessible-keymaps
  3940. +Find all keymaps accessible via prefix characters from KEYMAP.
  3941. +Returns a list of elements of the form (KEYS . MAP), where the sequence
  3942. +KEYS starting from KEYMAP gets you to MAP.  These elements are ordered
  3943. +so that the KEYS increase in length.  The first element is ("" . KEYMAP).
  3944. +An optional argument PREFIX, if non-nil, should be a key sequence;
  3945. +then the value includes only maps for prefixes that start with PREFIX.
  3946. +
  3947. +(accessible-keymaps STARTMAP &optional PREFIX)Fkey-description
  3948. +Return a pretty description of key-sequence KEYS.
  3949. +Control characters turn into "C-foo" sequences, meta into "M-foo"
  3950. +spaces are put between sequence elements, etc.
  3951. +
  3952. +(key-description KEYS)Fsingle-key-description
  3953. +Return a pretty description of command character KEY.
  3954. +Control characters turn into C-whatever, etc.
  3955. +
  3956. +(single-key-description KEY)Ftext-char-description
  3957. +Return a pretty description of file-character CHAR.
  3958. +Control characters turn into "^char", etc.
  3959. +
  3960. +(text-char-description CHR)Fwhere-is-internal
  3961. +Return list of keys that invoke DEFINITION.
  3962. +If KEYMAP is non-nil, search only KEYMAP and the global keymap.
  3963. +If KEYMAP is nil, search all the currently active keymaps.
  3964. +
  3965. +If optional 3rd arg FIRSTONLY is non-nil, return the first key sequence found,
  3966. +rather than a list of all possible key sequences.
  3967. +If FIRSTONLY is t, avoid key sequences which use non-ASCII
  3968. +keys and therefore may not be usable on ASCII terminals.  If FIRSTONLY
  3969. +is the symbol `non-ascii', return the first binding found, no matter
  3970. +what its components.
  3971. +
  3972. +If optional 4th arg NOINDIRECT is non-nil, don't follow indirections
  3973. +to other keymaps or slots.  This makes it possible to search for an
  3974. +indirect definition itself.
  3975. +
  3976. +(where-is-internal DEFINITION &optional KEYMAP FIRSTONLY NOINDIRECT)Fdescribe-bindings
  3977. +Show a list of all defined keys, and their definitions.
  3978. +The list is put in a buffer, which is displayed.
  3979. +An optional argument PREFIX, if non-nil, should be a key sequence;
  3980. +then we display only bindings that start with that prefix.
  3981. +
  3982. +(describe-bindings &optional PREFIX)Fdescribe-vector
  3983. +Insert a description of contents of VECTOR.
  3984. +This is text showing the elements of vector matched against indices.
  3985. +
  3986. +(describe-vector VECTOR)Fapropos-internal
  3987. +Show all symbols whose names contain match for REGEXP.
  3988. +If optional 2nd arg PRED is non-nil, (funcall PRED SYM) is done
  3989. +for each symbol and a symbol is mentioned only if that returns non-nil.
  3990. +Return list of symbols found.
  3991. +
  3992. +(apropos-internal STRING &optional PRED)Vminibuffer-local-map
  3993. +Default keymap to use when reading from the minibuffer.Vminibuffer-local-ns-map
  3994. +Local keymap for the minibuffer when spaces are not allowed.Vminibuffer-local-completion-map
  3995. +Local keymap for minibuffer input with completion.Vminibuffer-local-must-match-map
  3996. +Local keymap for minibuffer input with completion, for exact match.Vminor-mode-map-alist
  3997. +Alist of keymaps to use for minor modes.
  3998. +Each element looks like (VARIABLE . KEYMAP); KEYMAP is used to read
  3999. +key sequences and look up bindings iff VARIABLE's value is non-nil.
  4000. +If two active keymaps bind the same key, the keymap appearing earlier
  4001. +in the list takes precedence.Vfunction-key-map
  4002. +Keymap mapping ASCII function key sequences onto their preferred forms.
  4003. +This allows Emacs to recognize function keys sent from ASCII
  4004. +terminals at any point in a key sequence.
  4005. +
  4006. +The `read-key-sequence' function replaces any subsequence bound by
  4007. +`function-key-map' with its binding.  More precisely, when the active
  4008. +keymaps have no binding for the current key sequence but
  4009. +`function-key-map' binds a suffix of the sequence to a vector or string,
  4010. +`read-key-sequence' replaces the matching suffix with its binding, and
  4011. +continues with the new sequence.
  4012. +
  4013. +The events that come from bindings in `function-key-map' are not
  4014. +themselves looked up in `function-key-map'.
  4015. +
  4016. +For example, suppose `function-key-map' binds `ESC O P' to [f1].
  4017. +Typing `ESC O P' to `read-key-sequence' would return [f1].  Typing
  4018. +`C-x ESC O P' would return [?\C-x f1].  If [f1] were a prefix
  4019. +key, typing `ESC O P x' would return [f1 x].Fbuffer-list
  4020. +Return a list of all existing live buffers.
  4021. +
  4022. +(buffer-list)Fget-buffer
  4023. +Return the buffer named NAME (a string).
  4024. +If there is no live buffer named NAME, return nil.
  4025. +NAME may also be a buffer; if so, the value is that buffer.
  4026. +
  4027. +(get-buffer NAME)Fget-file-buffer
  4028. +Return the buffer visiting file FILENAME (a string).
  4029. +The buffer's `buffer-file-name' must match exactly the expansion of FILENAME.
  4030. +If there is no such live buffer, return nil.
  4031. +
  4032. +(get-file-buffer FILENAME)Fget-buffer-create
  4033. +Return the buffer named NAME, or create such a buffer and return it.
  4034. +A new buffer is created if there is no live buffer named NAME.
  4035. +If NAME starts with a space, the new buffer does not keep undo information.
  4036. +If NAME is a buffer instead of a string, then it is the value returned.
  4037. +The value is never nil.
  4038. +
  4039. +(get-buffer-create NAME)Fgenerate-new-buffer-name
  4040. +Return a string that is the name of no existing buffer based on NAME.
  4041. +If there is no live buffer named NAME, then return NAME.
  4042. +Otherwise modify name by appending `<NUMBER>', incrementing NUMBER
  4043. +until an unused name is found, and then return that name.
  4044. +Optional second argument IGNORE specifies a name that is okay to use
  4045. +(if it is in the sequence to be tried)
  4046. +even if a buffer with that name exists.
  4047. +
  4048. +(generate-new-buffer-name NAME &optional IGNORE)Fbuffer-name
  4049. +Return the name of BUFFER, as a string.
  4050. +With no argument or nil as argument, return the name of the current buffer.
  4051. +
  4052. +(buffer-name &optional BUFFER)Fbuffer-file-name
  4053. +Return name of file BUFFER is visiting, or nil if none.
  4054. +No argument or nil as argument means use the current buffer.
  4055. +
  4056. +(buffer-file-name &optional BUFFER)Fbuffer-local-variables
  4057. +Return an alist of variables that are buffer-local in BUFFER.
  4058. +Most elements look like (SYMBOL . VALUE), describing one variable.
  4059. +For a symbol that is locally unbound, just the symbol appears in the value.
  4060. +Note that storing new VALUEs in these elements doesn't change the variables.
  4061. +No argument or nil as argument means use current buffer as BUFFER.
  4062. +
  4063. +(buffer-local-variables &optional BUFFER)Fbuffer-modified-p
  4064. +Return t if BUFFER was modified since its file was last read or saved.
  4065. +No argument or nil as argument means use current buffer as BUFFER.
  4066. +
  4067. +(buffer-modified-p &optional BUFFER)Fset-buffer-modified-p
  4068. +Mark current buffer as modified or unmodified according to FLAG.
  4069. +A non-nil FLAG means mark the buffer modified.
  4070. +
  4071. +(set-buffer-modified-p FLAG)Fbuffer-modified-tick
  4072. +Return BUFFER's tick counter, incremented for each change in text.
  4073. +Each buffer has a tick counter which is incremented each time the text in
  4074. +that buffer is changed.  It wraps around occasionally.
  4075. +No argument or nil as argument means use current buffer as BUFFER.
  4076. +
  4077. +(buffer-modified-tick &optional BUFFER)Frename-buffer
  4078. +Change current buffer's name to NEWNAME (a string).
  4079. +If second arg UNIQUE is nil or omitted, it is an error if a
  4080. +buffer named NEWNAME already exists.
  4081. +If UNIQUE is non-nil, come up with a new name using
  4082. +`generate-new-buffer-name'.
  4083. +Interactively, you can set UNIQUE with a prefix argument.
  4084. +We return the name we actually gave the buffer.
  4085. +This does not change the name of the visited file (if any).
  4086. +
  4087. +(rename-buffer NAME &optional UNIQUE)Fother-buffer
  4088. +Return most recently selected buffer other than BUFFER.
  4089. +Buffers not visible in windows are preferred to visible buffers,
  4090. +unless optional second argument VISIBLE-OK is non-nil.
  4091. +If no other buffer exists, the buffer `*scratch*' is returned.
  4092. +If BUFFER is omitted or nil, some interesting buffer is returned.
  4093. +
  4094. +(other-buffer &optional BUFFER VISIBLE-OK)Fbuffer-disable-undo
  4095. +Make BUFFER stop keeping undo information.
  4096. +No argument or nil as argument means do this for the current buffer.
  4097. +
  4098. +(buffer-disable-undo &optional BUFFER)Fbuffer-enable-undo
  4099. +Start keeping undo information for buffer BUFFER.
  4100. +No argument or nil as argument means do this for the current buffer.
  4101. +
  4102. +(buffer-enable-undo &optional BUFFER)Vkill-buffer-hook
  4103. +Hook to be run (by `run-hooks', which see) when a buffer is killed.
  4104. +The buffer being killed will be current while the hook is running.
  4105. +See `kill-buffer'.Fkill-buffer
  4106. +Kill the buffer BUFFER.
  4107. +The argument may be a buffer or may be the name of a buffer.
  4108. +An argument of nil means kill the current buffer.
  4109. +
  4110. +Value is t if the buffer is actually killed, nil if user says no.
  4111. +
  4112. +The value of `kill-buffer-hook' (which may be local to that buffer),
  4113. +if not void, is a list of functions to be called, with no arguments,
  4114. +before the buffer is actually killed.  The buffer to be killed is current
  4115. +when the hook functions are called.
  4116. +
  4117. +Any processes that have this buffer as the `process-buffer' are killed
  4118. +with `delete-process'.
  4119. +
  4120. +(kill-buffer BUFNAME)Fswitch-to-buffer
  4121. +Select buffer BUFFER in the current window.
  4122. +BUFFER may be a buffer or a buffer name.
  4123. +Optional second arg NORECORD non-nil means
  4124. +do not put this buffer at the front of the list of recently selected ones.
  4125. +
  4126. +WARNING: This is NOT the way to work on another buffer temporarily
  4127. +within a Lisp program!  Use `set-buffer' instead.  That avoids messing with
  4128. +the window-buffer correspondences.
  4129. +
  4130. +(switch-to-buffer BUFNAME &optional NORECORD)Fpop-to-buffer
  4131. +Select buffer BUFFER in some window, preferably a different one.
  4132. +If BUFFER is nil, then some other buffer is chosen.
  4133. +If `pop-up-windows' is non-nil, windows can be split to do this.
  4134. +If optional second arg OTHER-WINDOW is non-nil, insist on finding another
  4135. +window even if BUFFER is already visible in the selected window.
  4136. +
  4137. +(pop-to-buffer BUFNAME &optional OTHER)Fcurrent-buffer
  4138. +Return the current buffer as a Lisp object.
  4139. +
  4140. +(current-buffer)Fset-buffer
  4141. +Make the buffer BUFFER current for editing operations.
  4142. +BUFFER may be a buffer or the name of an existing buffer.
  4143. +See also `save-excursion' when you want to make a buffer current temporarily.
  4144. +This function does not display the buffer, so its effect ends
  4145. +when the current command terminates.
  4146. +Use `switch-to-buffer' or `pop-to-buffer' to switch buffers permanently.
  4147. +
  4148. +(set-buffer BUFNAME)Fbarf-if-buffer-read-only
  4149. +Signal a `buffer-read-only' error if the current buffer is read-only.
  4150. +
  4151. +(barf-if-buffer-read-only)Fbury-buffer
  4152. +Put BUFFER at the end of the list of all buffers.
  4153. +There it is the least likely candidate for `other-buffer' to return;
  4154. +thus, the least likely buffer for \[switch-to-buffer] to select by default.
  4155. +If BUFFER is nil or omitted, bury the current buffer.
  4156. +Also, if BUFFER is nil or omitted, remove the current buffer from the
  4157. +selected window if it is displayed there.
  4158. +
  4159. +(bury-buffer &optional BUF)Ferase-buffer
  4160. +Delete the entire contents of the current buffer.
  4161. +Any narrowing restriction in effect (see `narrow-to-region') is removed,
  4162. +so the buffer is truly empty after this.
  4163. +
  4164. +(erase-buffer)Flist-buffers
  4165. +Display a list of names of existing buffers.
  4166. +The list is displayed in a buffer named `*Buffer List*'.
  4167. +Note that buffers with names starting with spaces are omitted.
  4168. +Non-null optional arg FILES-ONLY means mention only file buffers.
  4169. +
  4170. +The M column contains a * for buffers that are modified.
  4171. +The R column contains a % for buffers that are read-only.
  4172. +
  4173. +(list-buffers &optional FILES)Fkill-all-local-variables
  4174. +Switch to Fundamental mode by killing current buffer's local variables.
  4175. +Most local variable bindings are eliminated so that the default values
  4176. +become effective once more.  Also, the syntax table is set from
  4177. +`standard-syntax-table', the local keymap is set to nil,
  4178. +and the abbrev table from `fundamental-mode-abbrev-table'.
  4179. +This function also forces redisplay of the mode line.
  4180. +
  4181. +Every function to select a new major mode starts by
  4182. +calling this function.
  4183. +
  4184. +As a special exception, local variables whose names have
  4185. +a non-nil `permanent-local' property are not eliminated by this function.
  4186. +
  4187. +The first thing this function does is run
  4188. +the normal hook `change-major-mode-hook'.
  4189. +
  4190. +(kill-all-local-variables)Foverlayp
  4191. +Return t if OBJECT is an overlay.
  4192. +
  4193. +(overlayp OBJECT)Fmake-overlay
  4194. +Create a new overlay with range BEG to END in BUFFER.
  4195. +If omitted, BUFFER defaults to the current buffer.
  4196. +BEG and END may be integers or markers.
  4197. +
  4198. +(make-overlay BEG END &optional BUFFER)Fmove-overlay
  4199. +Set the endpoints of OVERLAY to BEG and END in BUFFER.
  4200. +If BUFFER is omitted, leave OVERLAY in the same buffer it inhabits now.
  4201. +If BUFFER is omitted, and OVERLAY is in no buffer, put it in the current
  4202. +buffer.
  4203. +
  4204. +(move-overlay OVERLAY BEG END &optional BUFFER)Fdelete-overlay
  4205. +Delete the overlay OVERLAY from its buffer.
  4206. +
  4207. +(delete-overlay OVERLAY)Foverlay-start
  4208. +Return the position at which OVERLAY starts.
  4209. +
  4210. +(overlay-start OVERLAY)Foverlay-end
  4211. +Return the position at which OVERLAY ends.
  4212. +
  4213. +(overlay-end OVERLAY)Foverlay-buffer
  4214. +Return the buffer OVERLAY belongs to.
  4215. +
  4216. +(overlay-buffer OVERLAY)Foverlay-properties
  4217. +Return a list of the properties on OVERLAY.
  4218. +This is a copy of OVERLAY's plist; modifying its conses has no effect on
  4219. +OVERLAY.
  4220. +
  4221. +(overlay-properties OVERLAY)Foverlays-at
  4222. +Return a list of the overlays that contain position POS.
  4223. +
  4224. +(overlays-at POS)Fnext-overlay-change
  4225. +Return the next position after POS where an overlay starts or ends.
  4226. +If there are no more overlay boundaries after POS, return (point-max).
  4227. +
  4228. +(next-overlay-change POS)Foverlay-lists
  4229. +Return a pair of lists giving all the overlays of the current buffer.
  4230. +The car has all the overlays before the overlay center;
  4231. +the cdr has all the overlays after the overlay center.
  4232. +Recentering overlays moves overlays between these lists.
  4233. +The lists you get are copies, so that changing them has no effect.
  4234. +However, the overlays you get are the real objects that the buffer uses.
  4235. +
  4236. +(overlay-lists)Foverlay-recenter
  4237. +Recenter the overlays of the current buffer around position POS.
  4238. +
  4239. +(overlay-recenter POS)Foverlay-get
  4240. +Get the property of overlay OVERLAY with property name NAME.
  4241. +
  4242. +(overlay-get OVERLAY PROP)Foverlay-put
  4243. +Set one property of overlay OVERLAY: give property PROP value VALUE.
  4244. +
  4245. +(overlay-put OVERLAY PROP VALUE)Vdefault-mode-line-format
  4246. +Default value of `mode-line-format' for buffers that don't override it.
  4247. +This is the same as (default-value 'mode-line-format).Vdefault-abbrev-mode
  4248. +Default value of `abbrev-mode' for buffers that do not override it.
  4249. +This is the same as (default-value 'abbrev-mode).Vdefault-ctl-arrow
  4250. +Default value of `ctl-arrow' for buffers that do not override it.
  4251. +This is the same as (default-value 'ctl-arrow).Vdefault-truncate-lines
  4252. +Default value of `truncate-lines' for buffers that do not override it.
  4253. +This is the same as (default-value 'truncate-lines).Vdefault-fill-column
  4254. +Default value of `fill-column' for buffers that do not override it.
  4255. +This is the same as (default-value 'fill-column).Vdefault-left-margin
  4256. +Default value of `left-margin' for buffers that do not override it.
  4257. +This is the same as (default-value 'left-margin).Vdefault-tab-width
  4258. +Default value of `tab-width' for buffers that do not override it.
  4259. +This is the same as (default-value 'tab-width).Vdefault-case-fold-search
  4260. +Default value of `case-fold-search' for buffers that don't override it.
  4261. +This is the same as (default-value 'case-fold-search).Vdefault-buffer-file-type
  4262. +Default file type for buffers that do not override it.
  4263. +This is the same as (default-value 'buffer-file-type).
  4264. +The file type is nil for text, t for binary.Vmode-line-format
  4265. +Template for displaying mode line for current buffer.
  4266. +Each buffer has its own value of this variable.
  4267. +Value may be a string, a symbol or a list or cons cell.
  4268. +For a symbol, its value is used (but it is ignored if t or nil).
  4269. + A string appearing directly as the value of a symbol is processed verbatim
  4270. + in that the %-constructs below are not recognized.
  4271. +For a list whose car is a symbol, the symbol's value is taken,
  4272. + and if that is non-nil, the cadr of the list is processed recursively.
  4273. + Otherwise, the caddr of the list (if there is one) is processed.
  4274. +For a list whose car is a string or list, each element is processed
  4275. + recursively and the results are effectively concatenated.
  4276. +For a list whose car is an integer, the cdr of the list is processed
  4277. +  and padded (if the number is positive) or truncated (if negative)
  4278. +  to the width specified by that number.
  4279. +A string is printed verbatim in the mode line except for %-constructs:
  4280. +  (%-constructs are allowed when the string is the entire mode-line-format
  4281. +   or when it is found in a cons-cell or a list)
  4282. +  %b -- print buffer name.      %f -- print visited file name.
  4283. +  %* -- print %, * or hyphen.   %+ -- print *, % or hyphen.
  4284. +    % means buffer is read-only and * means it is modified.
  4285. +    For a modified read-only buffer, %* gives % and %+ gives *.
  4286. +  %s -- print process status.   %l -- print the current line number.
  4287. +  %p -- print percent of buffer above top of window, or Top, Bot or All.
  4288. +  %P -- print percent of buffer above bottom of window, perhaps plus Top,
  4289. +        or print Bottom or All.
  4290. +  %n -- print Narrow if appropriate.
  4291. +  %t -- print T if files is text, B if binary.
  4292. +  %[ -- print one [ for each recursive editing level.  %] similar.
  4293. +  %% -- print %.   %- -- print infinitely many dashes.
  4294. +Decimal digits after the % specify field width to which to pad.Vdefault-major-mode
  4295. +*Major mode for new buffers.  Defaults to `fundamental-mode'.
  4296. +nil here means use current buffer's major mode.Vmajor-mode
  4297. +Symbol for current buffer's major mode.Vmode-name
  4298. +Pretty name of current buffer's major mode (a string).Vabbrev-mode
  4299. +Non-nil turns on automatic expansion of abbrevs as they are inserted.
  4300. +Automatically becomes buffer-local when set in any fashion.Vcase-fold-search
  4301. +*Non-nil if searches should ignore case.
  4302. +Automatically becomes buffer-local when set in any fashion.Vfill-column
  4303. +*Column beyond which automatic line-wrapping should happen.
  4304. +Automatically becomes buffer-local when set in any fashion.Vleft-margin
  4305. +*Column for the default indent-line-function to indent to.
  4306. +Linefeed indents to this column in Fundamental mode.
  4307. +Automatically becomes buffer-local when set in any fashion.Vtab-width
  4308. +*Distance between tab stops (for display of tab characters), in columns.
  4309. +Automatically becomes buffer-local when set in any fashion.Vctl-arrow
  4310. +*Non-nil means display control chars with uparrow.
  4311. +Nil means use backslash and octal digits.
  4312. +Automatically becomes buffer-local when set in any fashion.
  4313. +This variable does not apply to characters whose display is specified
  4314. +in the current display table (if there is one).Vtruncate-lines
  4315. +*Non-nil means do not display continuation lines;
  4316. +give each line of text one screen line.
  4317. +Automatically becomes buffer-local when set in any fashion.
  4318. +
  4319. +Note that this is overridden by the variable
  4320. +`truncate-partial-width-windows' if that variable is non-nil
  4321. +and this buffer is not full-frame width.Vbuffer-file-type
  4322. +*If visited file is text, nil; otherwise, t.Vdefault-directory
  4323. +Name of default directory of current buffer.  Should end with slash.
  4324. +Each buffer has its own value of this variable.Vauto-fill-function
  4325. +Function called (if non-nil) to perform auto-fill.
  4326. +It is called after self-inserting a space at a column beyond `fill-column'.
  4327. +Each buffer has its own value of this variable.
  4328. +NOTE: This variable is not an ordinary hook;
  4329. +It may not be a list of functions.Vbuffer-file-name
  4330. +Name of file visited in current buffer, or nil if not visiting a file.
  4331. +Each buffer has its own value of this variable.Vbuffer-auto-save-file-name
  4332. +Name of file for auto-saving current buffer,
  4333. +or nil if buffer should not be auto-saved.
  4334. +Each buffer has its own value of this variable.Vbuffer-read-only
  4335. +Non-nil if this buffer is read-only.
  4336. +Each buffer has its own value of this variable.Vbuffer-backed-up
  4337. +Non-nil if this buffer's file has been backed up.
  4338. +Backing up is done before the first time the file is saved.
  4339. +Each buffer has its own value of this variable.Vbuffer-saved-size
  4340. +Length of current buffer when last read in, saved or auto-saved.
  4341. +0 initially.
  4342. +Each buffer has its own value of this variable.Vselective-display
  4343. +Non-nil enables selective display:
  4344. +Integer N as value means display only lines
  4345. + that start with less than n columns of space.
  4346. +A value of t means, after a ^M, all the rest of the line is invisible.
  4347. + Then ^M's in the file are written into files as newlines.
  4348. +
  4349. +Automatically becomes buffer-local when set in any fashion.Vselective-display-ellipses
  4350. +t means display ... on previous line when a line is invisible.
  4351. +Automatically becomes buffer-local when set in any fashion.Voverwrite-mode
  4352. +Non-nil if self-insertion should replace existing text.
  4353. +If non-nil and not `overwrite-mode-binary', self-insertion still
  4354. +inserts at the end of a line, and inserts when point is before a tab,
  4355. +until the tab is filled in.
  4356. +If `overwrite-mode-binary', self-insertion replaces newlines and tabs too.
  4357. +Automatically becomes buffer-local when set in any fashion.Vbuffer-display-table
  4358. +Display table that controls display of the contents of current buffer.
  4359. +Automatically becomes buffer-local when set in any fashion.
  4360. +The display table is a vector created with `make-display-table'.
  4361. +The first 256 elements control how to display each possible text character.
  4362. +Each value should be a vector of characters or nil;
  4363. +nil means display the character in the default fashion.
  4364. +The remaining five elements control the display of
  4365. +  the end of a truncated screen line (element 256, a single character);
  4366. +  the end of a continued line (element 257, a single character);
  4367. +  the escape character used to display character codes in octal
  4368. +    (element 258, a single character);
  4369. +  the character used as an arrow for control characters (element 259,
  4370. +    a single character);
  4371. +  the decoration indicating the presence of invisible lines (element 260,
  4372. +    a vector of characters).
  4373. +If this variable is nil, the value of `standard-display-table' is used.
  4374. +Each window can have its own, overriding display table.Vbefore-change-function
  4375. +Function to call before each text change.
  4376. +Two arguments are passed to the function: the positions of
  4377. +the beginning and end of the range of old text to be changed.
  4378. +(For an insertion, the beginning and end are at the same place.)
  4379. +No information is given about the length of the text after the change.
  4380. +
  4381. +Buffer changes made while executing the `before-change-function'
  4382. +don't call any before-change or after-change functions.
  4383. +That's because these variables are temporarily set to nil.
  4384. +As a result, a hook function cannot straightforwardly alter the value of
  4385. +these variables.  See the Emacs Lisp manual for a way of
  4386. +accomplishing an equivalent result by using other variables.Vafter-change-function
  4387. +Function to call after each text change.
  4388. +Three arguments are passed to the function: the positions of
  4389. +the beginning and end of the range of changed text,
  4390. +and the length of the pre-change text replaced by that range.
  4391. +(For an insertion, the pre-change length is zero;
  4392. +for a deletion, that length is the number of characters deleted,
  4393. +and the post-change beginning and end are at the same place.)
  4394. +
  4395. +Buffer changes made while executing the `after-change-function'
  4396. +don't call any before-change or after-change functions.
  4397. +That's because these variables are temporarily set to nil.
  4398. +As a result, a hook function cannot straightforwardly alter the value of
  4399. +these variables.  See the Emacs Lisp manual for a way of
  4400. +accomplishing an equivalent result by using other variables.Vbefore-change-functions
  4401. +List of functions to call before each text change.
  4402. +Two arguments are passed to each function: the positions of
  4403. +the beginning and end of the range of old text to be changed.
  4404. +(For an insertion, the beginning and end are at the same place.)
  4405. +No information is given about the length of the text after the change.
  4406. +
  4407. +Buffer changes made while executing the `before-change-functions'
  4408. +don't call any before-change or after-change functions.
  4409. +That's because these variables are temporarily set to nil.
  4410. +As a result, a hook function cannot straightforwardly alter the value of
  4411. +these variables.  See the Emacs Lisp manual for a way of
  4412. +accomplishing an equivalent result by using other variables.Vafter-change-functions
  4413. +List of function to call after each text change.
  4414. +Three arguments are passed to each function: the positions of
  4415. +the beginning and end of the range of changed text,
  4416. +and the length of the pre-change text replaced by that range.
  4417. +(For an insertion, the pre-change length is zero;
  4418. +for a deletion, that length is the number of characters deleted,
  4419. +and the post-change beginning and end are at the same place.)
  4420. +
  4421. +Buffer changes made while executing the `after-change-functions'
  4422. +don't call any before-change or after-change functions.
  4423. +That's because these variables are temporarily set to nil.
  4424. +As a result, a hook function cannot straightforwardly alter the value of
  4425. +these variables.  See the Emacs Lisp manual for a way of
  4426. +accomplishing an equivalent result by using other variables.Vfirst-change-hook
  4427. +A list of functions to call before changing a buffer which is unmodified.
  4428. +The functions are run using the `run-hooks' function.Vbuffer-undo-list
  4429. +List of undo entries in current buffer.
  4430. +Recent changes come first; older changes follow newer.
  4431. +
  4432. +An entry (START . END) represents an insertion which begins at
  4433. +position START and ends at position END.
  4434. +
  4435. +An entry (TEXT . POSITION) represents the deletion of the string TEXT
  4436. +from (abs POSITION).  If POSITION is positive, point was at the front
  4437. +of the text being deleted; if negative, point was at the end.
  4438. +
  4439. +An entry (t HIGHWORD LOWWORD) indicates that the buffer had been
  4440. +previously unmodified.  HIGHWORD and LOWWORD are the high and low
  4441. +16-bit words of the buffer's modification count at the time.  If the
  4442. +modification count of the most recent save is different, this entry is
  4443. +obsolete.
  4444. +
  4445. +An entry (nil PROP VAL BEG . END) indicates that a text property
  4446. +was modified between BEG and END.  PROP is the property name,
  4447. +and VAL is the old value.
  4448. +
  4449. +An entry of the form POSITION indicates that point was at the buffer
  4450. +location given by the integer.  Undoing an entry of this form places
  4451. +point at POSITION.
  4452. +
  4453. +nil marks undo boundaries.  The undo command treats the changes
  4454. +between two undo boundaries as a single step to be undone.
  4455. +
  4456. +If the value of the variable is t, undo information is not recorded.Vmark-active
  4457. +Non-nil means the mark and region are currently active in this buffer.
  4458. +Automatically local in all buffers.Vtransient-mark-mode
  4459. +*Non-nil means deactivate the mark when the buffer contents change.Vinhibit-read-only
  4460. +*Non-nil means disregard read-only status of buffers or characters.
  4461. +If the value is t, disregard `buffer-read-only' and all `read-only'
  4462. +text properties.  If the value is a list, disregard `buffer-read-only'
  4463. +and disregard a `read-only' text property if the property value
  4464. +is a member of the list.Vkill-buffer-query-functions
  4465. +List of functions called with no args to query before killing a buffer.Flock-buffer
  4466. +Lock FILE, if current buffer is modified.
  4467. +FILE defaults to current buffer's visited file,
  4468. +or else nothing is done if current buffer isn't visiting a file.
  4469. +
  4470. +(lock-buffer &optional FN)Funlock-buffer
  4471. +Unlock the file visited in the current buffer,
  4472. +if it should normally be locked.
  4473. +
  4474. +(unlock-buffer)Ffile-locked-p
  4475. +Return nil if the FILENAME is not locked,
  4476. +t if it is locked by you, else a string of the name of the locker.
  4477. +
  4478. +(file-locked-p &optional FN)Fmarker-buffer
  4479. +Return the buffer that MARKER points into, or nil if none.
  4480. +Returns nil if MARKER points into a dead buffer.
  4481. +
  4482. +(marker-buffer MARKER)Fmarker-position
  4483. +Return the position MARKER points at, as a character number.
  4484. +
  4485. +(marker-position MARKER)Fset-marker
  4486. +Position MARKER before character number NUMBER in BUFFER.
  4487. +BUFFER defaults to the current buffer.
  4488. +If NUMBER is nil, makes marker point nowhere.
  4489. +Then it no longer slows down editing in any buffer.
  4490. +Returns MARKER.
  4491. +
  4492. +(set-marker MARKER POS &optional BUFFER)Fcopy-marker
  4493. +Return a new marker pointing at the same place as MARKER.
  4494. +If argument is a number, makes a new marker pointing
  4495. +at that position in the current buffer.
  4496. +
  4497. +(copy-marker MARKER)Ftext-properties-at
  4498. +Return the list of properties held by the character at POSITION
  4499. +in optional argument OBJECT, a string or buffer.  If nil, OBJECT
  4500. +defaults to the current buffer.
  4501. +If POSITION is at the end of OBJECT, the value is nil.
  4502. +
  4503. +(text-properties-at POS &optional OBJECT)Fget-text-property
  4504. +Return the value of position POS's property PROP, in OBJECT.
  4505. +OBJECT is optional and defaults to the current buffer.
  4506. +If POSITION is at the end of OBJECT, the value is nil.
  4507. +
  4508. +(get-text-property POS PROP &optional OBJECT)Fget-char-property
  4509. +Return the value of position POS's property PROP, in OBJECT.
  4510. +OBJECT is optional and defaults to the current buffer.
  4511. +If POS is at the end of OBJECT, the value is nil.
  4512. +If OBJECT is a buffer, then overlay properties are considered as well as
  4513. +text properties.
  4514. +If OBJECT is a window, then that window's buffer is used, but window-specific
  4515. +overlays are considered only if they are associated with OBJECT.
  4516. +
  4517. +(get-char-property POS PROP &optional OBJECT)Fnext-property-change
  4518. +Return the position of next property change.
  4519. +Scans characters forward from POS in OBJECT till it finds
  4520. +a change in some text property, then returns the position of the change.
  4521. +The optional second argument OBJECT is the string or buffer to scan.
  4522. +Return nil if the property is constant all the way to the end of OBJECT.
  4523. +If the value is non-nil, it is a position greater than POS, never equal.
  4524. +
  4525. +If the optional third argument LIMIT is non-nil, don't search
  4526. +past position LIMIT; return LIMIT if nothing is found before LIMIT.
  4527. +
  4528. +(next-property-change POS &optional OBJECT LIMIT)Fnext-single-property-change
  4529. +Return the position of next property change for a specific property.
  4530. +Scans characters forward from POS till it finds
  4531. +a change in the PROP property, then returns the position of the change.
  4532. +The optional third argument OBJECT is the string or buffer to scan.
  4533. +The property values are compared with `eq'.
  4534. +Return nil if the property is constant all the way to the end of OBJECT.
  4535. +If the value is non-nil, it is a position greater than POS, never equal.
  4536. +
  4537. +If the optional fourth argument LIMIT is non-nil, don't search
  4538. +past position LIMIT; return LIMIT if nothing is found before LIMIT.
  4539. +
  4540. +(next-single-property-change POS PROP &optional OBJECT LIMIT)Fprevious-property-change
  4541. +Return the position of previous property change.
  4542. +Scans characters backwards from POS in OBJECT till it finds
  4543. +a change in some text property, then returns the position of the change.
  4544. +The optional second argument OBJECT is the string or buffer to scan.
  4545. +Return nil if the property is constant all the way to the start of OBJECT.
  4546. +If the value is non-nil, it is a position less than POS, never equal.
  4547. +
  4548. +If the optional third argument LIMIT is non-nil, don't search
  4549. +back past position LIMIT; return LIMIT if nothing is found until LIMIT.
  4550. +
  4551. +(previous-property-change POS &optional OBJECT LIMIT)Fprevious-single-property-change
  4552. +Return the position of previous property change for a specific property.
  4553. +Scans characters backward from POS till it finds
  4554. +a change in the PROP property, then returns the position of the change.
  4555. +The optional third argument OBJECT is the string or buffer to scan.
  4556. +The property values are compared with `eq'.
  4557. +Return nil if the property is constant all the way to the start of OBJECT.
  4558. +If the value is non-nil, it is a position less than POS, never equal.
  4559. +
  4560. +If the optional fourth argument LIMIT is non-nil, don't search
  4561. +back past position LIMIT; return LIMIT if nothing is found until LIMIT.
  4562. +
  4563. +(previous-single-property-change POS PROP &optional OBJECT LIMIT)Fadd-text-properties
  4564. +Add properties to the text from START to END.
  4565. +The third argument PROPS is a property list
  4566. +specifying the property values to add.
  4567. +The optional fourth argument, OBJECT,
  4568. +is the string or buffer containing the text.
  4569. +Return t if any property value actually changed, nil otherwise.
  4570. +
  4571. +(add-text-properties START END PROPERTIES &optional OBJECT)Fput-text-property
  4572. +Set one property of the text from START to END.
  4573. +The third and fourth arguments PROP and VALUE
  4574. +specify the property to add.
  4575. +The optional fifth argument, OBJECT,
  4576. +is the string or buffer containing the text.
  4577. +
  4578. +(put-text-property START END PROP VALUE &optional OBJECT)Fset-text-properties
  4579. +Completely replace properties of text from START to END.
  4580. +The third argument PROPS is the new property list.
  4581. +The optional fourth argument, OBJECT,
  4582. +is the string or buffer containing the text.
  4583. +
  4584. +(set-text-properties START END PROPS &optional OBJECT)Fremove-text-properties
  4585. +Remove some properties from text from START to END.
  4586. +The third argument PROPS is a property list
  4587. +whose property names specify the properties to remove.
  4588. +(The values stored in PROPS are ignored.)
  4589. +The optional fourth argument, OBJECT,
  4590. +is the string or buffer containing the text.
  4591. +Return t if any property was actually removed, nil otherwise.
  4592. +
  4593. +(remove-text-properties START END PROPS &optional OBJECT)Ftext-property-any
  4594. +Check text from START to END to see if PROP is ever `eq' to VALUE.
  4595. +If so, return the position of the first character whose PROP is `eq'
  4596. +to VALUE.  Otherwise return nil.
  4597. +The optional fifth argument, OBJECT, is the string or buffer
  4598. +containing the text.
  4599. +
  4600. +(text-property-any START END PROP VALUE &optional OBJECT)Ftext-property-not-all
  4601. +Check text from START to END to see if PROP is ever not `eq' to VALUE.
  4602. +If so, return the position of the first character whose PROP is not
  4603. +`eq' to VALUE.  Otherwise, return nil.
  4604. +The optional fifth argument, OBJECT, is the string or buffer
  4605. +containing the text.
  4606. +
  4607. +(text-property-not-all START END PROP VALUE &optional OBJECT)Ferase-text-properties
  4608. +Remove all properties from the text from START to END.
  4609. +The optional third argument, OBJECT,
  4610. +is the string or buffer containing the text.
  4611. +
  4612. +(erase-text-properties START END &optional OBJECT)Vinterval-balance-threshold
  4613. +Threshold for rebalancing interval trees, expressed as the
  4614. +percentage by which the left interval tree should not differ from the right.Vinhibit-point-motion-hooks
  4615. +If non-nil, don't call the text property values of
  4616. +`point-left' and `point-entered'.Fread-from-minibuffer
  4617. +Read a string from the minibuffer, prompting with string PROMPT.
  4618. +If optional second arg INITIAL-CONTENTS is non-nil, it is a string
  4619. +  to be inserted into the minibuffer before reading input.
  4620. +  If INITIAL-CONTENTS is (STRING . POSITION), the initial input
  4621. +  is STRING, but point is placed POSITION characters into the string.
  4622. +Third arg KEYMAP is a keymap to use whilst reading;
  4623. +  if omitted or nil, the default is `minibuffer-local-map'.
  4624. +If fourth arg READ is non-nil, then interpret the result as a lisp object
  4625. +  and return that object:
  4626. +  in other words, do `(car (read-from-string INPUT-STRING))'
  4627. +Fifth arg HIST, if non-nil, specifies a history list
  4628. +  and optionally the initial position in the list.
  4629. +  It can be a symbol, which is the history list variable to use,
  4630. +  or it can be a cons cell (HISTVAR . HISTPOS).
  4631. +  In that case, HISTVAR is the history list variable to use,
  4632. +  and HISTPOS is the initial position (the position in the list
  4633. +  which INITIAL-CONTENTS corresponds to).
  4634. +  Positions are counted starting from 1 at the beginning of the list.
  4635. +
  4636. +(read-from-minibuffer PROMPT &optional INITIAL-CONTENTS KEYMAP READ HIST)Fread-minibuffer
  4637. +Return a Lisp object read using the minibuffer.
  4638. +Prompt with PROMPT.  If non-nil, optional second arg INITIAL-CONTENTS
  4639. +is a string to insert in the minibuffer before reading.
  4640. +
  4641. +(read-minibuffer PROMPT &optional INITIAL-CONTENTS)Feval-minibuffer
  4642. +Return value of Lisp expression read using the minibuffer.
  4643. +Prompt with PROMPT.  If non-nil, optional second arg INITIAL-CONTENTS
  4644. +is a string to insert in the minibuffer before reading.
  4645. +
  4646. +(eval-minibuffer PROMPT &optional INITIAL-CONTENTS)Fread-string
  4647. +Read a string from the minibuffer, prompting with string PROMPT.
  4648. +If non-nil second arg INITIAL-INPUT is a string to insert before reading.
  4649. +
  4650. +(read-string PROMPT &optional INITIAL-INPUT)Fread-no-blanks-input
  4651. +Args PROMPT and INIT, strings.  Read a string from the terminal, not allowing blanks.
  4652. +Prompt with PROMPT, and provide INIT as an initial value of the input string.
  4653. +
  4654. +(read-no-blanks-input PROMPT &optional INIT)Fread-command
  4655. +One arg PROMPT, a string.  Read the name of a command and return as a symbol.
  4656. +Prompts with PROMPT.
  4657. +
  4658. +(read-command PROMPT)Fread-function
  4659. +One arg PROMPT, a string.  Read the name of a function and return as a symbol.
  4660. +Prompts with PROMPT.
  4661. +
  4662. +(read-function PROMPT)Fread-variable
  4663. +One arg PROMPT, a string.  Read the name of a user variable and return
  4664. +it as a symbol.  Prompts with PROMPT.
  4665. +A user variable is one whose documentation starts with a `*' character.
  4666. +
  4667. +(read-variable PROMPT)Fread-buffer
  4668. +One arg PROMPT, a string.  Read the name of a buffer and return as a string.
  4669. +Prompts with PROMPT.
  4670. +Optional second arg is value to return if user enters an empty line.
  4671. +If optional third arg REQUIRE-MATCH is non-nil, only existing buffer names are allowed.
  4672. +
  4673. +(read-buffer PROMPT &optional DEF REQUIRE-MATCH)Ftry-completion
  4674. +Return common substring of all completions of STRING in ALIST.
  4675. +Each car of each element of ALIST is tested to see if it begins with STRING.
  4676. +All that match are compared together; the longest initial sequence
  4677. +common to all matches is returned as a string.
  4678. +If there is no match at all, nil is returned.
  4679. +For an exact match, t is returned.
  4680. +
  4681. +ALIST can be an obarray instead of an alist.
  4682. +Then the print names of all symbols in the obarray are the possible matches.
  4683. +
  4684. +ALIST can also be a function to do the completion itself.
  4685. +It receives three arguments: the values STRING, PREDICATE and nil.
  4686. +Whatever it returns becomes the value of `try-completion'.
  4687. +
  4688. +If optional third argument PREDICATE is non-nil,
  4689. +it is used to test each possible match.
  4690. +The match is a candidate only if PREDICATE returns non-nil.
  4691. +The argument given to PREDICATE is the alist element or the symbol from the obarray.
  4692. +
  4693. +(try-completion STRING ALIST &optional PRED)Fall-completions
  4694. +Search for partial matches to STRING in ALIST.
  4695. +Each car of each element of ALIST is tested to see if it begins with STRING.
  4696. +The value is a list of all the strings from ALIST that match.
  4697. +ALIST can be an obarray instead of an alist.
  4698. +Then the print names of all symbols in the obarray are the possible matches.
  4699. +
  4700. +ALIST can also be a function to do the completion itself.
  4701. +It receives three arguments: the values STRING, PREDICATE and t.
  4702. +Whatever it returns becomes the value of `all-completion'.
  4703. +
  4704. +If optional third argument PREDICATE is non-nil,
  4705. +it is used to test each possible match.
  4706. +The match is a candidate only if PREDICATE returns non-nil.
  4707. +The argument given to PREDICATE is the alist element or the symbol from the obarray.
  4708. +
  4709. +(all-completions STRING ALIST &optional PRED)Fcompleting-read
  4710. +Read a string in the minibuffer, with completion.
  4711. +Args: PROMPT, TABLE, PREDICATE, REQUIRE-MATCH, INITIAL-INPUT, HIST.
  4712. +PROMPT is a string to prompt with; normally it ends in a colon and a space.
  4713. +TABLE is an alist whose elements' cars are strings, or an obarray.
  4714. +PREDICATE limits completion to a subset of TABLE.
  4715. +See `try-completion' for more details on completion, TABLE, and PREDICATE.
  4716. +If REQUIRE-MATCH is non-nil, the user is not allowed to exit unless
  4717. + the input is (or completes to) an element of TABLE or is null.
  4718. + If it is also not t, Return does not exit if it does non-null completion.
  4719. +If INITIAL-INPUT is non-nil, insert it in the minibuffer initially.
  4720. +  If it is (STRING . POSITION), the initial input
  4721. +  is STRING, but point is placed POSITION characters into the string.
  4722. +HIST, if non-nil, specifies a history list
  4723. +  and optionally the initial position in the list.
  4724. +  It can be a symbol, which is the history list variable to use,
  4725. +  or it can be a cons cell (HISTVAR . HISTPOS).
  4726. +  In that case, HISTVAR is the history list variable to use,
  4727. +  and HISTPOS is the initial position (the position in the list
  4728. +  which INITIAL-CONTENTS corresponds to).
  4729. +  Positions are counted starting from 1 at the beginning of the list.
  4730. +Completion ignores case if the ambient value of
  4731. +  `completion-ignore-case' is non-nil.
  4732. +
  4733. +(completing-read PROMPT TABLE &optional PRED REQUIRE-MATCH INIT HIST)Fminibuffer-complete
  4734. +Complete the minibuffer contents as far as possible.
  4735. +Return nil if there is no valid completion, else t.
  4736. +If no characters can be completed, display a list of possible completions.
  4737. +If you repeat this command after it displayed such a list,
  4738. +scroll the window of possible completions.
  4739. +
  4740. +(minibuffer-complete)Fminibuffer-complete-and-exit
  4741. +Complete the minibuffer contents, and maybe exit.
  4742. +Exit if the name is valid with no completion needed.
  4743. +If name was completed to a valid match,
  4744. +a repetition of this command will exit.
  4745. +
  4746. +(minibuffer-complete-and-exit)Fminibuffer-complete-word
  4747. +Complete the minibuffer contents at most a single word.
  4748. +After one word is completed as much as possible, a space or hyphen
  4749. +is added, provided that matches some possible completion.
  4750. +Return nil if there is no valid completion, else t.
  4751. +
  4752. +(minibuffer-complete-word)Fdisplay-completion-list
  4753. +Display the list of completions, COMPLETIONS, using `standard-output'.
  4754. +Each element may be just a symbol or string
  4755. +or may be a list of two strings to be printed as if concatenated.
  4756. +`standard-output' must be a buffer.
  4757. +At the end, run the normal hook `completion-setup-hook'.
  4758. +It can find the completion buffer in `standard-output'.
  4759. +
  4760. +(display-completion-list COMPLETIONS)Fminibuffer-completion-help
  4761. +Display a list of possible completions of the current minibuffer contents.
  4762. +
  4763. +(minibuffer-completion-help)Fself-insert-and-exit
  4764. +Terminate minibuffer input.
  4765. +
  4766. +(self-insert-and-exit)Fexit-minibuffer
  4767. +Terminate this minibuffer argument.
  4768. +
  4769. +(exit-minibuffer)Fminibuffer-depth
  4770. +Return current depth of activations of minibuffer, a nonnegative integer.
  4771. +
  4772. +(minibuffer-depth)Fminibuffer-prompt
  4773. +Return the prompt string of the currently-active minibuffer.
  4774. +If no minibuffer is active, return nil.
  4775. +
  4776. +(minibuffer-prompt)Fminibuffer-prompt-width
  4777. +Return the display width of the minibuffer prompt.
  4778. +
  4779. +(minibuffer-prompt-width)Vminibuffer-setup-hook
  4780. +Normal hook run just after entry to minibuffer.Vminibuffer-exit-hook
  4781. +Normal hook run just after exit from minibuffer.Vcompletion-auto-help
  4782. +*Non-nil means automatically provide help for invalid completion input.Vcompletion-ignore-case
  4783. +Non-nil means don't consider case significant in completion.Venable-recursive-minibuffers
  4784. +*Non-nil means to allow minibuffer commands while in the minibuffer.
  4785. +More precisely, this variable makes a difference when the minibuffer window
  4786. +is the selected window.  If you are in some other window, minibuffer commands
  4787. +are allowed even if a minibuffer is active.Vminibuffer-completion-table
  4788. +Alist or obarray used for completion in the minibuffer.
  4789. +This becomes the ALIST argument to `try-completion' and `all-completion'.
  4790. +
  4791. +The value may alternatively be a function, which is given three arguments:
  4792. +  STRING, the current buffer contents;
  4793. +  PREDICATE, the predicate for filtering possible matches;
  4794. +  CODE, which says what kind of things to do.
  4795. +CODE can be nil, t or `lambda'.
  4796. +nil means to return the best completion of STRING, or nil if there is none.
  4797. +t means to return a list of all possible completions of STRING.
  4798. +`lambda' means to return t if STRING is a valid completion as it stands.Vminibuffer-completion-predicate
  4799. +Within call to `completing-read', this holds the PREDICATE argument.Vminibuffer-completion-confirm
  4800. +Non-nil => demand confirmation of completion before exiting minibuffer.Vminibuffer-help-form
  4801. +Value that `help-form' takes on inside the minibuffer.Vminibuffer-history-variable
  4802. +History list symbol to add minibuffer values to.
  4803. +Each minibuffer output is added with
  4804. +  (set minibuffer-history-variable
  4805. +       (cons STRING (symbol-value minibuffer-history-variable)))Vminibuffer-history-position
  4806. +Current position of redoing in the history list.Vminibuffer-auto-raise
  4807. +*Non-nil means entering the minibuffer raises the minibuffer's frame.Vcompletion-regexp-list
  4808. +List of regexps that should restrict possible completions.Ffind-file-name-handler
  4809. +Return FILENAME's handler function for OPERATION, if it has one.
  4810. +Otherwise, return nil.
  4811. +A file name is handled if one of the regular expressions in
  4812. +`file-name-handler-alist' matches it.
  4813. +
  4814. +If OPERATION equals `inhibit-file-name-operation', then we ignore
  4815. +any handlers that are members of `inhibit-file-name-handlers',
  4816. +but we still do run any other handlers.  This lets handlers
  4817. +use the standard functions without calling themselves recursively.
  4818. +
  4819. +(find-file-name-handler FILENAME OPERATION)Ffile-name-directory
  4820. +Return the directory component in file name NAME.
  4821. +Return nil if NAME does not include a directory.
  4822. +Otherwise return a directory spec.
  4823. +Given a Unix syntax file name, returns a string ending in slash;
  4824. +on VMS, perhaps instead a string ending in `:', `]' or `>'.
  4825. +
  4826. +(file-name-directory FILE)Ffile-name-nondirectory
  4827. +Return file name NAME sans its directory.
  4828. +For example, in a Unix-syntax file name,
  4829. +this is everything after the last slash,
  4830. +or the entire name if it contains no slash.
  4831. +
  4832. +(file-name-nondirectory FILE)Funhandled-file-name-directory
  4833. +Return a directly usable directory name somehow associated with FILENAME.
  4834. +A `directly usable' directory name is one that may be used without the
  4835. +intervention of any file handler.
  4836. +If FILENAME is a directly usable file itself, return
  4837. +(file-name-directory FILENAME).
  4838. +The `call-process' and `start-process' functions use this function to
  4839. +get a current directory to run processes in.
  4840. +
  4841. +(unhandled-file-name-directory FILENAME)Ffile-name-as-directory
  4842. +Return a string representing file FILENAME interpreted as a directory.
  4843. +This operation exists because a directory is also a file, but its name as
  4844. +a directory is different from its name as a file.
  4845. +The result can be used as the value of `default-directory'
  4846. +or passed as second argument to `expand-file-name'.
  4847. +For a Unix-syntax file name, just appends a slash.
  4848. +On VMS, converts "[X]FOO.DIR" to "[X.FOO]", etc.
  4849. +
  4850. +(file-name-as-directory FILE)Fdirectory-file-name
  4851. +Returns the file name of the directory named DIR.
  4852. +This is the name of the file that holds the data for the directory DIR.
  4853. +This operation exists because a directory is also a file, but its name as
  4854. +a directory is different from its name as a file.
  4855. +In Unix-syntax, this function just removes the final slash.
  4856. +On VMS, given a VMS-syntax directory name such as "[X.Y]",
  4857. +it returns a file name such as "[X]Y.DIR.1".
  4858. +
  4859. +(directory-file-name DIRECTORY)Fmake-temp-name
  4860. +Generate temporary file name (string) starting with PREFIX (a string).
  4861. +The Emacs process number forms part of the result,
  4862. +so there is no danger of generating a name being used by another process.
  4863. +
  4864. +(make-temp-name PREFIX)Fexpand-file-name
  4865. +Convert FILENAME to absolute, and canonicalize it.
  4866. +Second arg DEFAULT is directory to start with if FILENAME is relative
  4867. + (does not start with slash); if DEFAULT is nil or missing,
  4868. +the current buffer's value of default-directory is used.
  4869. +Path components that are `.' are removed, and 
  4870. +path components followed by `..' are removed, along with the `..' itself;
  4871. +note that these simplifications are done without checking the resulting
  4872. +paths in the file system.
  4873. +An initial `~/' expands to your home directory.
  4874. +An initial `~USER/' expands to USER's home directory.
  4875. +See also the function `substitute-in-file-name'.
  4876. +
  4877. +(expand-file-name NAME &optional DEFAULT)Fsubstitute-in-file-name
  4878. +Substitute environment variables referred to in FILENAME.
  4879. +`$FOO' where FOO is an environment variable name means to substitute
  4880. +the value of that variable.  The variable name should be terminated
  4881. +with a character not a letter, digit or underscore; otherwise, enclose
  4882. +the entire variable name in braces.
  4883. +If `/~' appears, all of FILENAME through that `/' is discarded.
  4884. +
  4885. +On VMS, `$' substitution is not done; this function does little and only
  4886. +duplicates what `expand-file-name' does.
  4887. +
  4888. +(substitute-in-file-name STRING)Fcopy-file
  4889. +Copy FILE to NEWNAME.  Both args must be strings.
  4890. +Signals a `file-already-exists' error if file NEWNAME already exists,
  4891. +unless a third argument OK-IF-ALREADY-EXISTS is supplied and non-nil.
  4892. +A number as third arg means request confirmation if NEWNAME already exists.
  4893. +This is what happens in interactive use with M-x.
  4894. +Fourth arg KEEP-TIME non-nil means give the new file the same
  4895. +last-modified time as the old one.  (This works on only some systems.)
  4896. +A prefix arg makes KEEP-TIME non-nil.
  4897. +
  4898. +(copy-file FILENAME NEWNAME &optional OK-IF-ALREADY-EXISTS KEEP-DATE)Fmake-directory-internal
  4899. +Create a directory.  One argument, a file name string.
  4900. +
  4901. +(make-directory-internal DIRNAME)Fdelete-directory
  4902. +Delete a directory.  One argument, a file name or directory name string.
  4903. +
  4904. +(delete-directory DIRNAME)Fdelete-file
  4905. +Delete specified file.  One argument, a file name string.
  4906. +If file has multiple names, it continues to exist with the other names.
  4907. +
  4908. +(delete-file FILENAME)Frename-file
  4909. +Rename FILE as NEWNAME.  Both args strings.
  4910. +If file has names other than FILE, it continues to have those names.
  4911. +Signals a `file-already-exists' error if a file NEWNAME already exists
  4912. +unless optional third argument OK-IF-ALREADY-EXISTS is non-nil.
  4913. +A number as third arg means request confirmation if NEWNAME already exists.
  4914. +This is what happens in interactive use with M-x.
  4915. +
  4916. +(rename-file FILENAME NEWNAME &optional OK-IF-ALREADY-EXISTS)Fadd-name-to-file
  4917. +Give FILE additional name NEWNAME.  Both args strings.
  4918. +Signals a `file-already-exists' error if a file NEWNAME already exists
  4919. +unless optional third argument OK-IF-ALREADY-EXISTS is non-nil.
  4920. +A number as third arg means request confirmation if NEWNAME already exists.
  4921. +This is what happens in interactive use with M-x.
  4922. +
  4923. +(add-name-to-file FILENAME NEWNAME &optional OK-IF-ALREADY-EXISTS)Fmake-symbolic-link
  4924. +Make a symbolic link to FILENAME, named LINKNAME.  Both args strings.
  4925. +Signals a `file-already-exists' error if a file NEWNAME already exists
  4926. +unless optional third argument OK-IF-ALREADY-EXISTS is non-nil.
  4927. +A number as third arg means request confirmation if NEWNAME already exists.
  4928. +This happens for interactive use with M-x.
  4929. +
  4930. +(make-symbolic-link FILENAME LINKNAME &optional OK-IF-ALREADY-EXISTS)Fdefine-logical-name
  4931. +Define the job-wide logical name NAME to have the value STRING.
  4932. +If STRING is nil or a null string, the logical name NAME is deleted.
  4933. +
  4934. +(define-logical-name VARNAME STRING)Fsysnetunam
  4935. +Open a network connection to PATH using LOGIN as the login string.
  4936. +
  4937. +(sysnetunam PATH LOGIN)Ffile-name-absolute-p
  4938. +Return t if file FILENAME specifies an absolute path name.
  4939. +On Unix, this is a name starting with a `/' or a `~'.
  4940. +
  4941. +(file-name-absolute-p FILENAME)Ffile-exists-p
  4942. +Return t if file FILENAME exists.  (This does not mean you can read it.)
  4943. +See also `file-readable-p' and `file-attributes'.
  4944. +
  4945. +(file-exists-p FILENAME)Ffile-executable-p
  4946. +Return t if FILENAME can be executed by you.
  4947. +For a directory, this means you can access files in that directory.
  4948. +
  4949. +(file-executable-p FILENAME)Ffile-readable-p
  4950. +Return t if file FILENAME exists and you can read it.
  4951. +See also `file-exists-p' and `file-attributes'.
  4952. +
  4953. +(file-readable-p FILENAME)Ffile-symlink-p
  4954. +Return non-nil if file FILENAME is the name of a symbolic link.
  4955. +The value is the name of the file to which it is linked.
  4956. +Otherwise returns nil.
  4957. +
  4958. +(file-symlink-p FILENAME)Ffile-writable-p
  4959. +Return t if file FILENAME can be written or created by you.
  4960. +
  4961. +(file-writable-p FILENAME)Ffile-directory-p
  4962. +Return t if file FILENAME is the name of a directory as a file.
  4963. +A directory name spec may be given instead; then the value is t
  4964. +if the directory so specified exists and really is a directory.
  4965. +
  4966. +(file-directory-p FILENAME)Ffile-accessible-directory-p
  4967. +Return t if file FILENAME is the name of a directory as a file,
  4968. +and files in that directory can be opened by you.  In order to use a
  4969. +directory as a buffer's current directory, this predicate must return true.
  4970. +A directory name spec may be given instead; then the value is t
  4971. +if the directory so specified exists and really is a readable and
  4972. +searchable directory.
  4973. +
  4974. +(file-accessible-directory-p FILENAME)Ffile-modes
  4975. +Return mode bits of FILE, as an integer.
  4976. +
  4977. +(file-modes FILENAME)Fset-file-modes
  4978. +Set mode bits of FILE to MODE (an integer).
  4979. +Only the 12 low bits of MODE are used.
  4980. +
  4981. +(set-file-modes FILENAME MODE)Fset-default-file-modes
  4982. +Set the file permission bits for newly created files.
  4983. +The argument MODE should be an integer; only the low 9 bits are used.
  4984. +This setting is inherited by subprocesses.
  4985. +
  4986. +(set-default-file-modes MODE)Fdefault-file-modes
  4987. +Return the default file protection for created files.
  4988. +The value is an integer.
  4989. +
  4990. +(default-file-modes)Funix-sync
  4991. +Tell Unix to finish all pending disk updates.
  4992. +
  4993. +(unix-sync)Ffile-newer-than-file-p
  4994. +Return t if file FILE1 is newer than file FILE2.
  4995. +If FILE1 does not exist, the answer is nil;
  4996. +otherwise, if FILE2 does not exist, the answer is t.
  4997. +
  4998. +(file-newer-than-file-p FILE1 FILE2)Finsert-file-contents
  4999. +Insert contents of file FILENAME after point.
  5000. +Returns list of absolute file name and length of data inserted.
  5001. +If second argument VISIT is non-nil, the buffer's visited filename
  5002. +and last save file modtime are set, and it is marked unmodified.
  5003. +If visiting and the file does not exist, visiting is completed
  5004. +before the error is signaled.
  5005. +
  5006. +The optional third and fourth arguments BEG and END
  5007. +specify what portion of the file to insert.
  5008. +If VISIT is non-nil, BEG and END must be nil.
  5009. +If optional fifth argument REPLACE is non-nil,
  5010. +it means replace the current buffer contents (in the accessible portion)
  5011. +with the file contents.  This is better than simply deleting and inserting
  5012. +the whole thing because (1) it preserves some marker positions
  5013. +and (2) it puts less data in the undo list.
  5014. +
  5015. +(insert-file-contents FILENAME &optional VISIT BEG END REPLACE)Fwrite-region
  5016. +Write current region into specified file.
  5017. +When called from a program, takes three arguments:
  5018. +START, END and FILENAME.  START and END are buffer positions.
  5019. +Optional fourth argument APPEND if non-nil means
  5020. +  append to existing file contents (if any).
  5021. +Optional fifth argument VISIT if t means
  5022. +  set the last-save-file-modtime of buffer to this file's modtime
  5023. +  and mark buffer not modified.
  5024. +If VISIT is a string, it is a second file name;
  5025. +  the output goes to FILENAME, but the buffer is marked as visiting VISIT.
  5026. +  VISIT is also the file name to lock and unlock for clash detection.
  5027. +If VISIT is neither t nor nil nor a string,
  5028. +  that means do not print the "Wrote file" message.
  5029. +Kludgy feature: if START is a string, then that string is written
  5030. +to the file, instead of any buffer contents, and END is ignored.
  5031. +
  5032. +(write-region START END FILENAME &optional APPEND VISIT)Fcar-less-than-car
  5033. +Return t if (car A) is numerically less than (car B).
  5034. +
  5035. +(car-less-than-car A B)Fverify-visited-file-modtime
  5036. +Return t if last mod time of BUF's visited file matches what BUF records.
  5037. +This means that the file has not been changed since it was visited or saved.
  5038. +
  5039. +(verify-visited-file-modtime BUF)Fclear-visited-file-modtime
  5040. +Clear out records of last mod time of visited file.
  5041. +Next attempt to save will certainly not complain of a discrepancy.
  5042. +
  5043. +(clear-visited-file-modtime)Fvisited-file-modtime
  5044. +Return the current buffer's recorded visited file modification time.
  5045. +The value is a list of the form (HIGH . LOW), like the time values
  5046. +that `file-attributes' returns.
  5047. +
  5048. +(visited-file-modtime)Fset-visited-file-modtime
  5049. +Update buffer's recorded modification time from the visited file's time.
  5050. +Useful if the buffer was not read from the file normally
  5051. +or if the file itself has been changed for some known benign reason.
  5052. +An argument specifies the modification time value to use
  5053. +(instead of that of the visited file), in the form of a list
  5054. +(HIGH . LOW) or (HIGH LOW).
  5055. +
  5056. +(set-visited-file-modtime &optional TIME-LIST)Fdo-auto-save
  5057. +Auto-save all buffers that need it.
  5058. +This is all buffers that have auto-saving enabled
  5059. +and are changed since last auto-saved.
  5060. +Auto-saving writes the buffer into a file
  5061. +so that your editing is not lost if the system crashes.
  5062. +This file is not the file you visited; that changes only when you save.
  5063. +Normally we run the normal hook `auto-save-hook' before saving.
  5064. +
  5065. +Non-nil first argument means do not print any message if successful.
  5066. +Non-nil second argument means save only current buffer.
  5067. +
  5068. +(do-auto-save &optional NO-MESSAGE CURRENT-ONLY)Fset-buffer-auto-saved
  5069. +Mark current buffer as auto-saved with its current text.
  5070. +No auto-save file will be written until the buffer changes again.
  5071. +
  5072. +(set-buffer-auto-saved)Fclear-buffer-auto-save-failure
  5073. +Clear any record of a recent auto-save failure in the current buffer.
  5074. +
  5075. +(clear-buffer-auto-save-failure)Frecent-auto-save-p
  5076. +Return t if buffer has been auto-saved since last read in or saved.
  5077. +
  5078. +(recent-auto-save-p)Fread-file-name-internal
  5079. +Internal subroutine for read-file-name.  Do not call this.
  5080. +
  5081. +(read-file-name-internal STRING DIR ACTION)Fread-file-name
  5082. +Read file name, prompting with PROMPT and completing in directory DIR.
  5083. +Value is not expanded---you must call `expand-file-name' yourself.
  5084. +Default name to DEFAULT if user enters a null string.
  5085. + (If DEFAULT is omitted, the visited file name is used.)
  5086. +Fourth arg MUSTMATCH non-nil means require existing file's name.
  5087. + Non-nil and non-t means also require confirmation after completion.
  5088. +Fifth arg INITIAL specifies text to start with.
  5089. +DIR defaults to current buffer's directory default.
  5090. +
  5091. +(read-file-name PROMPT &optional DIR DEFAULT MUSTMATCH INITIAL)Vinsert-default-directory
  5092. +*Non-nil means when reading a filename start with default dir in minibuffer.Vvms-stmlf-recfm
  5093. +*Non-nil means write new files with record format `stmlf'.
  5094. +nil means use format `var'.  This variable is meaningful only on VMS.Vfile-name-handler-alist
  5095. +*Alist of elements (REGEXP . HANDLER) for file names handled specially.
  5096. +If a file name matches REGEXP, then all I/O on that file is done by calling
  5097. +HANDLER.
  5098. +
  5099. +The first argument given to HANDLER is the name of the I/O primitive
  5100. +to be handled; the remaining arguments are the arguments that were
  5101. +passed to that primitive.  For example, if you do
  5102. +    (file-exists-p FILENAME)
  5103. +and FILENAME is handled by HANDLER, then HANDLER is called like this:
  5104. +    (funcall HANDLER 'file-exists-p FILENAME)
  5105. +The function `find-file-name-handler' checks this list for a handler
  5106. +for its argument.Vafter-insert-file-functions
  5107. +A list of functions to be called at the end of `insert-file-contents'.
  5108. +Each is passed one argument, the number of bytes inserted.  It should return
  5109. +the new byte count, and leave point the same.  If `insert-file-contents' is
  5110. +intercepted by a handler from `file-name-handler-alist', that handler is
  5111. +responsible for calling the after-insert-file-functions if appropriate.Vwrite-region-annotate-functions
  5112. +A list of functions to be called at the start of `write-region'.
  5113. +Each is passed two arguments, START and END as for `write-region'.  It should
  5114. +return a list of pairs (POSITION . STRING) of strings to be effectively
  5115. +inserted at the specified positions of the file being written (1 means to
  5116. +insert before the first byte written).  The POSITIONs must be sorted into
  5117. +increasing order.  If there are several functions in the list, the several
  5118. +lists are merged destructively.Vwrite-region-annotations-so-far
  5119. +When an annotation function is called, this holds the previous annotations.
  5120. +These are the annotations made by other annotation functions
  5121. +that were already called.  See also `write-region-annotate-functions'.Vinhibit-file-name-handlers
  5122. +A list of file name handlers that temporarily should not be used.
  5123. +This applies only to the operation `inhibit-file-name-operation'.Vinhibit-file-name-operation
  5124. +The operation for which `inhibit-file-name-handlers' is applicable.Vauto-save-list-file-name
  5125. +File name in which we write a list of all auto save file names.Fdirectory-files
  5126. +Return a list of names of files in DIRECTORY.
  5127. +There are three optional arguments:
  5128. +If FULL is non-nil, absolute pathnames of the files are returned.
  5129. +If MATCH is non-nil, only pathnames containing that regexp are returned.
  5130. +If NOSORT is non-nil, the list is not sorted--its order is unpredictable.
  5131. + NOSORT is useful if you plan to sort the result yourself.
  5132. +
  5133. +(directory-files DIRNAME &optional FULL MATCH NOSORT)Ffile-name-completion
  5134. +Complete file name FILE in directory DIR.
  5135. +Returns the longest string
  5136. +common to all filenames in DIR that start with FILE.
  5137. +If there is only one and FILE matches it exactly, returns t.
  5138. +Returns nil if DIR contains no name starting with FILE.
  5139. +
  5140. +(file-name-completion FILE DIRNAME)Ffile-name-all-completions
  5141. +Return a list of all completions of file name FILE in directory DIR.
  5142. +These are all file names in directory DIR which begin with FILE.
  5143. +
  5144. +(file-name-all-completions FILE DIRNAME)Ffile-name-all-versions
  5145. +Return a list of all versions of file name FILE in directory DIR.
  5146. +
  5147. +(file-name-all-versions FILE DIRNAME)Ffile-version-limit
  5148. +Return the maximum number of versions allowed for FILE.
  5149. +Returns nil if the file cannot be opened or if there is no version limit.
  5150. +
  5151. +(file-version-limit FILENAME)Ffile-attributes
  5152. +Return a list of attributes of file FILENAME.
  5153. +Value is nil if specified file cannot be opened.
  5154. +Otherwise, list elements are:
  5155. + 0. t for directory, string (name linked to) for symbolic link, or nil.
  5156. + 1. Number of links to file.
  5157. + 2. File uid.
  5158. + 3. File gid.
  5159. + 4. Last access time, as a list of two integers.
  5160. +  First integer has high-order 16 bits of time, second has low 16 bits.
  5161. + 5. Last modification time, likewise.
  5162. + 6. Last status change time, likewise.
  5163. + 7. Size in bytes (-1, if number is out of range).
  5164. + 8. File modes, as a string of ten letters or dashes as in ls -l.
  5165. + 9. t iff file's gid would change if file were deleted and recreated.
  5166. +10. inode number.
  5167. +11. Device number.
  5168. +
  5169. +If file does not exist, returns nil.
  5170. +
  5171. +(file-attributes FILENAME)Vcompletion-ignored-extensions
  5172. +*Completion ignores filenames ending in any string in this list.
  5173. +This variable does not affect lists of possible completions,
  5174. +but does affect the commands that actually do completions.Fforward-char
  5175. +Move point right ARG characters (left if ARG negative).
  5176. +On reaching end of buffer, stop and signal error.
  5177. +
  5178. +(forward-char &optional N)Fbackward-char
  5179. +Move point left ARG characters (right if ARG negative).
  5180. +On attempt to pass beginning or end of buffer, stop and signal error.
  5181. +
  5182. +(backward-char &optional N)Fforward-line
  5183. +Move ARG lines forward (backward if ARG is negative).
  5184. +Precisely, if point is on line I, move to the start of line I + ARG.
  5185. +If there isn't room, go as far as possible (no error).
  5186. +Returns the count of lines left to move.  If moving forward,
  5187. +that is ARG - number of lines moved; if backward, ARG + number moved.
  5188. +With positive ARG, a non-empty line at the end counts as one line
  5189. +  successfully moved (for the return value).
  5190. +
  5191. +(forward-line &optional N)Fbeginning-of-line
  5192. +Move point to beginning of current line.
  5193. +With argument ARG not nil or 1, move forward ARG - 1 lines first.
  5194. +If scan reaches end of buffer, stop there without error.
  5195. +
  5196. +(beginning-of-line &optional N)Fend-of-line
  5197. +Move point to end of current line.
  5198. +With argument ARG not nil or 1, move forward ARG - 1 lines first.
  5199. +If scan reaches end of buffer, stop there without error.
  5200. +
  5201. +(end-of-line &optional N)Fdelete-char
  5202. +Delete the following ARG characters (previous, with negative arg).
  5203. +Optional second arg KILLFLAG non-nil means kill instead (save in kill ring).
  5204. +Interactively, ARG is the prefix arg, and KILLFLAG is set if
  5205. +ARG was explicitly specified.
  5206. +
  5207. +(delete-char N &optional KILLFLAG)Fdelete-backward-char
  5208. +Delete the previous ARG characters (following, with negative ARG).
  5209. +Optional second arg KILLFLAG non-nil means kill instead (save in kill ring).
  5210. +Interactively, ARG is the prefix arg, and KILLFLAG is set if
  5211. +ARG was explicitly specified.
  5212. +
  5213. +(delete-backward-char N &optional KILLFLAG)Fself-insert-command
  5214. +Insert the character you type.
  5215. +Whichever character you type to run this command is inserted.
  5216. +
  5217. +(self-insert-command ARG)Fnewline
  5218. +Insert a newline.  With arg, insert that many newlines.
  5219. +In Auto Fill mode, if no numeric arg, break the preceding line if it's long.
  5220. +
  5221. +(newline &optional ARG1)Vblink-paren-function
  5222. +Function called, if non-nil, whenever a close parenthesis is inserted.
  5223. +More precisely, a char with closeparen syntax is self-inserted.Fcase-table-p
  5224. +Return t iff ARG is a case table.
  5225. +See `set-case-table' for more information on these data structures.
  5226. +
  5227. +(case-table-p TABLE)Fcurrent-case-table
  5228. +Return the case table of the current buffer.
  5229. +
  5230. +(current-case-table)Fstandard-case-table
  5231. +Return the standard case table.
  5232. +This is the one used for new buffers.
  5233. +
  5234. +(standard-case-table)Fset-case-table
  5235. +Select a new case table for the current buffer.
  5236. +A case table is a list (DOWNCASE UPCASE CANONICALIZE EQUIVALENCES)
  5237. + where each element is either nil or a string of length 256.
  5238. +DOWNCASE maps each character to its lower-case equivalent.
  5239. +UPCASE maps each character to its upper-case equivalent;
  5240. + if lower and upper case characters are in 1-1 correspondence,
  5241. + you may use nil and the upcase table will be deduced from DOWNCASE.
  5242. +CANONICALIZE maps each character to a canonical equivalent;
  5243. + any two characters that are related by case-conversion have the same
  5244. + canonical equivalent character; it may be nil, in which case it is
  5245. + deduced from DOWNCASE and UPCASE.
  5246. +EQUIVALENCES is a map that cyclicly permutes each equivalence class
  5247. + (of characters with the same canonical equivalent); it may be nil,
  5248. + in which case it is deduced from CANONICALIZE.
  5249. +
  5250. +(set-case-table TABLE)Fset-standard-case-table
  5251. +Select a new standard case table for new buffers.
  5252. +See `set-case-table' for more info on case tables.
  5253. +
  5254. +(set-standard-case-table TABLE)Vascii-downcase-table
  5255. +String mapping ASCII characters to lowercase equivalents.Vascii-upcase-table
  5256. +String mapping ASCII characters to uppercase equivalents.Fupcase
  5257. +Convert argument to upper case and return that.
  5258. +The argument may be a character or string.  The result has the same type.
  5259. +The argument object is not altered.  See also `capitalize'.
  5260. +
  5261. +(upcase OBJ)Fdowncase
  5262. +Convert argument to lower case and return that.
  5263. +The argument may be a character or string.  The result has the same type.
  5264. +The argument object is not altered.
  5265. +
  5266. +(downcase OBJ)Fcapitalize
  5267. +Convert argument to capitalized form and return that.
  5268. +This means that each word's first character is upper case
  5269. +and the rest is lower case.
  5270. +The argument may be a character or string.  The result has the same type.
  5271. +The argument object is not altered.
  5272. +
  5273. +(capitalize OBJ)Fupcase-region
  5274. +Convert the region to upper case.  In programs, wants two arguments.
  5275. +These arguments specify the starting and ending character numbers of
  5276. +the region to operate on.  When used as a command, the text between
  5277. +point and the mark is operated on.
  5278. +See also `capitalize-region'.
  5279. +
  5280. +(upcase-region B E)Fdowncase-region
  5281. +Convert the region to lower case.  In programs, wants two arguments.
  5282. +These arguments specify the starting and ending character numbers of
  5283. +the region to operate on.  When used as a command, the text between
  5284. +point and the mark is operated on.
  5285. +
  5286. +(downcase-region B E)Fcapitalize-region
  5287. +Convert the region to capitalized form.
  5288. +Capitalized form means each word's first character is upper case
  5289. +and the rest of it is lower case.
  5290. +In programs, give two arguments, the starting and ending
  5291. +character positions to operate on.
  5292. +
  5293. +(capitalize-region B E)Fupcase-word
  5294. +Convert following word (or ARG words) to upper case, moving over.
  5295. +With negative argument, convert previous words but do not move.
  5296. +See also `capitalize-word'.
  5297. +
  5298. +(upcase-word ARG)Fdowncase-word
  5299. +Convert following word (or ARG words) to lower case, moving over.
  5300. +With negative argument, convert previous words but do not move.
  5301. +
  5302. +(downcase-word ARG)Fcapitalize-word
  5303. +Capitalize the following word (or ARG words), moving over.
  5304. +This gives the word(s) a first character in upper case
  5305. +and the rest lower case.
  5306. +With negative argument, capitalize previous words but do not move.
  5307. +
  5308. +(capitalize-word ARG)Fcurrent-column
  5309. +Return the horizontal position of point.  Beginning of line is column 0.
  5310. +This is calculated by adding together the widths of all the displayed
  5311. +representations of the character between the start of the previous line
  5312. +and point.  (eg control characters will have a width of 2 or 4, tabs
  5313. +will have a variable width)
  5314. +Ignores finite width of frame, which means that this function may return
  5315. +values greater than (frame-width).
  5316. +Whether the line is visible (if `selective-display' is t) has no effect;
  5317. +however, ^M is treated as end of line when `selective-display' is t.
  5318. +
  5319. +(current-column)Findent-to
  5320. +Indent from point with tabs and spaces until COLUMN is reached.
  5321. +Optional second argument MIN says always do at least MIN spaces
  5322. +even if that goes past COLUMN; by default, MIN is zero.
  5323. +
  5324. +(indent-to COL &optional MINIMUM)Fcurrent-indentation
  5325. +Return the indentation of the current line.
  5326. +This is the horizontal position of the character
  5327. +following any initial whitespace.
  5328. +
  5329. +(current-indentation)Fmove-to-column
  5330. +Move point to column COLUMN in the current line.
  5331. +The column of a character is calculated by adding together the widths
  5332. +as displayed of the previous characters in the line.
  5333. +This function ignores line-continuation;
  5334. +there is no upper limit on the column number a character can have
  5335. +and horizontal scrolling has no effect.
  5336. +
  5337. +If specified column is within a character, point goes after that character.
  5338. +If it's past end of line, point goes to end of line.
  5339. +
  5340. +A non-nil second (optional) argument FORCE means, if the line
  5341. +is too short to reach column COLUMN then add spaces/tabs to get there,
  5342. +and if COLUMN is in the middle of a tab character, change it to spaces.
  5343. +
  5344. +(move-to-column COLUMN &optional FORCE)Fcompute-motion
  5345. +Scan through the current buffer, calculating screen position.
  5346. +Scan the current buffer forward from offset FROM,
  5347. +assuming it is at position FROMPOS--a cons of the form (HPOS . VPOS)--
  5348. +to position TO or position TOPOS--another cons of the form (HPOS . VPOS)--
  5349. +and return the ending buffer position and screen location.
  5350. +
  5351. +There are three additional arguments:
  5352. +
  5353. +WIDTH is the number of columns available to display text;
  5354. +this affects handling of continuation lines.
  5355. +This is usually the value returned by `window-width', less one (to allow
  5356. +for the continuation glyph).
  5357. +
  5358. +OFFSETS is either nil or a cons cell (HSCROLL . TAB-OFFSET).
  5359. +HSCROLL is the number of columns not being displayed at the left
  5360. +margin; this is usually taken from a window's hscroll member.
  5361. +TAB-OFFSET is the number of columns of the first tab that aren't
  5362. +being displayed, perhaps because the line was continued within it.
  5363. +If OFFSETS is nil, HSCROLL and TAB-OFFSET are assumed to be zero.
  5364. +
  5365. +WINDOW is the window to operate on.  Currently this is used only to
  5366. +find the display table.  It does not matter what buffer WINDOW displays;
  5367. +`compute-motion' always operates on the current buffer.
  5368. +
  5369. +The value is a list of five elements:
  5370. +  (POS HPOS VPOS PREVHPOS CONTIN)
  5371. +POS is the buffer position where the scan stopped.
  5372. +VPOS is the vertical position where the scan stopped.
  5373. +HPOS is the horizontal position where the scan stopped.
  5374. +
  5375. +PREVHPOS is the horizontal position one character back from POS.
  5376. +CONTIN is t if a line was continued after (or within) the previous character.
  5377. +
  5378. +For example, to find the buffer position of column COL of line LINE
  5379. +of a certain window, pass the window's starting location as FROM
  5380. +and the window's upper-left coordinates as FROMPOS.
  5381. +Pass the buffer's (point-max) as TO, to limit the scan to the end of the
  5382. +visible section of the buffer, and pass LINE and COL as TOPOS.
  5383. +
  5384. +(compute-motion FROM FROMPOS TO TOPOS WIDTH OFFSETS WINDOW)Fvertical-motion
  5385. +Move to start of screen line LINES lines down.
  5386. +If LINES is negative, this is moving up.
  5387. +
  5388. +The optional second argument WINDOW specifies the window to use for
  5389. +parameters such as width, horizontal scrolling, and so on.
  5390. +the default is the selected window.
  5391. +It does not matter what buffer is displayed in WINDOW.
  5392. +`vertical-motion' always uses the current buffer.
  5393. +
  5394. +Sets point to position found; this may be start of line
  5395. +or just the start of a continuation line.
  5396. +Returns number of lines moved; may be closer to zero than LINES
  5397. +if beginning or end of buffer was reached.
  5398. +
  5399. +(vertical-motion LINES &optional WINDOW)Vindent-tabs-mode
  5400. +*Indentation can insert tabs if this is non-nil.
  5401. +Setting this variable automatically makes it local to the current buffer.Flooking-at
  5402. +Return t if text after point matches regular expression PAT.
  5403. +This function modifies the match data that `match-beginning',
  5404. +`match-end' and `match-data' access; save and restore the match
  5405. +data if you want to preserve them.
  5406. +
  5407. +(looking-at STRING)Fstring-match
  5408. +Return index of start of first match for REGEXP in STRING, or nil.
  5409. +If third arg START is non-nil, start search at that index in STRING.
  5410. +For index of first char beyond the match, do (match-end 0).
  5411. +`match-end' and `match-beginning' also give indices of substrings
  5412. +matched by parenthesis constructs in the pattern.
  5413. +
  5414. +(string-match REGEXP STRING &optional START)Fskip-chars-forward
  5415. +Move point forward, stopping before a char not in STRING, or at pos LIM.
  5416. +STRING is like the inside of a `[...]' in a regular expression
  5417. +except that `]' is never special and `\' quotes `^', `-' or `\'.
  5418. +Thus, with arg "a-zA-Z", this skips letters stopping before first nonletter.
  5419. +With arg "^a-zA-Z", skips nonletters stopping before first letter.
  5420. +Returns the distance traveled, either zero or positive.
  5421. +
  5422. +(skip-chars-forward STRING &optional LIM)Fskip-chars-backward
  5423. +Move point backward, stopping after a char not in STRING, or at pos LIM.
  5424. +See `skip-chars-forward' for details.
  5425. +Returns the distance traveled, either zero or negative.
  5426. +
  5427. +(skip-chars-backward STRING &optional LIM)Fskip-syntax-forward
  5428. +Move point forward across chars in specified syntax classes.
  5429. +SYNTAX is a string of syntax code characters.
  5430. +Stop before a char whose syntax is not in SYNTAX, or at position LIM.
  5431. +If SYNTAX starts with ^, skip characters whose syntax is NOT in SYNTAX.
  5432. +This function returns the distance traveled, either zero or positive.
  5433. +
  5434. +(skip-syntax-forward SYNTAX &optional LIM)Fskip-syntax-backward
  5435. +Move point backward across chars in specified syntax classes.
  5436. +SYNTAX is a string of syntax code characters.
  5437. +Stop on reaching a char whose syntax is not in SYNTAX, or at position LIM.
  5438. +If SYNTAX starts with ^, skip characters whose syntax is NOT in SYNTAX.
  5439. +This function returns the distance traveled, either zero or negative.
  5440. +
  5441. +(skip-syntax-backward SYNTAX &optional LIM)Fsearch-backward
  5442. +Search backward from point for STRING.
  5443. +Set point to the beginning of the occurrence found, and return point.
  5444. +An optional second argument bounds the search; it is a buffer position.
  5445. +The match found must not extend before that position.
  5446. +Optional third argument, if t, means if fail just return nil (no error).
  5447. + If not nil and not t, position at limit of search and return nil.
  5448. +Optional fourth argument is repeat count--search for successive occurrences.
  5449. +See also the functions `match-beginning', `match-end' and `replace-match'.
  5450. +
  5451. +(search-backward STRING &optional BOUND NOERROR COUNT)Fsearch-forward
  5452. +Search forward from point for STRING.
  5453. +Set point to the end of the occurrence found, and return point.
  5454. +An optional second argument bounds the search; it is a buffer position.
  5455. +The match found must not extend after that position.  nil is equivalent
  5456. +  to (point-max).
  5457. +Optional third argument, if t, means if fail just return nil (no error).
  5458. +  If not nil and not t, move to limit of search and return nil.
  5459. +Optional fourth argument is repeat count--search for successive occurrences.
  5460. +See also the functions `match-beginning', `match-end' and `replace-match'.
  5461. +
  5462. +(search-forward STRING &optional BOUND NOERROR COUNT)Fword-search-backward
  5463. +Search backward from point for STRING, ignoring differences in punctuation.
  5464. +Set point to the beginning of the occurrence found, and return point.
  5465. +An optional second argument bounds the search; it is a buffer position.
  5466. +The match found must not extend before that position.
  5467. +Optional third argument, if t, means if fail just return nil (no error).
  5468. +  If not nil and not t, move to limit of search and return nil.
  5469. +Optional fourth argument is repeat count--search for successive occurrences.
  5470. +
  5471. +(word-search-backward STRING &optional BOUND NOERROR COUNT)Fword-search-forward
  5472. +Search forward from point for STRING, ignoring differences in punctuation.
  5473. +Set point to the end of the occurrence found, and return point.
  5474. +An optional second argument bounds the search; it is a buffer position.
  5475. +The match found must not extend after that position.
  5476. +Optional third argument, if t, means if fail just return nil (no error).
  5477. +  If not nil and not t, move to limit of search and return nil.
  5478. +Optional fourth argument is repeat count--search for successive occurrences.
  5479. +
  5480. +(word-search-forward STRING &optional BOUND NOERROR COUNT)Fre-search-backward
  5481. +Search backward from point for match for regular expression REGEXP.
  5482. +Set point to the beginning of the match, and return point.
  5483. +The match found is the one starting last in the buffer
  5484. +and yet ending before the origin of the search.
  5485. +An optional second argument bounds the search; it is a buffer position.
  5486. +The match found must start at or after that position.
  5487. +Optional third argument, if t, means if fail just return nil (no error).
  5488. +  If not nil and not t, move to limit of search and return nil.
  5489. +Optional fourth argument is repeat count--search for successive occurrences.
  5490. +See also the functions `match-beginning', `match-end' and `replace-match'.
  5491. +
  5492. +(re-search-backward REGEXP &optional BOUND NOERROR COUNT)Fre-search-forward
  5493. +Search forward from point for regular expression REGEXP.
  5494. +Set point to the end of the occurrence found, and return point.
  5495. +An optional second argument bounds the search; it is a buffer position.
  5496. +The match found must not extend after that position.
  5497. +Optional third argument, if t, means if fail just return nil (no error).
  5498. +  If not nil and not t, move to limit of search and return nil.
  5499. +Optional fourth argument is repeat count--search for successive occurrences.
  5500. +See also the functions `match-beginning', `match-end' and `replace-match'.
  5501. +
  5502. +(re-search-forward REGEXP &optional BOUND NOERROR COUNT)Freplace-match
  5503. +Replace text matched by last search with NEWTEXT.
  5504. +If second arg FIXEDCASE is non-nil, do not alter case of replacement text.
  5505. +Otherwise maybe capitalize the whole text, or maybe just word initials,
  5506. +based on the replaced text.
  5507. +If the replaced text has only capital letters
  5508. +and has at least one multiletter word, convert NEWTEXT to all caps.
  5509. +If the replaced text has at least one word starting with a capital letter,
  5510. +then capitalize each word in NEWTEXT.
  5511. +
  5512. +If third arg LITERAL is non-nil, insert NEWTEXT literally.
  5513. +Otherwise treat `\' as special:
  5514. +  `\&' in NEWTEXT means substitute original matched text.
  5515. +  `\N' means substitute what matched the Nth `\(...\)'.
  5516. +       If Nth parens didn't match, substitute nothing.
  5517. +  `\\' means insert one `\'.
  5518. +FIXEDCASE and LITERAL are optional arguments.
  5519. +Leaves point at end of replacement text.
  5520. +
  5521. +(replace-match NEWTEXT &optional FIXEDCASE LITERAL)Fmatch-beginning
  5522. +Return position of start of text matched by last search.
  5523. +NUM specifies which parenthesized expression in the last regexp.
  5524. + Value is nil if NUMth pair didn't match, or there were less than NUM pairs.
  5525. +Zero means the entire text matched by the whole regexp or whole string.
  5526. +
  5527. +(match-beginning NUM)Fmatch-end
  5528. +Return position of end of text matched by last search.
  5529. +ARG, a number, specifies which parenthesized expression in the last regexp.
  5530. + Value is nil if ARGth pair didn't match, or there were less than ARG pairs.
  5531. +Zero means the entire text matched by the whole regexp or whole string.
  5532. +
  5533. +(match-end NUM)Fmatch-data
  5534. +Return a list containing all info on what the last search matched.
  5535. +Element 2N is `(match-beginning N)'; element 2N + 1 is `(match-end N)'.
  5536. +All the elements are markers or nil (nil if the Nth pair didn't match)
  5537. +if the last match was on a buffer; integers or nil if a string was matched.
  5538. +Use `store-match-data' to reinstate the data in this list.
  5539. +
  5540. +(match-data)Fstore-match-data
  5541. +Set internal data on last search match from elements of LIST.
  5542. +LIST should have been created by calling `match-data' previously.
  5543. +
  5544. +(store-match-data LIST)Fregexp-quote
  5545. +Return a regexp string which matches exactly STRING and nothing else.
  5546. +
  5547. +(regexp-quote STR)Fundo-boundary
  5548. +Mark a boundary between units of undo.
  5549. +An undo command will stop at this point,
  5550. +but another undo command will undo to the previous boundary.
  5551. +
  5552. +(undo-boundary)Fprimitive-undo
  5553. +Undo N records from the front of the list LIST.
  5554. +Return what remains of the list.
  5555. +
  5556. +(primitive-undo N LIST)Fcons
  5557. +Create a new cons, give it CAR and CDR as components, and return it.
  5558. +
  5559. +(cons CAR CDR)Flist
  5560. +Return a newly created list with specified arguments as elements.
  5561. +Any number of arguments, even zero arguments, are allowed.Fmake-list
  5562. +Return a newly created list of length LENGTH, with each element being INIT.
  5563. +
  5564. +(make-list LENGTH INIT)Fmake-vector
  5565. +Return a newly created vector of length LENGTH, with each element being INIT.
  5566. +See also the function `vector'.
  5567. +
  5568. +(make-vector LENGTH INIT)Fvector
  5569. +Return a newly created vector with specified arguments as elements.
  5570. +Any number of arguments, even zero arguments, are allowed.Fmake-byte-code
  5571. +Create a byte-code object with specified arguments as elements.
  5572. +The arguments should be the arglist, bytecode-string, constant vector,
  5573. +stack size, (optional) doc string, and (optional) interactive spec.
  5574. +The first four arguments are required; at most six have any
  5575. +significance.Fmake-symbol
  5576. +Return a newly allocated uninterned symbol whose name is NAME.
  5577. +Its value and function definition are void, and its property list is nil.
  5578. +
  5579. +(make-symbol STR)Fmake-marker
  5580. +Return a newly allocated marker which does not point at any place.
  5581. +
  5582. +(make-marker)Fmake-string
  5583. +Return a newly created string of length LENGTH, with each element being INIT.
  5584. +Both LENGTH and INIT must be numbers.
  5585. +
  5586. +(make-string LENGTH INIT)Fpurecopy
  5587. +Make a copy of OBJECT in pure storage.
  5588. +Recursively copies contents of vectors and cons cells.
  5589. +Does not copy symbols.
  5590. +
  5591. +(purecopy OBJ)Fgarbage-collect
  5592. +Reclaim storage for Lisp objects no longer needed.
  5593. +Returns info on amount of space in use:
  5594. + ((USED-CONSES . FREE-CONSES) (USED-SYMS . FREE-SYMS)
  5595. +  (USED-MARKERS . FREE-MARKERS) USED-STRING-CHARS USED-VECTOR-SLOTS
  5596. +  (USED-FLOATS . FREE-FLOATS))
  5597. +Garbage collection happens automatically if you cons more than
  5598. +`gc-cons-threshold' bytes of Lisp data since previous garbage collection.
  5599. +
  5600. +(garbage-collect)Fmemory-limit
  5601. +Return the address of the last byte Emacs has allocated, divided by 1024.
  5602. +This may be helpful in debugging Emacs's memory usage.
  5603. +We divide the value by 1024 to make sure it fits in a Lisp integer.
  5604. +
  5605. +(memory-limit)Vgc-cons-threshold
  5606. +*Number of bytes of consing between garbage collections.
  5607. +Garbage collection can happen automatically once this many bytes have been
  5608. +allocated since the last garbage collection.  All data types count.
  5609. +
  5610. +Garbage collection happens automatically only when `eval' is called.
  5611. +
  5612. +By binding this temporarily to a large number, you can effectively
  5613. +prevent garbage collection during a part of the program.Vpure-bytes-used
  5614. +Number of bytes of sharable Lisp data allocated so far.Vdata-bytes-used
  5615. +Number of bytes of unshared memory allocated in this session.Vdata-bytes-free
  5616. +Number of bytes of unshared memory remaining available in this session.Vpurify-flag
  5617. +Non-nil means loading Lisp code in order to dump an executable.
  5618. +This means that certain objects should be allocated in shared (pure) space.Vundo-limit
  5619. +Keep no more undo information once it exceeds this size.
  5620. +This limit is applied when garbage collection happens.
  5621. +The size is counted as the number of bytes occupied,
  5622. +which includes both saved text and other data.Vundo-strong-limit
  5623. +Don't keep more than this much size of undo information.
  5624. +A command which pushes past this size is itself forgotten.
  5625. +This limit is applied when garbage collection happens.
  5626. +The size is counted as the number of bytes occupied,
  5627. +which includes both saved text and other data.Feq
  5628. +T if the two args are the same Lisp object.
  5629. +
  5630. +(eq OBJ1 OBJ2)Fnull
  5631. +T if OBJECT is nil.
  5632. +
  5633. +(null OBJ)Fconsp
  5634. +T if OBJECT is a cons cell.
  5635. +
  5636. +(consp OBJ)Fatom
  5637. +T if OBJECT is not a cons cell.  This includes nil.
  5638. +
  5639. +(atom OBJ)Flistp
  5640. +T if OBJECT is a list.  This includes nil.
  5641. +
  5642. +(listp OBJ)Fnlistp
  5643. +T if OBJECT is not a list.  Lists include nil.
  5644. +
  5645. +(nlistp OBJ)Fsymbolp
  5646. +T if OBJECT is a symbol.
  5647. +
  5648. +(symbolp OBJ)Fvectorp
  5649. +T if OBJECT is a vector.
  5650. +
  5651. +(vectorp OBJ)Fstringp
  5652. +T if OBJECT is a string.
  5653. +
  5654. +(stringp OBJ)Farrayp
  5655. +T if OBJECT is an array (string or vector).
  5656. +
  5657. +(arrayp OBJ)Fsequencep
  5658. +T if OBJECT is a sequence (list or array).
  5659. +
  5660. +(sequencep OBJ)Fbufferp
  5661. +T if OBJECT is an editor buffer.
  5662. +
  5663. +(bufferp OBJ)Fmarkerp
  5664. +T if OBJECT is a marker (editor pointer).
  5665. +
  5666. +(markerp OBJ)Fsubrp
  5667. +T if OBJECT is a built-in function.
  5668. +
  5669. +(subrp OBJ)Fbyte-code-function-p
  5670. +T if OBJECT is a byte-compiled function object.
  5671. +
  5672. +(byte-code-function-p OBJ)Fchar-or-string-p
  5673. +T if OBJECT is a character (an integer) or a string.
  5674. +
  5675. +(char-or-string-p OBJ)Fintegerp
  5676. +T if OBJECT is an integer.
  5677. +
  5678. +(integerp OBJ)Finteger-or-marker-p
  5679. +T if OBJECT is an integer or a marker (editor pointer).
  5680. +
  5681. +(integer-or-marker-p OBJ)Fnatnump
  5682. +T if OBJECT is a nonnegative integer.
  5683. +
  5684. +(natnump OBJ)Fnumberp
  5685. +T if OBJECT is a number (floating point or integer).
  5686. +
  5687. +(numberp OBJ)Fnumber-or-marker-p
  5688. +T if OBJECT is a number or a marker.
  5689. +
  5690. +(number-or-marker-p OBJ)Ffloatp
  5691. +T if OBJECT is a floating point number.
  5692. +
  5693. +(floatp OBJ)Fcar
  5694. +Return the car of CONSCELL.  If arg is nil, return nil.
  5695. +Error if arg is not nil and not a cons cell.  See also `car-safe'.
  5696. +
  5697. +(car LIST)Fcar-safe
  5698. +Return the car of OBJECT if it is a cons cell, or else nil.
  5699. +
  5700. +(car-safe OBJECT)Fcdr
  5701. +Return the cdr of CONSCELL.  If arg is nil, return nil.
  5702. +Error if arg is not nil and not a cons cell.  See also `cdr-safe'.
  5703. +
  5704. +(cdr LIST)Fcdr-safe
  5705. +Return the cdr of OBJECT if it is a cons cell, or else  nil.
  5706. +
  5707. +(cdr-safe OBJECT)Fsetcar
  5708. +Set the car of CONSCELL to be NEWCAR.  Returns NEWCAR.
  5709. +
  5710. +(setcar CELL NEWCAR)Fsetcdr
  5711. +Set the cdr of CONSCELL to be NEWCDR.  Returns NEWCDR.
  5712. +
  5713. +(setcdr CELL NEWCDR)Fboundp
  5714. +T if SYMBOL's value is not void.
  5715. +
  5716. +(boundp SYM)Ffboundp
  5717. +T if SYMBOL's function definition is not void.
  5718. +
  5719. +(fboundp SYM)Fmakunbound
  5720. +Make SYMBOL's value be void.
  5721. +
  5722. +(makunbound SYM)Ffmakunbound
  5723. +Make SYMBOL's function definition be void.
  5724. +
  5725. +(fmakunbound SYM)Fsymbol-function
  5726. +Return SYMBOL's function definition.  Error if that is void.
  5727. +
  5728. +(symbol-function SYMBOL)Fsymbol-plist
  5729. +Return SYMBOL's property list.
  5730. +
  5731. +(symbol-plist SYM)Fsymbol-name
  5732. +Return SYMBOL's name, a string.
  5733. +
  5734. +(symbol-name SYM)Ffset
  5735. +Set SYMBOL's function definition to NEWVAL, and return NEWVAL.
  5736. +
  5737. +(fset SYM NEWDEF)Fdefalias
  5738. +Set SYMBOL's function definition to NEWVAL, and return NEWVAL.
  5739. +Associates the function with the current load file, if any.
  5740. +
  5741. +(defalias SYM NEWDEF)Fdefine-function
  5742. +Set SYMBOL's function definition to NEWVAL, and return NEWVAL.
  5743. +Associates the function with the current load file, if any.
  5744. +
  5745. +(define-function SYM NEWDEF)Fsetplist
  5746. +Set SYMBOL's property list to NEWVAL, and return NEWVAL.
  5747. +
  5748. +(setplist SYM NEWPLIST)Fsymbol-value
  5749. +Return SYMBOL's value.  Error if that is void.
  5750. +
  5751. +(symbol-value SYM)Fset
  5752. +Set SYMBOL's value to NEWVAL, and return NEWVAL.
  5753. +
  5754. +(set SYM NEWVAL)Fdefault-boundp
  5755. +Return T if SYMBOL has a non-void default value.
  5756. +This is the value that is seen in buffers that do not have their own values
  5757. +for this variable.
  5758. +
  5759. +(default-boundp SYM)Fdefault-value
  5760. +Return SYMBOL's default value.
  5761. +This is the value that is seen in buffers that do not have their own values
  5762. +for this variable.  The default value is meaningful for variables with
  5763. +local bindings in certain buffers.
  5764. +
  5765. +(default-value SYM)Fset-default
  5766. +Set SYMBOL's default value to VAL.  SYMBOL and VAL are evaluated.
  5767. +The default value is seen in buffers that do not have their own values
  5768. +for this variable.
  5769. +
  5770. +(set-default SYM VALUE)Fsetq-default
  5771. +Set the default value of variable VAR to VALUE.
  5772. +VAR, the variable name, is literal (not evaluated);
  5773. +VALUE is an expression and it is evaluated.
  5774. +The default value of a variable is seen in buffers
  5775. +that do not have their own values for the variable.
  5776. +
  5777. +More generally, you can use multiple variables and values, as in
  5778. +  (setq-default SYM VALUE SYM VALUE...)
  5779. +This sets each SYM's default value to the corresponding VALUE.
  5780. +The VALUE for the Nth SYM can refer to the new default values
  5781. +of previous SYMs.Fmake-variable-buffer-local
  5782. +Make VARIABLE have a separate value for each buffer.
  5783. +At any time, the value for the current buffer is in effect.
  5784. +There is also a default value which is seen in any buffer which has not yet
  5785. +set its own value.
  5786. +Using `set' or `setq' to set the variable causes it to have a separate value
  5787. +for the current buffer if it was previously using the default value.
  5788. +The function `default-value' gets the default value and `set-default' sets it.
  5789. +
  5790. +(make-variable-buffer-local SYM)Fmake-local-variable
  5791. +Make VARIABLE have a separate value in the current buffer.
  5792. +Other buffers will continue to share a common default value.
  5793. +(The buffer-local value of VARIABLE starts out as the same value
  5794. +VARIABLE previously had.  If VARIABLE was void, it remains void.)
  5795. +See also `make-variable-buffer-local'.
  5796. +
  5797. +If the variable is already arranged to become local when set,
  5798. +this function causes a local value to exist for this buffer,
  5799. +just as if the variable were set.
  5800. +
  5801. +(make-local-variable SYM)Fkill-local-variable
  5802. +Make VARIABLE no longer have a separate value in the current buffer.
  5803. +From now on the default value will apply in this buffer.
  5804. +
  5805. +(kill-local-variable SYM)Findirect-function
  5806. +Return the function at the end of OBJECT's function chain.
  5807. +If OBJECT is a symbol, follow all function indirections and return the final
  5808. +function binding.
  5809. +If OBJECT is not a symbol, just return it.
  5810. +Signal a void-function error if the final symbol is unbound.
  5811. +Signal a cyclic-function-indirection error if there is a loop in the
  5812. +function chain of symbols.
  5813. +
  5814. +(indirect-function OBJECT)Faref
  5815. +Return the element of ARRAY at index INDEX.
  5816. +ARRAY may be a vector or a string, or a byte-code object.  INDEX starts at 0.
  5817. +
  5818. +(aref ARRAY IDX)Faset
  5819. +Store into the element of ARRAY at index IDX the value NEWELT.
  5820. +ARRAY may be a vector or a string.  IDX starts at 0.
  5821. +
  5822. +(aset ARRAY IDX NEWELT)F=
  5823. +T if two args, both numbers or markers, are equal.
  5824. +
  5825. +(= NUM1 NUM2)F<
  5826. +T if first arg is less than second arg.  Both must be numbers or markers.
  5827. +
  5828. +(< NUM1 NUM2)F>
  5829. +T if first arg is greater than second arg.  Both must be numbers or markers.
  5830. +
  5831. +(> NUM1 NUM2)F<=
  5832. +T if first arg is less than or equal to second arg.
  5833. +Both must be numbers or markers.
  5834. +
  5835. +(<= NUM1 NUM2)F>=
  5836. +T if first arg is greater than or equal to second arg.
  5837. +Both must be numbers or markers.
  5838. +
  5839. +(>= NUM1 NUM2)F/=
  5840. +T if first arg is not equal to second arg.  Both must be numbers or markers.
  5841. +
  5842. +(/= NUM1 NUM2)Fzerop
  5843. +T if NUMBER is zero.
  5844. +
  5845. +(zerop NUM)Fnumber-to-string
  5846. +Convert NUM to a string by printing it in decimal.
  5847. +Uses a minus sign if negative.
  5848. +NUM may be an integer or a floating point number.
  5849. +
  5850. +(number-to-string NUM)Fstring-to-number
  5851. +Convert STRING to a number by parsing it as a decimal number.
  5852. +This parses both integers and floating point numbers.
  5853. +It ignores leading spaces and tabs.
  5854. +
  5855. +(string-to-number STR)F+
  5856. +Return sum of any number of arguments, which are numbers or markers.F-
  5857. +Negate number or subtract numbers or markers.
  5858. +With one arg, negates it.  With more than one arg,
  5859. +subtracts all but the first from the first.F*
  5860. +Returns product of any number of arguments, which are numbers or markers.F/
  5861. +Returns first argument divided by all the remaining arguments.
  5862. +The arguments must be numbers or markers.F%
  5863. +Returns remainder of first arg divided by second.
  5864. +Both must be integers or markers.
  5865. +
  5866. +(% NUM1 NUM2)Fmod
  5867. +Returns X modulo Y.
  5868. +The result falls between zero (inclusive) and Y (exclusive).
  5869. +Both X and Y must be numbers or markers.
  5870. +
  5871. +(mod NUM1 NUM2)Fmax
  5872. +Return largest of all the arguments (which must be numbers or markers).
  5873. +The value is always a number; markers are converted to numbers.Fmin
  5874. +Return smallest of all the arguments (which must be numbers or markers).
  5875. +The value is always a number; markers are converted to numbers.Flogand
  5876. +Return bitwise-and of all the arguments.
  5877. +Arguments may be integers, or markers converted to integers.Flogior
  5878. +Return bitwise-or of all the arguments.
  5879. +Arguments may be integers, or markers converted to integers.Flogxor
  5880. +Return bitwise-exclusive-or of all the arguments.
  5881. +Arguments may be integers, or markers converted to integers.Fash
  5882. +Return VALUE with its bits shifted left by COUNT.
  5883. +If COUNT is negative, shifting is actually to the right.
  5884. +In this case, the sign bit is duplicated.
  5885. +
  5886. +(ash NUM1 NUM2)Flsh
  5887. +Return VALUE with its bits shifted left by COUNT.
  5888. +If COUNT is negative, shifting is actually to the right.
  5889. +In this case,  zeros are shifted in on the left.
  5890. +
  5891. +(lsh NUM1 NUM2)F1+
  5892. +Return NUMBER plus one.  NUMBER may be a number or a marker.
  5893. +Markers are converted to integers.
  5894. +
  5895. +(1+ NUM)F1-
  5896. +Return NUMBER minus one.  NUMBER may be a number or a marker.
  5897. +Markers are converted to integers.
  5898. +
  5899. +(1- NUM)Flognot
  5900. +Return the bitwise complement of ARG.  ARG must be an integer.
  5901. +
  5902. +(lognot NUM)Fdocumentation
  5903. +Return the documentation string of FUNCTION.
  5904. +Unless a non-nil second argument is given, the
  5905. +string is passed through `substitute-command-keys'.
  5906. +
  5907. +(documentation FUNCTION &optional RAW)Fdocumentation-property
  5908. +Return the documentation string that is SYMBOL's PROP property.
  5909. +This is like `get', but it can refer to strings stored in the
  5910. +`etc/DOC' file; and if the value is a string, it is passed through
  5911. +`substitute-command-keys'.  A non-nil third argument avoids this
  5912. +translation.
  5913. +
  5914. +(documentation-property SYM PROP &optional RAW)FSnarf-documentation
  5915. +Used during Emacs initialization, before dumping runnable Emacs,
  5916. +to find pointers to doc strings stored in `etc/DOC...' and
  5917. +record them in function definitions.
  5918. +One arg, FILENAME, a string which does not include a directory.
  5919. +The file is found in `../etc' now; found in the `data-directory'
  5920. +when doc strings are referred to later in the dumped Emacs.
  5921. +
  5922. +(Snarf-documentation FILENAME)Fsubstitute-command-keys
  5923. +Substitute key descriptions for command names in STRING.
  5924. +Return a new string which is STRING with substrings of the form \=\[COMMAND]
  5925. +replaced by either:  a keystroke sequence that will invoke COMMAND,
  5926. +or "M-x COMMAND" if COMMAND is not on any keys.
  5927. +Substrings of the form \=\{MAPVAR} are replaced by summaries
  5928. +(made by describe-bindings) of the value of MAPVAR, taken as a keymap.
  5929. +Substrings of the form \=\<MAPVAR> specify to use the value of MAPVAR
  5930. +as the keymap for future \=\[COMMAND] substrings.
  5931. +\=\= quotes the following character and is discarded;
  5932. +thus, \=\=\=\= puts \=\= into the output, and \=\=\=\[ puts \=\[ into the output.
  5933. +
  5934. +(substitute-command-keys STR)Vinternal-doc-file-name
  5935. +Name of file containing documentation strings of built-in symbols.Fchar-to-string
  5936. +Convert arg CHAR to a one-character string containing that character.
  5937. +
  5938. +(char-to-string N)Fstring-to-char
  5939. +Convert arg STRING to a character, the first character of that string.
  5940. +
  5941. +(string-to-char STR)Fpoint
  5942. +Return value of point, as an integer.
  5943. +Beginning of buffer is position (point-min)
  5944. +
  5945. +(point)Fpoint-marker
  5946. +Return value of point, as a marker object.
  5947. +
  5948. +(point-marker)Fgoto-char
  5949. +Set point to POSITION, a number or marker.
  5950. +Beginning of buffer is position (point-min), end is (point-max).
  5951. +
  5952. +(goto-char N)Fregion-beginning
  5953. +Return position of beginning of region, as an integer.
  5954. +
  5955. +(region-beginning)Fregion-end
  5956. +Return position of end of region, as an integer.
  5957. +
  5958. +(region-end)Fmark
  5959. +Return this buffer's mark value as integer, or nil if no mark.
  5960. +If you are using this in an editing command, you are most likely making
  5961. +a mistake; see the documentation of `set-mark'.
  5962. +
  5963. +(mark)Fmark-marker
  5964. +Return this buffer's mark, as a marker object.
  5965. +Watch out!  Moving this marker changes the mark position.
  5966. +If you set the marker not to point anywhere, the buffer will have no mark.
  5967. +
  5968. +(mark-marker)Fset-mark
  5969. +Set this buffer's mark to POS.  Don't use this function!
  5970. +That is to say, don't use this function unless you want
  5971. +the user to see that the mark has moved, and you want the previous
  5972. +mark position to be lost.
  5973. +
  5974. +Normally, when a new mark is set, the old one should go on the stack.
  5975. +This is why most applications should use push-mark, not set-mark.
  5976. +
  5977. +Novice programmers often try to use the mark for the wrong purposes.
  5978. +The mark saves a location for the user's convenience.
  5979. +Most editing commands should not alter the mark.
  5980. +To remember a location for internal use in the Lisp program,
  5981. +store it in a Lisp variable.  Example:
  5982. +
  5983. +   (let ((beg (point))) (forward-line 1) (delete-region beg (point))).
  5984. +
  5985. +(set-mark POS)Fsave-excursion
  5986. +Save point, mark, and current buffer; execute BODY; restore those things.
  5987. +Executes BODY just like `progn'.
  5988. +The values of point, mark and the current buffer are restored
  5989. +even in case of abnormal exit (throw or error).
  5990. +The state of activation of the mark is also restored.Fbuffer-size
  5991. +Return the number of characters in the current buffer.
  5992. +
  5993. +(buffer-size)Fpoint-min
  5994. +Return the minimum permissible value of point in the current buffer.
  5995. +This is 1, unless narrowing (a buffer restriction) is in effect.
  5996. +
  5997. +(point-min)Fpoint-min-marker
  5998. +Return a marker to the minimum permissible value of point in this buffer.
  5999. +This is the beginning, unless narrowing (a buffer restriction) is in effect.
  6000. +
  6001. +(point-min-marker)Fpoint-max
  6002. +Return the maximum permissible value of point in the current buffer.
  6003. +This is (1+ (buffer-size)), unless narrowing (a buffer restriction)
  6004. +is in effect, in which case it is less.
  6005. +
  6006. +(point-max)Fpoint-max-marker
  6007. +Return a marker to the maximum permissible value of point in this buffer.
  6008. +This is (1+ (buffer-size)), unless narrowing (a buffer restriction)
  6009. +is in effect, in which case it is less.
  6010. +
  6011. +(point-max-marker)Ffollowing-char
  6012. +Return the character following point, as a number.
  6013. +At the end of the buffer or accessible region, return 0.
  6014. +
  6015. +(following-char)Fpreceding-char
  6016. +Return the character preceding point, as a number.
  6017. +At the beginning of the buffer or accessible region, return 0.
  6018. +
  6019. +(preceding-char)Fbobp
  6020. +Return T if point is at the beginning of the buffer.
  6021. +If the buffer is narrowed, this means the beginning of the narrowed part.
  6022. +
  6023. +(bobp)Feobp
  6024. +Return T if point is at the end of the buffer.
  6025. +If the buffer is narrowed, this means the end of the narrowed part.
  6026. +
  6027. +(eobp)Fbolp
  6028. +Return T if point is at the beginning of a line.
  6029. +
  6030. +(bolp)Feolp
  6031. +Return T if point is at the end of a line.
  6032. +`End of a line' includes point being at the end of the buffer.
  6033. +
  6034. +(eolp)Fchar-after
  6035. +Return character in current buffer at position POS.
  6036. +POS is an integer or a buffer pointer.
  6037. +If POS is out of range, the value is nil.
  6038. +
  6039. +(char-after POS)Fuser-login-name
  6040. +Return the name under which the user logged in, as a string.
  6041. +This is based on the effective uid, not the real uid.
  6042. +Also, if the environment variable LOGNAME or USER is set,
  6043. +that determines the value of this function.
  6044. +
  6045. +(user-login-name)Fuser-real-login-name
  6046. +Return the name of the user's real uid, as a string.
  6047. +This ignores the environment variables LOGNAME and USER, so it differs from
  6048. +`user-login-name' when running under `su'.
  6049. +
  6050. +(user-real-login-name)Fuser-uid
  6051. +Return the effective uid of Emacs, as an integer.
  6052. +
  6053. +(user-uid)Fuser-real-uid
  6054. +Return the real uid of Emacs, as an integer.
  6055. +
  6056. +(user-real-uid)Fuser-full-name
  6057. +Return the full name of the user logged in, as a string.
  6058. +
  6059. +(user-full-name)Fsystem-name
  6060. +Return the name of the machine you are running on, as a string.
  6061. +
  6062. +(system-name)Femacs-pid
  6063. +Return the process ID of Emacs, as an integer.
  6064. +
  6065. +(emacs-pid)Fcurrent-time
  6066. +Return the current time, as the number of seconds since 12:00 AM January 1970.
  6067. +The time is returned as a list of three integers.  The first has the
  6068. +most significant 16 bits of the seconds, while the second has the
  6069. +least significant 16 bits.  The third integer gives the microsecond
  6070. +count.
  6071. +
  6072. +The microsecond count is zero on systems that do not provide
  6073. +resolution finer than a second.
  6074. +
  6075. +(current-time)Fcurrent-time-string
  6076. +Return the current time, as a human-readable string.
  6077. +Programs can use this function to decode a time,
  6078. +since the number of columns in each field is fixed.
  6079. +The format is `Sun Sep 16 01:03:52 1973'.
  6080. +If an argument is given, it specifies a time to format
  6081. +instead of the current time.  The argument should have the form:
  6082. +  (HIGH . LOW)
  6083. +or the form:
  6084. +  (HIGH LOW . IGNORED).
  6085. +Thus, you can use times obtained from `current-time'
  6086. +and from `file-attributes'.
  6087. +
  6088. +(current-time-string &optional SPECIFIED-TIME)Fcurrent-time-zone
  6089. +Return the offset and name for the local time zone.
  6090. +This returns a list of the form (OFFSET NAME).
  6091. +OFFSET is an integer number of seconds ahead of UTC (east of Greenwich).
  6092. +    A negative value means west of Greenwich.
  6093. +NAME is a string giving the name of the time zone.
  6094. +If an argument is given, it specifies when the time zone offset is determined
  6095. +instead of using the current time.  The argument should have the form:
  6096. +  (HIGH . LOW)
  6097. +or the form:
  6098. +  (HIGH LOW . IGNORED).
  6099. +Thus, you can use times obtained from `current-time'
  6100. +and from `file-attributes'.
  6101. +
  6102. +Some operating systems cannot provide all this information to Emacs;
  6103. +in this case, `current-time-zone' returns a list containing nil for
  6104. +the data it can't find.
  6105. +
  6106. +(current-time-zone &optional SPECIFIED-TIME)Finsert
  6107. +Insert the arguments, either strings or characters, at point.
  6108. +Point moves forward so that it ends up after the inserted text.
  6109. +Any other markers at the point of insertion remain before the text.Finsert-and-inherit
  6110. +Insert the arguments at point, inheriting properties from adjoining text.
  6111. +Point moves forward so that it ends up after the inserted text.
  6112. +Any other markers at the point of insertion remain before the text.Finsert-before-markers
  6113. +Insert strings or characters at point, relocating markers after the text.
  6114. +Point moves forward so that it ends up after the inserted text.
  6115. +Any other markers at the point of insertion also end up after the text.Finsert-before-markers-and-inherit
  6116. +Insert text at point, relocating markers and inheriting properties.
  6117. +Point moves forward so that it ends up after the inserted text.
  6118. +Any other markers at the point of insertion also end up after the text.Finsert-char
  6119. +Insert COUNT (second arg) copies of CHAR (first arg).
  6120. +Point and all markers are affected as in the function `insert'.
  6121. +Both arguments are required.
  6122. +The optional third arg INHERIT, if non-nil, says to inherit text properties
  6123. +from adjoining text, if those properties are sticky.
  6124. +
  6125. +(insert-char CHR COUNT &optional INHERIT)Fbuffer-substring
  6126. +Return the contents of part of the current buffer as a string.
  6127. +The two arguments START and END are character positions;
  6128. +they can be in either order.
  6129. +
  6130. +(buffer-substring B E)Fbuffer-string
  6131. +Return the contents of the current buffer as a string.
  6132. +
  6133. +(buffer-string)Finsert-buffer-substring
  6134. +Insert before point a substring of the contents of buffer BUFFER.
  6135. +BUFFER may be a buffer or a buffer name.
  6136. +Arguments START and END are character numbers specifying the substring.
  6137. +They default to the beginning and the end of BUFFER.
  6138. +
  6139. +(insert-buffer-substring BUF &optional B E)Fcompare-buffer-substrings
  6140. +Compare two substrings of two buffers; return result as number.
  6141. +the value is -N if first string is less after N-1 chars,
  6142. ++N if first string is greater after N-1 chars, or 0 if strings match.
  6143. +Each substring is represented as three arguments: BUFFER, START and END.
  6144. +That makes six args in all, three for each substring.
  6145. +
  6146. +The value of `case-fold-search' in the current buffer
  6147. +determines whether case is significant or ignored.
  6148. +
  6149. +(compare-buffer-substrings BUFFER1 START1 END1 BUFFER2 START2 END2)Fsubst-char-in-region
  6150. +From START to END, replace FROMCHAR with TOCHAR each time it occurs.
  6151. +If optional arg NOUNDO is non-nil, don't record this change for undo
  6152. +and don't mark the buffer as really changed.
  6153. +
  6154. +(subst-char-in-region START END FROMCHAR TOCHAR &optional NOUNDO)Ftranslate-region
  6155. +From START to END, translate characters according to TABLE.
  6156. +TABLE is a string; the Nth character in it is the mapping
  6157. +for the character with code N.  Returns the number of characters changed.
  6158. +
  6159. +(translate-region START END TABLE)Fdelete-region
  6160. +Delete the text between point and mark.
  6161. +When called from a program, expects two arguments,
  6162. +positions (integers or markers) specifying the stretch to be deleted.
  6163. +
  6164. +(delete-region B E)Fwiden
  6165. +Remove restrictions (narrowing) from current buffer.
  6166. +This allows the buffer's full text to be seen and edited.
  6167. +
  6168. +(widen)Fnarrow-to-region
  6169. +Restrict editing in this buffer to the current region.
  6170. +The rest of the text becomes temporarily invisible and untouchable
  6171. +but is not deleted; if you save the buffer in a file, the invisible
  6172. +text is included in the file.  \[widen] makes all visible again.
  6173. +See also `save-restriction'.
  6174. +
  6175. +When calling from a program, pass two arguments; positions (integers
  6176. +or markers) bounding the text that should remain visible.
  6177. +
  6178. +(narrow-to-region B E)Fsave-restriction
  6179. +Execute BODY, saving and restoring current buffer's restrictions.
  6180. +The buffer's restrictions make parts of the beginning and end invisible.
  6181. +(They are set up with `narrow-to-region' and eliminated with `widen'.)
  6182. +This special form, `save-restriction', saves the current buffer's restrictions
  6183. +when it is entered, and restores them when it is exited.
  6184. +So any `narrow-to-region' within BODY lasts only until the end of the form.
  6185. +The old restrictions settings are restored
  6186. +even in case of abnormal exit (throw or error).
  6187. +
  6188. +The value returned is the value of the last form in BODY.
  6189. +
  6190. +`save-restriction' can get confused if, within the BODY, you widen
  6191. +and then make changes outside the area within the saved restrictions.
  6192. +
  6193. +Note: if you are using both `save-excursion' and `save-restriction',
  6194. +use `save-excursion' outermost:
  6195. +    (save-excursion (save-restriction ...))Fmessage
  6196. +Print a one-line message at the bottom of the screen.
  6197. +The first argument is a control string.
  6198. +It may contain %s or %d or %c to print successive following arguments.
  6199. +%s means print an argument as a string, %d means print as number in decimal,
  6200. +%c means print a number as a single character.
  6201. +The argument used by %s must be a string or a symbol;
  6202. +the argument used by %d or %c must be a number.
  6203. +If the first argument is nil, clear any existing message; let the
  6204. +minibuffer contents show.Fformat
  6205. +Format a string out of a control-string and arguments.
  6206. +The first argument is a control string.
  6207. +The other arguments are substituted into it to make the result, a string.
  6208. +It may contain %-sequences meaning to substitute the next argument.
  6209. +%s means print a string argument.  Actually, prints any object, with `princ'.
  6210. +%d means print as number in decimal (%o octal, %x hex).
  6211. +%c means print a number as a single character.
  6212. +%S means print any object as an s-expression (using prin1).
  6213. +  The argument used for %d, %o, %x or %c must be a number.
  6214. +Use %% to put a single % into the output.Fchar-equal
  6215. +Return t if two characters match, optionally ignoring case.
  6216. +Both arguments must be characters (i.e. integers).
  6217. +Case is ignored if `case-fold-search' is non-nil in the current buffer.
  6218. +
  6219. +(char-equal C1 C2)Ftranspose-regions
  6220. +Transpose region START1 to END1 with START2 to END2.
  6221. +The regions may not be overlapping, because the size of the buffer is
  6222. +never changed in a transposition.
  6223. +
  6224. +Optional fifth arg LEAVE_MARKERS, if non-nil, means don't transpose
  6225. +any markers that happen to be located in the regions.
  6226. +
  6227. +Transposing beyond buffer boundaries is an error.
  6228. +
  6229. +(transpose-regions STARTR1 ENDR1 STARTR2 ENDR2 &optional LEAVE-MARKERS)Finteractive
  6230. +Specify a way of parsing arguments for interactive use of a function.
  6231. +For example, write
  6232. +  (defun foo (arg) "Doc string" (interactive "p") ...use arg...)
  6233. +to make ARG be the prefix argument when `foo' is called as a command.
  6234. +The "call" to `interactive' is actually a declaration rather than a function;
  6235. + it tells `call-interactively' how to read arguments
  6236. + to pass to the function.
  6237. +When actually called, `interactive' just returns nil.
  6238. +
  6239. +The argument of `interactive' is usually a string containing a code letter
  6240. + followed by a prompt.  (Some code letters do not use I/O to get
  6241. + the argument and do not need prompts.)  To prompt for multiple arguments,
  6242. + give a code letter, its prompt, a newline, and another code letter, etc.
  6243. + Prompts are passed to format, and may use % escapes to print the
  6244. + arguments that have already been read.
  6245. +If the argument is not a string, it is evaluated to get a list of
  6246. + arguments to pass to the function.
  6247. +Just `(interactive)' means pass no args when calling interactively.
  6248. +
  6249. +Code letters available are:
  6250. +a -- Function name: symbol with a function definition.
  6251. +b -- Name of existing buffer.
  6252. +B -- Name of buffer, possibly nonexistent.
  6253. +c -- Character.
  6254. +C -- Command name: symbol with interactive function definition.
  6255. +d -- Value of point as number.  Does not do I/O.
  6256. +D -- Directory name.
  6257. +e -- Parametrized event (i.e., one that's a list) that invoked this command.
  6258. +     If used more than once, the Nth `e' returns the Nth parameterized event.
  6259. +     This skips events that are integers or symbols.
  6260. +f -- Existing file name.
  6261. +F -- Possibly nonexistent file name.
  6262. +k -- Key sequence (string).
  6263. +m -- Value of mark as number.  Does not do I/O.
  6264. +n -- Number read using minibuffer.
  6265. +N -- Prefix arg converted to number, or if none, do like code `n'.
  6266. +p -- Prefix arg converted to number.  Does not do I/O.
  6267. +P -- Prefix arg in raw form.  Does not do I/O.
  6268. +r -- Region: point and mark as 2 numeric args, smallest first.  Does no I/O.
  6269. +s -- Any string.
  6270. +S -- Any symbol.
  6271. +v -- Variable name: symbol that is user-variable-p.
  6272. +x -- Lisp expression read but not evaluated.
  6273. +X -- Lisp expression read and evaluated.
  6274. +In addition, if the string begins with `*'
  6275. + then an error is signaled if the buffer is read-only.
  6276. + This happens before reading any arguments.
  6277. +If the string begins with `@', then Emacs searches the key sequence
  6278. + which invoked the command for its first mouse click (or any other
  6279. + event which specifies a window), and selects that window before
  6280. + reading any arguments.  You may use both `@' and `*'; they are
  6281. + processed in the order that they appear.
  6282. +
  6283. +(interactive ARGS)Fcall-interactively
  6284. +Call FUNCTION, reading args according to its interactive calling specs.
  6285. +The function contains a specification of how to do the argument reading.
  6286. +In the case of user-defined functions, this is specified by placing a call
  6287. +to the function `interactive' at the top level of the function body.
  6288. +See `interactive'.
  6289. +
  6290. +Optional second arg RECORD-FLAG non-nil
  6291. +means unconditionally put this command in the command-history.
  6292. +Otherwise, this is done only if an arg is read using the minibuffer.
  6293. +
  6294. +(call-interactively FUNCTION &optional RECORD)Fprefix-numeric-value
  6295. +Return numeric meaning of raw prefix argument ARG.
  6296. +A raw prefix argument is what you get from `(interactive "P")'.
  6297. +Its numeric meaning is what you would get from `(interactive "p")'.
  6298. +
  6299. +(prefix-numeric-value RAW)Vprefix-arg
  6300. +The value of the prefix argument for the next editing command.
  6301. +It may be a number, or the symbol `-' for just a minus sign as arg,
  6302. +or a list whose car is a number for just one or more C-U's
  6303. +or nil if no argument has been specified.
  6304. +
  6305. +You cannot examine this variable to find the argument for this command
  6306. +since it has been set to nil by the time you can look.
  6307. +Instead, you should use the variable `current-prefix-arg', although
  6308. +normally commands can get this prefix argument with (interactive "P").Vcurrent-prefix-arg
  6309. +The value of the prefix argument for this editing command.
  6310. +It may be a number, or the symbol `-' for just a minus sign as arg,
  6311. +or a list whose car is a number for just one or more C-U's
  6312. +or nil if no argument has been specified.
  6313. +This is what `(interactive "P")' returns.Vcommand-history
  6314. +List of recent commands that read arguments from terminal.
  6315. +Each command is represented as a form to evaluate.Vcommand-debug-status
  6316. +Debugging status of current interactive command.
  6317. +Bound each time `call-interactively' is called;
  6318. +may be set by the debugger as a reminder for itself.Vmark-even-if-inactive
  6319. +*Non-nil means you can use the mark even when inactive.
  6320. +This option makes a difference in Transient Mark mode.
  6321. +When the option is non-nil, deactivation of the mark
  6322. +turns off region highlighting, but commands that use the mark
  6323. +behave as if the mark were still active.For
  6324. +Eval args until one of them yields non-nil, then return that value.
  6325. +The remaining args are not evalled at all.
  6326. +If all args return nil, return nil.Fand
  6327. +Eval args until one of them yields nil, then return nil.
  6328. +The remaining args are not evalled at all.
  6329. +If no arg yields nil, return the last arg's value.Fif
  6330. +(if COND THEN ELSE...): if COND yields non-nil, do THEN, else do ELSE...
  6331. +Returns the value of THEN or the value of the last of the ELSE's.
  6332. +THEN must be one expression, but ELSE... can be zero or more expressions.
  6333. +If COND yields nil, and there are no ELSE's, the value is nil.Fcond
  6334. +(cond CLAUSES...): try each clause until one succeeds.
  6335. +Each clause looks like (CONDITION BODY...).  CONDITION is evaluated
  6336. +and, if the value is non-nil, this clause succeeds:
  6337. +then the expressions in BODY are evaluated and the last one's
  6338. +value is the value of the cond-form.
  6339. +If no clause succeeds, cond returns nil.
  6340. +If a clause has one element, as in (CONDITION),
  6341. +CONDITION's value if non-nil is returned from the cond-form.Fprogn
  6342. +(progn BODY...): eval BODY forms sequentially and return value of last one.Fprog1
  6343. +(prog1 FIRST BODY...): eval FIRST and BODY sequentially; value from FIRST.
  6344. +The value of FIRST is saved during the evaluation of the remaining args,
  6345. +whose values are discarded.Fprog2
  6346. +(prog2 X Y BODY...): eval X, Y and BODY sequentially; value from Y.
  6347. +The value of Y is saved during the evaluation of the remaining args,
  6348. +whose values are discarded.Fsetq
  6349. +(setq SYM VAL SYM VAL ...): set each SYM to the value of its VAL.
  6350. +The symbols SYM are variables; they are literal (not evaluated).
  6351. +The values VAL are expressions; they are evaluated.
  6352. +Thus, (setq x (1+ y)) sets `x' to the value of `(1+ y)'.
  6353. +The second VAL is not computed until after the first SYM is set, and so on;
  6354. +each VAL can use the new value of variables set earlier in the `setq'.
  6355. +The return value of the `setq' form is the value of the last VAL.Fquote
  6356. +Return the argument, without evaluating it.  `(quote x)' yields `x'.Ffunction
  6357. +Like `quote', but preferred for objects which are functions.
  6358. +In byte compilation, `function' causes its argument to be compiled.
  6359. +`quote' cannot do that.Finteractive-p
  6360. +Return t if function in which this appears was called interactively.
  6361. +This means that the function was called with call-interactively (which
  6362. +includes being called as the binding of a key)
  6363. +and input is currently coming from the keyboard (not in keyboard macro).
  6364. +
  6365. +(interactive-p)Fdefun
  6366. +(defun NAME ARGLIST [DOCSTRING] BODY...): define NAME as a function.
  6367. +The definition is (lambda ARGLIST [DOCSTRING] BODY...).
  6368. +See also the function `interactive'.Fdefmacro
  6369. +(defmacro NAME ARGLIST [DOCSTRING] BODY...): define NAME as a macro.
  6370. +The definition is (macro lambda ARGLIST [DOCSTRING] BODY...).
  6371. +When the macro is called, as in (NAME ARGS...),
  6372. +the function (lambda ARGLIST BODY...) is applied to
  6373. +the list ARGS... as it appears in the expression,
  6374. +and the result should be a form to be evaluated instead of the original.Fdefvar
  6375. +(defvar SYMBOL INITVALUE DOCSTRING): define SYMBOL as a variable.
  6376. +You are not required to define a variable in order to use it,
  6377. +but the definition can supply documentation and an initial value
  6378. +in a way that tags can recognize.
  6379. +
  6380. +INITVALUE is evaluated, and used to set SYMBOL, only if SYMBOL's value is void.
  6381. +If SYMBOL is buffer-local, its default value is what is set;
  6382. + buffer-local values are not affected.
  6383. +INITVALUE and DOCSTRING are optional.
  6384. +If DOCSTRING starts with *, this variable is identified as a user option.
  6385. + This means that M-x set-variable and M-x edit-options recognize it.
  6386. +If INITVALUE is missing, SYMBOL's value is not set.Fdefconst
  6387. +(defconst SYMBOL INITVALUE DOCSTRING): define SYMBOL as a constant variable.
  6388. +The intent is that programs do not change this value, but users may.
  6389. +Always sets the value of SYMBOL to the result of evalling INITVALUE.
  6390. +If SYMBOL is buffer-local, its default value is what is set;
  6391. + buffer-local values are not affected.
  6392. +DOCSTRING is optional.
  6393. +If DOCSTRING starts with *, this variable is identified as a user option.
  6394. + This means that M-x set-variable and M-x edit-options recognize it.
  6395. +
  6396. +Note: do not use `defconst' for user options in libraries that are not
  6397. +normally loaded, since it is useful for users to be able to specify
  6398. +their own values for such variables before loading the library.
  6399. +Since `defconst' unconditionally assigns the variable,
  6400. +it would override the user's choice.Fuser-variable-p
  6401. +Returns t if VARIABLE is intended to be set and modified by users.
  6402. +(The alternative is a variable used internally in a Lisp program.)
  6403. +Determined by whether the first character of the documentation
  6404. +for the variable is "*"
  6405. +
  6406. +(user-variable-p VARIABLE)Flet*
  6407. +(let* VARLIST BODY...): bind variables according to VARLIST then eval BODY.
  6408. +The value of the last form in BODY is returned.
  6409. +Each element of VARLIST is a symbol (which is bound to nil)
  6410. +or a list (SYMBOL VALUEFORM) (which binds SYMBOL to the value of VALUEFORM).
  6411. +Each VALUEFORM can refer to the symbols already bound by this VARLIST.Flet
  6412. +(let VARLIST BODY...): bind variables according to VARLIST then eval BODY.
  6413. +The value of the last form in BODY is returned.
  6414. +Each element of VARLIST is a symbol (which is bound to nil)
  6415. +or a list (SYMBOL VALUEFORM) (which binds SYMBOL to the value of VALUEFORM).
  6416. +All the VALUEFORMs are evalled before any symbols are bound.Fwhile
  6417. +(while TEST BODY...): if TEST yields non-nil, eval BODY... and repeat.
  6418. +The order of execution is thus TEST, BODY, TEST, BODY and so on
  6419. +until TEST returns nil.Fmacroexpand
  6420. +Return result of expanding macros at top level of FORM.
  6421. +If FORM is not a macro call, it is returned unchanged.
  6422. +Otherwise, the macro is expanded and the expansion is considered
  6423. +in place of FORM.  When a non-macro-call results, it is returned.
  6424. +
  6425. +The second optional arg ENVIRONMENT species an environment of macro
  6426. +definitions to shadow the loaded ones for use in file byte-compilation.
  6427. +
  6428. +(macroexpand FORM &optional ENV)Fcatch
  6429. +(catch TAG BODY...): eval BODY allowing nonlocal exits using `throw'.
  6430. +TAG is evalled to get the tag to use.  Then the BODY is executed.
  6431. +Within BODY, (throw TAG) with same tag exits BODY and exits this `catch'.
  6432. +If no throw happens, `catch' returns the value of the last BODY form.
  6433. +If a throw happens, it specifies the value to return from `catch'.Fthrow
  6434. +(throw TAG VALUE): throw to the catch for TAG and return VALUE from it.
  6435. +Both TAG and VALUE are evalled.
  6436. +
  6437. +(throw TAG VAL)Funwind-protect
  6438. +Do BODYFORM, protecting with UNWINDFORMS.
  6439. +Usage looks like (unwind-protect BODYFORM UNWINDFORMS...).
  6440. +If BODYFORM completes normally, its value is returned
  6441. +after executing the UNWINDFORMS.
  6442. +If BODYFORM exits nonlocally, the UNWINDFORMS are executed anyway.Fcondition-case
  6443. +Regain control when an error is signaled.
  6444. +Usage looks like (condition-case VAR BODYFORM HANDLERS...).
  6445. +executes BODYFORM and returns its value if no error happens.
  6446. +Each element of HANDLERS looks like (CONDITION-NAME BODY...)
  6447. +where the BODY is made of Lisp expressions.
  6448. +
  6449. +A handler is applicable to an error
  6450. +if CONDITION-NAME is one of the error's condition names.
  6451. +If an error happens, the first applicable handler is run.
  6452. +
  6453. +The car of a handler may be a list of condition names
  6454. +instead of a single condition name.
  6455. +
  6456. +When a handler handles an error,
  6457. +control returns to the condition-case and the handler BODY... is executed
  6458. +with VAR bound to (SIGNALED-CONDITIONS . SIGNAL-DATA).
  6459. +VAR may be nil; then you do not get access to the signal information.
  6460. +
  6461. +The value of the last BODY form is returned from the condition-case.
  6462. +See also the function `signal' for more info.Fsignal
  6463. +Signal an error.  Args are ERROR-SYMBOL and associated DATA.
  6464. +This function does not return.
  6465. +
  6466. +An error symbol is a symbol with an `error-conditions' property
  6467. +that is a list of condition names.
  6468. +A handler for any of those names will get to handle this signal.
  6469. +The symbol `error' should normally be one of them.
  6470. +
  6471. +DATA should be a list.  Its elements are printed as part of the error message.
  6472. +If the signal is handled, DATA is made available to the handler.
  6473. +See also the function `condition-case'.
  6474. +
  6475. +(signal ERROR-SYMBOL DATA)Fcommandp
  6476. +T if FUNCTION makes provisions for interactive calling.
  6477. +This means it contains a description for how to read arguments to give it.
  6478. +The value is nil for an invalid function or a symbol with no function
  6479. +definition.
  6480. +
  6481. +Interactively callable functions include strings and vectors (treated
  6482. +as keyboard macros), lambda-expressions that contain a top-level call
  6483. +to `interactive', autoload definitions made by `autoload' with non-nil
  6484. +fourth argument, and some of the built-in functions of Lisp.
  6485. +
  6486. +Also, a symbol satisfies `commandp' if its function definition does so.
  6487. +
  6488. +(commandp FUNCTION)Fautoload
  6489. +Define FUNCTION to autoload from FILE.
  6490. +FUNCTION is a symbol; FILE is a file name string to pass to `load'.
  6491. +Third arg DOCSTRING is documentation for the function.
  6492. +Fourth arg INTERACTIVE if non-nil says function can be called interactively.
  6493. +Fifth arg TYPE indicates the type of the object:
  6494. +   nil or omitted says FUNCTION is a function,
  6495. +   `keymap' says FUNCTION is really a keymap, and
  6496. +   `macro' or t says FUNCTION is really a macro.
  6497. +Third through fifth args give info about the real definition.
  6498. +They default to nil.
  6499. +If FUNCTION is already defined other than as an autoload,
  6500. +this does nothing and returns nil.
  6501. +
  6502. +(autoload FUNCTION FILE &optional DOCSTRING INTERACTIVE TYPE)Feval
  6503. +Evaluate FORM and return its value.
  6504. +
  6505. +(eval FORM)Fapply
  6506. +Call FUNCTION with our remaining args, using our last arg as list of args.
  6507. +Thus, (apply '+ 1 2 '(3 4)) returns 10.Ffuncall
  6508. +Call first argument as a function, passing remaining arguments to it.
  6509. +Thus, (funcall 'cons 'x 'y) returns (x . y).Fbacktrace-debug
  6510. +Set the debug-on-exit flag of eval frame LEVEL levels down to FLAG.
  6511. +The debugger is entered when that frame exits, if the flag is non-nil.
  6512. +
  6513. +(backtrace-debug LEVEL FLAG)Fbacktrace
  6514. +Print a trace of Lisp function calls currently active.
  6515. +Output stream used is value of `standard-output'.
  6516. +
  6517. +(backtrace)Fbacktrace-frame
  6518. +Return the function and arguments N frames up from current execution point.
  6519. +If that frame has not evaluated the arguments yet (or is a special form),
  6520. +the value is (nil FUNCTION ARG-FORMS...).
  6521. +If that frame has evaluated its arguments and called its function already,
  6522. +the value is (t FUNCTION ARG-VALUES...).
  6523. +A &rest arg is represented as the tail of the list ARG-VALUES.
  6524. +FUNCTION is whatever was supplied as car of evaluated list,
  6525. +or a lambda expression for macro calls.
  6526. +If N is more than the number of frames, the value is nil.
  6527. +
  6528. +(backtrace-frame NFRAMES)Vmax-specpdl-size
  6529. +Limit on number of Lisp variable bindings & unwind-protects before error.Vmax-lisp-eval-depth
  6530. +Limit on depth in `eval', `apply' and `funcall' before error.
  6531. +This limit is to catch infinite recursions for you before they cause
  6532. +actual stack overflow in C, which would be fatal for Emacs.
  6533. +You can safely make it considerably larger than its default value,
  6534. +if that proves inconveniently small.Vquit-flag
  6535. +Non-nil causes `eval' to abort, unless `inhibit-quit' is non-nil.
  6536. +Typing C-g sets `quit-flag' non-nil, regardless of `inhibit-quit'.Vinhibit-quit
  6537. +Non-nil inhibits C-g quitting from happening immediately.
  6538. +Note that `quit-flag' will still be set by typing C-g,
  6539. +so a quit will be signalled as soon as `inhibit-quit' is nil.
  6540. +To prevent this happening, set `quit-flag' to nil
  6541. +before making `inhibit-quit' nil.Vstack-trace-on-error
  6542. +*Non-nil means automatically display a backtrace buffer
  6543. +after any error that is handled by the editor command loop.
  6544. +If the value is a list, an error only means to display a backtrace
  6545. +if one of its condition symbols appears in the list.Vdebug-on-error
  6546. +*Non-nil means enter debugger if an error is signaled.
  6547. +Does not apply to errors handled by `condition-case'.
  6548. +If the value is a list, an error only means to enter the debugger
  6549. +if one of its condition symbols appears in the list.
  6550. +See also variable `debug-on-quit'.Vdebug-on-quit
  6551. +*Non-nil means enter debugger if quit is signaled (C-g, for example).
  6552. +Does not apply if quit is handled by a `condition-case'.Vdebug-on-next-call
  6553. +Non-nil means enter debugger before next `eval', `apply' or `funcall'.Vdebugger
  6554. +Function to call to invoke debugger.
  6555. +If due to frame exit, args are `exit' and the value being returned;
  6556. + this function's value will be returned instead of that.
  6557. +If due to error, args are `error' and a list of the args to `signal'.
  6558. +If due to `apply' or `funcall' entry, one arg, `lambda'.
  6559. +If due to `eval' entry, one arg, t.Vmocklisp-arguments
  6560. +While in a mocklisp function, the list of its unevaluated args.Vrun-hooks
  6561. +Set to the function `run-hooks', if that function has been defined.
  6562. +Otherwise, nil (in a bare Emacs without preloaded Lisp code).Facos
  6563. +Return the inverse cosine of ARG.
  6564. +
  6565. +(acos ARG)Fasin
  6566. +Return the inverse sine of ARG.
  6567. +
  6568. +(asin ARG)Fatan
  6569. +Return the inverse tangent of ARG.
  6570. +
  6571. +(atan ARG)Fcos
  6572. +Return the cosine of ARG.
  6573. +
  6574. +(cos ARG)Fsin
  6575. +Return the sine of ARG.
  6576. +
  6577. +(sin ARG)Ftan
  6578. +Return the tangent of ARG.
  6579. +
  6580. +(tan ARG)Fbessel-j0
  6581. +Return the bessel function j0 of ARG.
  6582. +
  6583. +(bessel-j0 ARG)Fbessel-j1
  6584. +Return the bessel function j1 of ARG.
  6585. +
  6586. +(bessel-j1 ARG)Fbessel-jn
  6587. +Return the order N bessel function output jn of ARG.
  6588. +The first arg (the order) is truncated to an integer.
  6589. +
  6590. +(bessel-jn ARG1 ARG2)Fbessel-y0
  6591. +Return the bessel function y0 of ARG.
  6592. +
  6593. +(bessel-y0 ARG)Fbessel-y1
  6594. +Return the bessel function y1 of ARG.
  6595. +
  6596. +(bessel-y1 ARG)Fbessel-yn
  6597. +Return the order N bessel function output yn of ARG.
  6598. +The first arg (the order) is truncated to an integer.
  6599. +
  6600. +(bessel-yn ARG1 ARG2)Ferf
  6601. +Return the mathematical error function of ARG.
  6602. +
  6603. +(erf ARG)Ferfc
  6604. +Return the complementary error function of ARG.
  6605. +
  6606. +(erfc ARG)Flog-gamma
  6607. +Return the log gamma of ARG.
  6608. +
  6609. +(log-gamma ARG)Fcube-root
  6610. +Return the cube root of ARG.
  6611. +
  6612. +(cube-root ARG)Fexp
  6613. +Return the exponential base e of ARG.
  6614. +
  6615. +(exp ARG)Fexpt
  6616. +Return the exponential X ** Y.
  6617. +
  6618. +(expt ARG1 ARG2)Flog
  6619. +Return the natural logarithm of ARG.
  6620. +If second optional argument BASE is given, return log ARG using that base.
  6621. +
  6622. +(log ARG &optional BASE)Flog10
  6623. +Return the logarithm base 10 of ARG.
  6624. +
  6625. +(log10 ARG)Fsqrt
  6626. +Return the square root of ARG.
  6627. +
  6628. +(sqrt ARG)Facosh
  6629. +Return the inverse hyperbolic cosine of ARG.
  6630. +
  6631. +(acosh ARG)Fasinh
  6632. +Return the inverse hyperbolic sine of ARG.
  6633. +
  6634. +(asinh ARG)Fatanh
  6635. +Return the inverse hyperbolic tangent of ARG.
  6636. +
  6637. +(atanh ARG)Fcosh
  6638. +Return the hyperbolic cosine of ARG.
  6639. +
  6640. +(cosh ARG)Fsinh
  6641. +Return the hyperbolic sine of ARG.
  6642. +
  6643. +(sinh ARG)Ftanh
  6644. +Return the hyperbolic tangent of ARG.
  6645. +
  6646. +(tanh ARG)Fabs
  6647. +Return the absolute value of ARG.
  6648. +
  6649. +(abs ARG)Ffloat
  6650. +Return the floating point number equal to ARG.
  6651. +
  6652. +(float ARG)Flogb
  6653. +Returns largest integer <= the base 2 log of the magnitude of ARG.
  6654. +This is the same as the exponent of a float.
  6655. +
  6656. +(logb ARG)Fceiling
  6657. +Return the smallest integer no less than ARG.  (Round toward +inf.)
  6658. +
  6659. +(ceiling ARG)Ffloor
  6660. +Return the largest integer no greater than ARG.  (Round towards -inf.)
  6661. +With optional DIVISOR, return the largest integer no greater than ARG/DIVISOR.
  6662. +
  6663. +(floor ARG &optional DIVISOR)Fround
  6664. +Return the nearest integer to ARG.
  6665. +
  6666. +(round ARG)Ftruncate
  6667. +Truncate a floating point number to an int.
  6668. +Rounds the value toward zero.
  6669. +
  6670. +(truncate ARG)Ffceiling
  6671. +Return the smallest integer no less than ARG, as a float.
  6672. +(Round toward +inf.)
  6673. +
  6674. +(fceiling ARG)Fffloor
  6675. +Return the largest integer no greater than ARG, as a float.
  6676. +(Round towards -inf.)
  6677. +
  6678. +(ffloor ARG)Ffround
  6679. +Return the nearest integer to ARG, as a float.
  6680. +
  6681. +(fround ARG)Fftruncate
  6682. +Truncate a floating point number to an integral float value.
  6683. +Rounds the value toward zero.
  6684. +
  6685. +(ftruncate ARG)Fidentity
  6686. +Return the argument unchanged.
  6687. +
  6688. +(identity ARG)Frandom
  6689. +Return a pseudo-random number.
  6690. +On most systems all integers representable in Lisp are equally likely.
  6691. +  This is 24 bits' worth.
  6692. +With argument N, return random number in interval [0,N).
  6693. +With argument t, set the random number seed from the current time and pid.
  6694. +
  6695. +(random &optional LIMIT)Flength
  6696. +Return the length of vector, list or string SEQUENCE.
  6697. +A byte-code function object is also allowed.
  6698. +
  6699. +(length OBJ)Fstring-equal
  6700. +T if two strings have identical contents.
  6701. +Case is significant.
  6702. +Symbols are also allowed; their print names are used instead.
  6703. +
  6704. +(string-equal S1 S2)Fstring-lessp
  6705. +T if first arg string is less than second in lexicographic order.
  6706. +Case is significant.
  6707. +Symbols are also allowed; their print names are used instead.
  6708. +
  6709. +(string-lessp S1 S2)Fappend
  6710. +Concatenate all the arguments and make the result a list.
  6711. +The result is a list whose elements are the elements of all the arguments.
  6712. +Each argument may be a list, vector or string.
  6713. +The last argument is not copied, just used as the tail of the new list.Fconcat
  6714. +Concatenate all the arguments and make the result a string.
  6715. +The result is a string whose elements are the elements of all the arguments.
  6716. +Each argument may be a string, a list of characters (integers),
  6717. +or a vector of characters (integers).Fvconcat
  6718. +Concatenate all the arguments and make the result a vector.
  6719. +The result is a vector whose elements are the elements of all the arguments.
  6720. +Each argument may be a list, vector or string.Fcopy-sequence
  6721. +Return a copy of a list, vector or string.
  6722. +The elements of a list or vector are not copied; they are shared
  6723. +with the original.
  6724. +
  6725. +(copy-sequence ARG)Fcopy-alist
  6726. +Return a copy of ALIST.
  6727. +This is an alist which represents the same mapping from objects to objects,
  6728. +but does not share the alist structure with ALIST.
  6729. +The objects mapped (cars and cdrs of elements of the alist)
  6730. +are shared, however.
  6731. +Elements of ALIST that are not conses are also shared.
  6732. +
  6733. +(copy-alist ALIST)Fsubstring
  6734. +Return a substring of STRING, starting at index FROM and ending before TO.
  6735. +TO may be nil or omitted; then the substring runs to the end of STRING.
  6736. +If FROM or TO is negative, it counts from the end.
  6737. +
  6738. +(substring STRING FROM &optional TO)Fnthcdr
  6739. +Take cdr N times on LIST, returns the result.
  6740. +
  6741. +(nthcdr N LIST)Fnth
  6742. +Return the Nth element of LIST.
  6743. +N counts from zero.  If LIST is not that long, nil is returned.
  6744. +
  6745. +(nth N LIST)Felt
  6746. +Return element of SEQUENCE at index N.
  6747. +
  6748. +(elt SEQ N)Fmember
  6749. +Return non-nil if ELT is an element of LIST.  Comparison done with `equal'.
  6750. +The value is actually the tail of LIST whose car is ELT.
  6751. +
  6752. +(member ELT LIST)Fmemq
  6753. +Return non-nil if ELT is an element of LIST.  Comparison done with EQ.
  6754. +The value is actually the tail of LIST whose car is ELT.
  6755. +
  6756. +(memq ELT LIST)Fassq
  6757. +Return non-nil if KEY is `eq' to the car of an element of LIST.
  6758. +The value is actually the element of LIST whose car is KEY.
  6759. +Elements of LIST that are not conses are ignored.
  6760. +
  6761. +(assq KEY LIST)Fassoc
  6762. +Return non-nil if KEY is `equal' to the car of an element of LIST.
  6763. +The value is actually the element of LIST whose car is KEY.
  6764. +
  6765. +(assoc KEY LIST)Frassq
  6766. +Return non-nil if ELT is `eq' to the cdr of an element of LIST.
  6767. +The value is actually the element of LIST whose cdr is ELT.
  6768. +
  6769. +(rassq KEY LIST)Fdelq
  6770. +Delete by side effect any occurrences of ELT as a member of LIST.
  6771. +The modified LIST is returned.  Comparison is done with `eq'.
  6772. +If the first member of LIST is ELT, there is no way to remove it by side effect;
  6773. +therefore, write `(setq foo (delq element foo))'
  6774. +to be sure of changing the value of `foo'.
  6775. +
  6776. +(delq ELT LIST)Fdelete
  6777. +Delete by side effect any occurrences of ELT as a member of LIST.
  6778. +The modified LIST is returned.  Comparison is done with `equal'.
  6779. +If the first member of LIST is ELT, deleting it is not a side effect;
  6780. +it is simply using a different list.
  6781. +Therefore, write `(setq foo (delete element foo))'
  6782. +to be sure of changing the value of `foo'.
  6783. +
  6784. +(delete ELT LIST)Fnreverse
  6785. +Reverse LIST by modifying cdr pointers.
  6786. +Returns the beginning of the reversed list.
  6787. +
  6788. +(nreverse LIST)Freverse
  6789. +Reverse LIST, copying.  Returns the beginning of the reversed list.
  6790. +See also the function `nreverse', which is used more often.
  6791. +
  6792. +(reverse LIST)Fsort
  6793. +Sort LIST, stably, comparing elements using PREDICATE.
  6794. +Returns the sorted list.  LIST is modified by side effects.
  6795. +PREDICATE is called with two elements of LIST, and should return T
  6796. +if the first element is "less" than the second.
  6797. +
  6798. +(sort LIST PRED)Fget
  6799. +Return the value of SYMBOL's PROPNAME property.
  6800. +This is the last VALUE stored with `(put SYMBOL PROPNAME VALUE)'.
  6801. +
  6802. +(get SYM PROP)Fput
  6803. +Store SYMBOL's PROPNAME property with value VALUE.
  6804. +It can be retrieved with `(get SYMBOL PROPNAME)'.
  6805. +
  6806. +(put SYM PROP VAL)Fequal
  6807. +T if two Lisp objects have similar structure and contents.
  6808. +They must have the same data type.
  6809. +Conses are compared by comparing the cars and the cdrs.
  6810. +Vectors and strings are compared element by element.
  6811. +Numbers are compared by value, but integers cannot equal floats.
  6812. + (Use `=' if you want integers and floats to be able to be equal.)
  6813. +Symbols must match exactly.
  6814. +
  6815. +(equal O1 O2)Ffillarray
  6816. +Store each element of ARRAY with ITEM.  ARRAY is a vector or string.
  6817. +
  6818. +(fillarray ARRAY ITEM)Fnconc
  6819. +Concatenate any number of lists by altering them.
  6820. +Only the last argument is not altered, and need not be a list.Fmapconcat
  6821. +Apply FN to each element of SEQ, and concat the results as strings.
  6822. +In between each pair of results, stick in SEP.
  6823. +Thus, " " as SEP results in spaces between the values returned by FN.
  6824. +
  6825. +(mapconcat FN SEQ SEP)Fmapcar
  6826. +Apply FUNCTION to each element of SEQUENCE, and make a list of the results.
  6827. +The result is a list just as long as SEQUENCE.
  6828. +SEQUENCE may be a list, a vector or a string.
  6829. +
  6830. +(mapcar FN SEQ)Fy-or-n-p
  6831. +Ask user a "y or n" question.  Return t if answer is "y".
  6832. +Takes one argument, which is the string to display to ask the question.
  6833. +It should end in a space; `y-or-n-p' adds `(y or n) ' to it.
  6834. +No confirmation of the answer is requested; a single character is enough.
  6835. +Also accepts Space to mean yes, or Delete to mean no.
  6836. +
  6837. +(y-or-n-p PROMPT)Fyes-or-no-p
  6838. +Ask user a yes-or-no question.  Return t if answer is yes.
  6839. +Takes one argument, which is the string to display to ask the question.
  6840. +It should end in a space; `yes-or-no-p' adds `(yes or no) ' to it.
  6841. +The user must confirm the answer with RET,
  6842. +and can edit it until it as been confirmed.
  6843. +
  6844. +(yes-or-no-p PROMPT)Fload-average
  6845. +Return list of 1 minute, 5 minute and 15 minute load averages.
  6846. +Each of the three load averages is multiplied by 100,
  6847. +then converted to integer.
  6848. +If the 5-minute or 15-minute load averages are not available, return a
  6849. +shortened list, containing only those averages which are available.
  6850. +
  6851. +(load-average)Ffeaturep
  6852. +Returns t if FEATURE is present in this Emacs.
  6853. +Use this to conditionalize execution of lisp code based on the presence or
  6854. +absence of emacs or environment extensions.
  6855. +Use `provide' to declare that a feature is available.
  6856. +This function looks at the value of the variable `features'.
  6857. +
  6858. +(featurep FEATURE)Fprovide
  6859. +Announce that FEATURE is a feature of the current Emacs.
  6860. +
  6861. +(provide FEATURE)Frequire
  6862. +If feature FEATURE is not loaded, load it from FILENAME.
  6863. +If FEATURE is not a member of the list `features', then the feature
  6864. +is not loaded; so load the file FILENAME.
  6865. +If FILENAME is omitted, the printname of FEATURE is used as the file name.
  6866. +
  6867. +(require FEATURE &optional FILE-NAME)Vfeatures
  6868. +A list of symbols which are the features of the executing emacs.
  6869. +Used by `featurep' and `require', and altered by `provide'.Fwrite-char
  6870. +Output character CHAR to stream PRINTCHARFUN.
  6871. +PRINTCHARFUN defaults to the value of `standard-output' (which see).
  6872. +
  6873. +(write-char CH &optional PRINTCHARFUN)Fwith-output-to-temp-buffer
  6874. +Bind `standard-output' to buffer BUFNAME, eval BODY, then show that buffer.
  6875. +The buffer is cleared out initially, and marked as unmodified when done.
  6876. +All output done by BODY is inserted in that buffer by default.
  6877. +The buffer is displayed in another window, but not selected.
  6878. +The value of the last form in BODY is returned.
  6879. +If BODY does not finish normally, the buffer BUFNAME is not displayed.
  6880. +
  6881. +If variable `temp-buffer-show-function' is non-nil, call it at the end
  6882. +to get the buffer displayed.  It gets one argument, the buffer to display.Fterpri
  6883. +Output a newline to stream PRINTCHARFUN.
  6884. +If PRINTCHARFUN is omitted or nil, the value of `standard-output' is used.
  6885. +
  6886. +(terpri &optional PRINTCHARFUN)Fprin1
  6887. +Output the printed representation of OBJECT, any Lisp object.
  6888. +Quoting characters are printed when needed to make output that `read'
  6889. +can handle, whenever this is possible.
  6890. +Output stream is PRINTCHARFUN, or value of `standard-output' (which see).
  6891. +
  6892. +(prin1 OBJ &optional PRINTCHARFUN)Fprin1-to-string
  6893. +Return a string containing the printed representation of OBJECT,
  6894. +any Lisp object.  Quoting characters are used when needed to make output
  6895. +that `read' can handle, whenever this is possible, unless the optional
  6896. +second argument NOESCAPE is non-nil.
  6897. +
  6898. +(prin1-to-string OBJ &optional NOESCAPE)Fprinc
  6899. +Output the printed representation of OBJECT, any Lisp object.
  6900. +No quoting characters are used; no delimiters are printed around
  6901. +the contents of strings.
  6902. +Output stream is PRINTCHARFUN, or value of standard-output (which see).
  6903. +
  6904. +(princ OBJ &optional PRINTCHARFUN)Fprint
  6905. +Output the printed representation of OBJECT, with newlines around it.
  6906. +Quoting characters are printed when needed to make output that `read'
  6907. +can handle, whenever this is possible.
  6908. +Output stream is PRINTCHARFUN, or value of `standard-output' (which see).
  6909. +
  6910. +(print OBJ &optional PRINTCHARFUN)Fexternal-debugging-output
  6911. +Write CHARACTER to stderr.
  6912. +You can call print while debugging emacs, and pass it this function
  6913. +to make it write to the debugging output.
  6914. +
  6915. +
  6916. +(external-debugging-output CHARACTER)Vstandard-output
  6917. +Output stream `print' uses by default for outputting a character.
  6918. +This may be any function of one argument.
  6919. +It may also be a buffer (output is inserted before point)
  6920. +or a marker (output is inserted and the marker is advanced)
  6921. +or the symbol t (output appears in the minibuffer line).Vfloat-output-format
  6922. +The format descriptor string used to print floats.
  6923. +This is a %-spec like those accepted by `printf' in C,
  6924. +but with some restrictions.  It must start with the two characters `%.'.
  6925. +After that comes an integer precision specification,
  6926. +and then a letter which controls the format.
  6927. +The letters allowed are `e', `f' and `g'.
  6928. +Use `e' for exponential notation "DIG.DIGITSeEXPT"
  6929. +Use `f' for decimal point notation "DIGITS.DIGITS".
  6930. +Use `g' to choose the shorter of those two formats for the number at hand.
  6931. +The precision in any of these cases is the number of digits following
  6932. +the decimal point.  With `f', a precision of 0 means to omit the
  6933. +decimal point.  0 is not allowed with `e' or `g'.
  6934. +
  6935. +A value of nil means to use `%.17g'.Vprint-length
  6936. +Maximum length of list to print before abbreviating.
  6937. +A value of nil means no limit.Vprint-level
  6938. +Maximum depth of list nesting to print before abbreviating.
  6939. +A value of nil means no limit.Vprint-escape-newlines
  6940. +Non-nil means print newlines in strings as backslash-n.
  6941. +Also print formfeeds as backslash-f.Fread-char
  6942. +Read a character from the command input (keyboard or macro).
  6943. +It is returned as a number.
  6944. +If the user generates an event which is not a character (i.e. a mouse
  6945. +click or function key event), `read-char' signals an error.  As an
  6946. +exception, switch-frame events are put off until non-ASCII events can
  6947. +be read.
  6948. +If you want to read non-character events, or ignore them, call
  6949. +`read-event' or `read-char-exclusive' instead.
  6950. +
  6951. +(read-char)Fread-event
  6952. +Read an event object from the input stream.
  6953. +
  6954. +(read-event)Fread-char-exclusive
  6955. +Read a character from the command input (keyboard or macro).
  6956. +It is returned as a number.  Non character events are ignored.
  6957. +
  6958. +(read-char-exclusive)Fget-file-char
  6959. +Don't use this yourself.
  6960. +
  6961. +(get-file-char)Fload
  6962. +Execute a file of Lisp code named FILE.
  6963. +First try FILE with `.elc' appended, then try with `.el',
  6964. + then try FILE unmodified.
  6965. +This function searches the directories in `load-path'.
  6966. +If optional second arg NOERROR is non-nil,
  6967. + report no error if FILE doesn't exist.
  6968. +Print messages at start and end of loading unless
  6969. + optional third arg NOMESSAGE is non-nil.
  6970. +If optional fourth arg NOSUFFIX is non-nil, don't try adding
  6971. + suffixes `.elc' or `.el' to the specified name FILE.
  6972. +Return t if file exists.
  6973. +
  6974. +(load STR &optional NOERROR NOMESSAGE NOSUFFIX)Feval-buffer
  6975. +Execute the current buffer as Lisp code.
  6976. +Programs can pass two arguments, BUFFER and PRINTFLAG.
  6977. +BUFFER is the buffer to evaluate (nil means use current buffer).
  6978. +PRINTFLAG controls printing of output:
  6979. +nil means discard it; anything else is stream for print.
  6980. +
  6981. +If there is no error, point does not move.  If there is an error,
  6982. +point remains at the end of the last character read from the buffer.
  6983. +
  6984. +(eval-buffer &optional BUFNAME PRINTFLAG)Feval-current-buffer
  6985. +Execute the current buffer as Lisp code.
  6986. +Programs can pass argument PRINTFLAG which controls printing of output:
  6987. +nil means discard it; anything else is stream for print.
  6988. +
  6989. +If there is no error, point does not move.  If there is an error,
  6990. +point remains at the end of the last character read from the buffer.
  6991. +
  6992. +(eval-current-buffer &optional PRINTFLAG)Feval-region
  6993. +Execute the region as Lisp code.
  6994. +When called from programs, expects two arguments,
  6995. +giving starting and ending indices in the current buffer
  6996. +of the text to be executed.
  6997. +Programs can pass third argument PRINTFLAG which controls output:
  6998. +nil means discard it; anything else is stream for printing it.
  6999. +
  7000. +If there is no error, point does not move.  If there is an error,
  7001. +point remains at the end of the last character read from the buffer.
  7002. +
  7003. +(eval-region B E &optional PRINTFLAG)Fread
  7004. +Read one Lisp expression as text from STREAM, return as Lisp object.
  7005. +If STREAM is nil, use the value of `standard-input' (which see).
  7006. +STREAM or the value of `standard-input' may be:
  7007. + a buffer (read from point and advance it)
  7008. + a marker (read from where it points and advance it)
  7009. + a function (call it with no arguments for each character,
  7010. +     call it with a char as argument to push a char back)
  7011. + a string (takes text from string, starting at the beginning)
  7012. + t (read text line using minibuffer and use it).
  7013. +
  7014. +(read &optional READCHARFUN)Fread-from-string
  7015. +Read one Lisp expression which is represented as text by STRING.
  7016. +Returns a cons: (OBJECT-READ . FINAL-STRING-INDEX).
  7017. +START and END optionally delimit a substring of STRING from which to read;
  7018. + they default to 0 and (length STRING) respectively.
  7019. +
  7020. +(read-from-string STRING &optional START END)Fintern
  7021. +Return the canonical symbol whose name is STRING.
  7022. +If there is none, one is created by this function and returned.
  7023. +A second optional argument specifies the obarray to use;
  7024. +it defaults to the value of `obarray'.
  7025. +
  7026. +(intern STR &optional OBARRAY)Fintern-soft
  7027. +Return the canonical symbol whose name is STRING, or nil if none exists.
  7028. +A second optional argument specifies the obarray to use;
  7029. +it defaults to the value of `obarray'.
  7030. +
  7031. +(intern-soft STR &optional OBARRAY)Fmapatoms
  7032. +Call FUNCTION on every symbol in OBARRAY.
  7033. +OBARRAY defaults to the value of `obarray'.
  7034. +
  7035. +(mapatoms FUNCTION &optional OBARRAY)Vobarray
  7036. +Symbol table for use by `intern' and `read'.
  7037. +It is a vector whose length ought to be prime for best results.
  7038. +The vector's contents don't make sense if examined from Lisp programs;
  7039. +to find all the symbols in an obarray, use `mapatoms'.Vvalues
  7040. +List of values of all expressions which were read, evaluated and printed.
  7041. +Order is reverse chronological.Vstandard-input
  7042. +Stream for read to get input from.
  7043. +See documentation of `read' for possible values.Vload-path
  7044. +*List of directories to search for files to load.
  7045. +Each element is a string (directory name) or nil (try default directory).
  7046. +Initialized based on EMACSLOADPATH environment variable, if any,
  7047. +otherwise to default specified by file `paths.h' when Emacs was built.Vload-in-progress
  7048. +Non-nil iff inside of `load'.Vafter-load-alist
  7049. +An alist of expressions to be evalled when particular files are loaded.
  7050. +Each element looks like (FILENAME FORMS...).
  7051. +When `load' is run and the file-name argument is FILENAME,
  7052. +the FORMS in the corresponding element are executed at the end of loading.
  7053. +
  7054. +FILENAME must match exactly!  Normally FILENAME is the name of a library,
  7055. +with no directory specified, since that is how `load' is normally called.
  7056. +An error in FORMS does not undo the load,
  7057. +but does prevent execution of the rest of the FORMS.Vload-history
  7058. +Alist mapping source file names to symbols and features.
  7059. +Each alist element is a list that starts with a file name,
  7060. +except for one element (optional) that starts with nil and describes
  7061. +definitions evaluated from buffers not visiting files.
  7062. +The remaining elements of each list are symbols defined as functions
  7063. +or variables, and cons cells `(provide . FEATURE)' and `(require . FEATURE)'.Vcurrent-load-list
  7064. +Used for internal purposes by `load'.Fmake-abbrev-table
  7065. +Create a new, empty abbrev table object.
  7066. +
  7067. +(make-abbrev-table)Fclear-abbrev-table
  7068. +Undefine all abbrevs in abbrev table TABLE, leaving it empty.
  7069. +
  7070. +(clear-abbrev-table TABLE)Fdefine-abbrev
  7071. +Define an abbrev in TABLE named NAME, to expand to EXPANSION and call HOOK.
  7072. +NAME and EXPANSION are strings.
  7073. +To undefine an abbrev, define it with EXPANSION = nil.
  7074. +If HOOK is non-nil, it should be a function of no arguments;
  7075. +it is called after EXPANSION is inserted.
  7076. +
  7077. +(define-abbrev TABLE NAME EXPANSION &optional HOOK COUNT)Fdefine-global-abbrev
  7078. +Define ABBREV as a global abbreviation for EXPANSION.
  7079. +
  7080. +(define-global-abbrev NAME EXPANSION)Fdefine-mode-abbrev
  7081. +Define ABBREV as a mode-specific abbreviation for EXPANSION.
  7082. +
  7083. +(define-mode-abbrev NAME EXPANSION)Fabbrev-symbol
  7084. +Return the symbol representing abbrev named ABBREV.
  7085. +This symbol's name is ABBREV, but it is not the canonical symbol of that name;
  7086. +it is interned in an abbrev-table rather than the normal obarray.
  7087. +The value is nil if that abbrev is not defined.
  7088. +Optional second arg TABLE is abbrev table to look it up in.
  7089. +The default is to try buffer's mode-specific abbrev table, then global table.
  7090. +
  7091. +(abbrev-symbol ABBREV &optional TABLE)Fabbrev-expansion
  7092. +Return the string that ABBREV expands into in the current buffer.
  7093. +Optionally specify an abbrev table as second arg;
  7094. +then ABBREV is looked up in that table only.
  7095. +
  7096. +(abbrev-expansion ABBREV &optional TABLE)Fexpand-abbrev
  7097. +Expand the abbrev before point, if there is an abbrev there.
  7098. +Effective when explicitly called even when `abbrev-mode' is nil.
  7099. +Returns t if expansion took place.
  7100. +
  7101. +(expand-abbrev)Funexpand-abbrev
  7102. +Undo the expansion of the last abbrev that expanded.
  7103. +This differs from ordinary undo in that other editing done since then
  7104. +is not undone.
  7105. +
  7106. +(unexpand-abbrev)Finsert-abbrev-table-description
  7107. +Insert before point a full description of abbrev table named NAME.
  7108. +NAME is a symbol whose value is an abbrev table.
  7109. +If optional 2nd arg HUMAN is non-nil, a human-readable description is inserted.
  7110. +Otherwise the description is an expression,
  7111. +a call to `define-abbrev-table', which would
  7112. +define the abbrev table NAME exactly as it is currently defined.
  7113. +
  7114. +(insert-abbrev-table-description NAME &optional READABLE)Fdefine-abbrev-table
  7115. +Define TABNAME (a symbol) as an abbrev table name.
  7116. +Define abbrevs in it according to DEFINITIONS, which is a list of elements
  7117. +of the form (ABBREVNAME EXPANSION HOOK USECOUNT).
  7118. +
  7119. +(define-abbrev-table TABNAME DEFNS)Vabbrev-table-name-list
  7120. +List of symbols whose values are abbrev tables.Vglobal-abbrev-table
  7121. +The abbrev table whose abbrevs affect all buffers.
  7122. +Each buffer may also have a local abbrev table.
  7123. +If it does, the local table overrides the global one
  7124. +for any particular abbrev defined in both.Vfundamental-mode-abbrev-table
  7125. +The abbrev table of mode-specific abbrevs for Fundamental Mode.Vlast-abbrev
  7126. +The abbrev-symbol of the last abbrev expanded.  See `abbrev-symbol'.Vlast-abbrev-text
  7127. +The exact text of the last abbrev expanded.
  7128. +nil if the abbrev has already been unexpanded.Vlast-abbrev-location
  7129. +The location of the start of the last abbrev expanded.Vabbrev-start-location
  7130. +Buffer position for `expand-abbrev' to use as the start of the abbrev.
  7131. +nil means use the word before point as the abbrev.
  7132. +Calling `expand-abbrev' sets this to nil.Vabbrev-start-location-buffer
  7133. +Buffer that `abbrev-start-location' has been set for.
  7134. +Trying to expand an abbrev in any other buffer clears `abbrev-start-location'.Vlocal-abbrev-table
  7135. +Local (mode-specific) abbrev table of current buffer.Vabbrevs-changed
  7136. +Set non-nil by defining or altering any word abbrevs.
  7137. +This causes `save-some-buffers' to offer to save the abbrevs.Vabbrev-all-caps
  7138. +*Set non-nil means expand multi-word abbrevs all caps if abbrev was so.Vpre-abbrev-expand-hook
  7139. +Function or functions to be called before abbrev expansion is done.
  7140. +This is the first thing that `expand-abbrev' does, and so this may change
  7141. +the current abbrev table before abbrev lookup happens.Fsyntax-table-p
  7142. +Return t if ARG is a syntax table.
  7143. +Any vector of 256 elements will do.
  7144. +
  7145. +(syntax-table-p OBJ)Fsyntax-table
  7146. +Return the current syntax table.
  7147. +This is the one specified by the current buffer.
  7148. +
  7149. +(syntax-table)Fstandard-syntax-table
  7150. +Return the standard syntax table.
  7151. +This is the one used for new buffers.
  7152. +
  7153. +(standard-syntax-table)Fcopy-syntax-table
  7154. +Construct a new syntax table and return it.
  7155. +It is a copy of the TABLE, which defaults to the standard syntax table.
  7156. +
  7157. +(copy-syntax-table &optional TABLE)Fset-syntax-table
  7158. +Select a new syntax table for the current buffer.
  7159. +One argument, a syntax table.
  7160. +
  7161. +(set-syntax-table TABLE)Fchar-syntax
  7162. +Return the syntax code of CHAR, described by a character.
  7163. +For example, if CHAR is a word constituent, the character `?w' is returned.
  7164. +The characters that correspond to various syntax codes
  7165. +are listed in the documentation of `modify-syntax-entry'.
  7166. +
  7167. +(char-syntax CH)Fmatching-paren
  7168. +Return the matching parenthesis of CHAR, or nil if none.
  7169. +
  7170. +(matching-paren CH)Fmodify-syntax-entry
  7171. +Set syntax for character CHAR according to string S.
  7172. +The syntax is changed only for table TABLE, which defaults to
  7173. + the current buffer's syntax table.
  7174. +The first character of S should be one of the following:
  7175. +  Space or -  whitespace syntax.    w   word constituent.
  7176. +  _           symbol constituent.   .   punctuation.
  7177. +  (           open-parenthesis.     )   close-parenthesis.
  7178. +  "           string quote.         \   escape.
  7179. +  $           paired delimiter.     '   expression quote or prefix operator.
  7180. +  <           comment starter.      >   comment ender.
  7181. +  /           character-quote.      @   inherit from `standard-syntax-table'.
  7182. +
  7183. +Only single-character comment start and end sequences are represented thus.
  7184. +Two-character sequences are represented as described below.
  7185. +The second character of S is the matching parenthesis,
  7186. + used only if the first character is `(' or `)'.
  7187. +Any additional characters are flags.
  7188. +Defined flags are the characters 1, 2, 3, 4, b, and p.
  7189. + 1 means C is the start of a two-char comment start sequence.
  7190. + 2 means C is the second character of such a sequence.
  7191. + 3 means C is the start of a two-char comment end sequence.
  7192. + 4 means C is the second character of such a sequence.
  7193. +
  7194. +There can be up to two orthogonal comment sequences. This is to support
  7195. +language modes such as C++.  By default, all comment sequences are of style
  7196. +a, but you can set the comment sequence style to b (on the second character
  7197. +of a comment-start, or the first character of a comment-end sequence) using
  7198. +this flag:
  7199. + b means C is part of comment sequence b.
  7200. +
  7201. + p means C is a prefix character for `backward-prefix-chars';
  7202. +   such characters are treated as whitespace when they occur
  7203. +   between expressions.
  7204. +
  7205. +(modify-syntax-entry CHAR S &optional TABLE)Fdescribe-syntax
  7206. +Describe the syntax specifications in the syntax table.
  7207. +The descriptions are inserted in a buffer, which is then displayed.
  7208. +
  7209. +(describe-syntax)Fforward-word
  7210. +Move point forward ARG words (backward if ARG is negative).
  7211. +Normally returns t.
  7212. +If an edge of the buffer is reached, point is left there
  7213. +and nil is returned.
  7214. +
  7215. +(forward-word COUNT)Fforward-comment
  7216. +Move forward across up to N comments.  If N is negative, move backward.
  7217. +Stop scanning if we find something other than a comment or whitespace.
  7218. +Set point to where scanning stops.
  7219. +If N comments are found as expected, with nothing except whitespace
  7220. +between them, return t; otherwise return nil.
  7221. +
  7222. +(forward-comment COUNT)Fscan-lists
  7223. +Scan from character number FROM by COUNT lists.
  7224. +Returns the character number of the position thus found.
  7225. +
  7226. +If DEPTH is nonzero, paren depth begins counting from that value,
  7227. +only places where the depth in parentheses becomes zero
  7228. +are candidates for stopping; COUNT such places are counted.
  7229. +Thus, a positive value for DEPTH means go out levels.
  7230. +
  7231. +Comments are ignored if `parse-sexp-ignore-comments' is non-nil.
  7232. +
  7233. +If the beginning or end of (the accessible part of) the buffer is reached
  7234. +and the depth is wrong, an error is signaled.
  7235. +If the depth is right but the count is not used up, nil is returned.
  7236. +
  7237. +(scan-lists FROM COUNT DEPTH)Fscan-sexps
  7238. +Scan from character number FROM by COUNT balanced expressions.
  7239. +If COUNT is negative, scan backwards.
  7240. +Returns the character number of the position thus found.
  7241. +
  7242. +Comments are ignored if `parse-sexp-ignore-comments' is non-nil.
  7243. +
  7244. +If the beginning or end of (the accessible part of) the buffer is reached
  7245. +in the middle of a parenthetical grouping, an error is signaled.
  7246. +If the beginning or end is reached between groupings
  7247. +but before count is used up, nil is returned.
  7248. +
  7249. +(scan-sexps FROM COUNT)Fbackward-prefix-chars
  7250. +Move point backward over any number of chars with prefix syntax.
  7251. +This includes chars with "quote" or "prefix" syntax (' or p).
  7252. +
  7253. +(backward-prefix-chars)Fparse-partial-sexp
  7254. +Parse Lisp syntax starting at FROM until TO; return status of parse at TO.
  7255. +Parsing stops at TO or when certain criteria are met;
  7256. + point is set to where parsing stops.
  7257. +If fifth arg STATE is omitted or nil,
  7258. + parsing assumes that FROM is the beginning of a function.
  7259. +Value is a list of eight elements describing final state of parsing:
  7260. + 0. depth in parens.
  7261. + 1. character address of start of innermost containing list; nil if none.
  7262. + 2. character address of start of last complete sexp terminated.
  7263. + 3. non-nil if inside a string.
  7264. +    (it is the character that will terminate the string.)
  7265. + 4. t if inside a comment.
  7266. + 5. t if following a quote character.
  7267. + 6. the minimum paren-depth encountered during this scan.
  7268. + 7. t if in a comment of style `b'.
  7269. +If third arg TARGETDEPTH is non-nil, parsing stops if the depth
  7270. +in parentheses becomes equal to TARGETDEPTH.
  7271. +Fourth arg STOPBEFORE non-nil means stop when come to
  7272. + any character that starts a sexp.
  7273. +Fifth arg STATE is an eight-list like what this function returns.
  7274. +It is used to initialize the state of the parse.  Its second and third
  7275. +elements are ignored.
  7276. +Sixth args COMMENTSTOP non-nil means stop at the start of a comment.
  7277. +
  7278. +(parse-partial-sexp FROM TO &optional TARGETDEPTH STOPBEFORE STATE COMMENTSTOP)Vparse-sexp-ignore-comments
  7279. +Non-nil means `forward-sexp', etc., should treat comments as whitespace.Vwords-include-escapes
  7280. +Non-nil means `forward-word', etc., should treat escape chars part of words.Fml-if
  7281. +Mocklisp version of `if'.Fml-nargs
  7282. +Number of arguments to currently executing mocklisp function.
  7283. +
  7284. +(ml-nargs)Fml-arg
  7285. +Argument number N to currently executing mocklisp function.
  7286. +
  7287. +(ml-arg N &optional PROMPT)Fml-interactive
  7288. +True if currently executing mocklisp function was called interactively.
  7289. +
  7290. +(ml-interactive)Fml-provide-prefix-argument
  7291. +Evaluate second argument, using first argument as prefix arg value.Fml-prefix-argument-loop
  7292. +Fml-substr
  7293. +Return a substring of STRING, starting at index FROM and of length LENGTH.
  7294. +If either FROM or LENGTH is negative, the length of STRING is added to it.
  7295. +
  7296. +(ml-substr STRING FROM TO)Finsert-string
  7297. +Mocklisp-compatibility insert function.
  7298. +Like the function `insert' except that any argument that is a number
  7299. +is converted into a string by expressing it in decimal.Fbyte-code
  7300. +Function used internally in byte-compiled code.
  7301. +The first argument is a string of byte code; the second, a vector of constants;
  7302. +the third, the maximum stack depth used in this function.
  7303. +If the third argument is incorrect, Emacs may crash.
  7304. +
  7305. +(byte-code BYTESTR VECTOR MAXDEPTH)Vbyte-code-meter
  7306. +A vector of vectors which holds a histogram of byte-code usage.
  7307. +(aref (aref byte-code-meter 0) CODE) indicates how many times the byte
  7308. +opcode CODE has been executed.
  7309. +(aref (aref byte-code-meter CODE1) CODE2), where CODE1 is not 0,
  7310. +indicates how many times the byte opcodes CODE1 and CODE2 have been
  7311. +executed in succession.Vbyte-metering-on
  7312. +If non-nil, keep profiling information on byte code usage.
  7313. +The variable byte-code-meter indicates how often each byte opcode is used.
  7314. +If a symbol has a property named `byte-code-meter' whose value is an
  7315. +integer, it is incremented each time that symbol's function is called.Fprocessp
  7316. +Return t if OBJECT is a process.
  7317. +
  7318. +(processp OBJ)Fget-process
  7319. +Return the process named NAME, or nil if there is none.
  7320. +
  7321. +(get-process NAME)Fget-buffer-process
  7322. +Return the (or, a) process associated with BUFFER.
  7323. +BUFFER may be a buffer or the name of one.
  7324. +
  7325. +(get-buffer-process NAME)Fdelete-process
  7326. +Delete PROCESS: kill it and forget about it immediately.
  7327. +PROCESS may be a process, a buffer, the name of a process or buffer, or
  7328. +nil, indicating the current buffer's process.
  7329. +
  7330. +(delete-process PROC)Fprocess-status
  7331. +Return the status of PROCESS: a symbol, one of these:
  7332. +run  -- for a process that is running.
  7333. +stop -- for a process stopped but continuable.
  7334. +exit -- for a process that has exited.
  7335. +signal -- for a process that has got a fatal signal.
  7336. +open -- for a network stream connection that is open.
  7337. +closed -- for a network stream connection that is closed.
  7338. +nil -- if arg is a process name and no such process exists.
  7339. +PROCESS may be a process, a buffer, the name of a process or buffer, or
  7340. +nil, indicating the current buffer's process.
  7341. +
  7342. +(process-status PROC)Fprocess-exit-status
  7343. +Return the exit status of PROCESS or the signal number that killed it.
  7344. +If PROCESS has not yet exited or died, return 0.
  7345. +
  7346. +(process-exit-status PROC)Fprocess-id
  7347. +Return the process id of PROCESS.
  7348. +This is the pid of the Unix process which PROCESS uses or talks to.
  7349. +For a network connection, this value is nil.
  7350. +
  7351. +(process-id PROC)Fprocess-name
  7352. +Return the name of PROCESS, as a string.
  7353. +This is the name of the program invoked in PROCESS,
  7354. +possibly modified to make it unique among process names.
  7355. +
  7356. +(process-name PROC)Fprocess-command
  7357. +Return the command that was executed to start PROCESS.
  7358. +This is a list of strings, the first string being the program executed
  7359. +and the rest of the strings being the arguments given to it.
  7360. +For a non-child channel, this is nil.
  7361. +
  7362. +(process-command PROC)Fset-process-buffer
  7363. +Set buffer associated with PROCESS to BUFFER (a buffer, or nil).
  7364. +
  7365. +(set-process-buffer PROC BUFFER)Fprocess-buffer
  7366. +Return the buffer PROCESS is associated with.
  7367. +Output from PROCESS is inserted in this buffer
  7368. +unless PROCESS has a filter.
  7369. +
  7370. +(process-buffer PROC)Fprocess-mark
  7371. +Return the marker for the end of the last output from PROCESS.
  7372. +
  7373. +(process-mark PROC)Fset-process-filter
  7374. +Give PROCESS the filter function FILTER; nil means no filter.
  7375. +t means stop accepting output from the process.
  7376. +When a process has a filter, each time it does output
  7377. +the entire string of output is passed to the filter.
  7378. +The filter gets two arguments: the process and the string of output.
  7379. +If the process has a filter, its buffer is not used for output.
  7380. +
  7381. +(set-process-filter PROC FILTER)Fprocess-filter
  7382. +Returns the filter function of PROCESS; nil if none.
  7383. +See `set-process-filter' for more info on filter functions.
  7384. +
  7385. +(process-filter PROC)Fset-process-sentinel
  7386. +Give PROCESS the sentinel SENTINEL; nil for none.
  7387. +The sentinel is called as a function when the process changes state.
  7388. +It gets two arguments: the process, and a string describing the change.
  7389. +
  7390. +(set-process-sentinel PROC SENTINEL)Fprocess-sentinel
  7391. +Return the sentinel of PROCESS; nil if none.
  7392. +See `set-process-sentinel' for more info on sentinels.
  7393. +
  7394. +(process-sentinel PROC)Fset-process-window-size
  7395. +Tell PROCESS that it has logical window size HEIGHT and WIDTH.
  7396. +
  7397. +(set-process-window-size PROC HEIGHT WIDTH)Fprocess-kill-without-query
  7398. +Say no query needed if PROCESS is running when Emacs is exited.
  7399. +Optional second argument if non-nil says to require a query.
  7400. +Value is t if a query was formerly required.
  7401. +
  7402. +(process-kill-without-query PROC &optional VALUE)Fprocess-connection
  7403. +Return the connection type of `PROCESS'.
  7404. +The value is `nil' for a pipe,
  7405. +`t' or `pty' for a pty, or `stream' for a socket connection.
  7406. +
  7407. +(process-connection PROCESS)Flist-processes
  7408. +Display a list of all processes.
  7409. +(Any processes listed as Exited or Signaled are actually eliminated
  7410. +after the listing is made.)
  7411. +
  7412. +(list-processes)Fprocess-list
  7413. +Return a list of all processes.
  7414. +
  7415. +(process-list)Fstart-process
  7416. +Start a program in a subprocess.  Return the process object for it.
  7417. +Args are NAME BUFFER PROGRAM &rest PROGRAM-ARGS
  7418. +NAME is name for process.  It is modified if necessary to make it unique.
  7419. +BUFFER is the buffer or (buffer-name) to associate with the process.
  7420. + Process output goes at end of that buffer, unless you specify
  7421. + an output stream or filter function to handle the output.
  7422. + BUFFER may be also nil, meaning that this process is not associated
  7423. + with any buffer
  7424. +Third arg is program file name.  It is searched for as in the shell.
  7425. +Remaining arguments are strings to give program as arguments.Fopen-network-stream
  7426. +Open a TCP connection for a service to a host.
  7427. +Returns a subprocess-object to represent the connection.
  7428. +Input and output work as for subprocesses; `delete-process' closes it.
  7429. +Args are NAME BUFFER HOST SERVICE.
  7430. +NAME is name for process.  It is modified if necessary to make it unique.
  7431. +BUFFER is the buffer (or buffer-name) to associate with the process.
  7432. + Process output goes at end of that buffer, unless you specify
  7433. + an output stream or filter function to handle the output.
  7434. + BUFFER may be also nil, meaning that this process is not associated
  7435. + with any buffer
  7436. +Third arg is name of the host to connect to, or its IP address.
  7437. +Fourth arg SERVICE is name of the service desired, or an integer
  7438. + specifying a port number to connect to.
  7439. +
  7440. +(open-network-stream NAME BUFFER HOST SERVICE)Faccept-process-output
  7441. +Allow any pending output from subprocesses to be read by Emacs.
  7442. +It is read into the process' buffers or given to their filter functions.
  7443. +Non-nil arg PROCESS means do not return until some output has been received
  7444. +from PROCESS.
  7445. +Non-nil second arg TIMEOUT and third arg TIMEOUT-MSECS are number of
  7446. +seconds and microseconds to wait; return after that much time whether
  7447. +or not there is input.
  7448. +Return non-nil iff we received any output before the timeout expired.
  7449. +
  7450. +(accept-process-output &optional PROC TIMEOUT TIMEOUT-MSECS)Fwaiting-for-user-input-p
  7451. +Returns non-nil if emacs is waiting for input from the user.
  7452. +This is intended for use by asynchronous process output filters and sentinels.
  7453. +
  7454. +(waiting-for-user-input-p)Fprocess-send-region
  7455. +Send current contents of region as input to PROCESS.
  7456. +PROCESS may be a process, a buffer, the name of a process or buffer, or
  7457. +nil, indicating the current buffer's process.
  7458. +Called from program, takes three arguments, PROCESS, START and END.
  7459. +If the region is more than 500 characters long,
  7460. +it is sent in several bunches.  This may happen even for shorter regions.
  7461. +Output from processes can arrive in between bunches.
  7462. +
  7463. +(process-send-region PROCESS START END)Fprocess-send-string
  7464. +Send PROCESS the contents of STRING as input.
  7465. +PROCESS may be a process, a buffer, the name of a process or buffer, or
  7466. +nil, indicating the current buffer's process.
  7467. +If STRING is more than 500 characters long,
  7468. +it is sent in several bunches.  This may happen even for shorter strings.
  7469. +Output from processes can arrive in between bunches.
  7470. +
  7471. +(process-send-string PROCESS STRING)Finterrupt-process
  7472. +Interrupt process PROCESS.  May be process or name of one.
  7473. +PROCESS may be a process, a buffer, or the name of a process or buffer.
  7474. +nil or no arg means current buffer's process.
  7475. +Second arg CURRENT-GROUP non-nil means send signal to
  7476. +the current process-group of the process's controlling terminal
  7477. +rather than to the process's own process group.
  7478. +If the process is a shell, this means interrupt current subjob
  7479. +rather than the shell.
  7480. +
  7481. +(interrupt-process &optional PROCESS CURRENT-GROUP)Fkill-process
  7482. +Kill process PROCESS.  May be process or name of one.
  7483. +See function `interrupt-process' for more details on usage.
  7484. +
  7485. +(kill-process &optional PROCESS CURRENT-GROUP)Fquit-process
  7486. +Send QUIT signal to process PROCESS.  May be process or name of one.
  7487. +See function `interrupt-process' for more details on usage.
  7488. +
  7489. +(quit-process &optional PROCESS CURRENT-GROUP)Fstop-process
  7490. +Stop process PROCESS.  May be process or name of one.
  7491. +See function `interrupt-process' for more details on usage.
  7492. +
  7493. +(stop-process &optional PROCESS CURRENT-GROUP)Fcontinue-process
  7494. +Continue process PROCESS.  May be process or name of one.
  7495. +See function `interrupt-process' for more details on usage.
  7496. +
  7497. +(continue-process &optional PROCESS CURRENT-GROUP)Fsignal-process
  7498. +Send the process with number PID the signal with code CODE.
  7499. +Both PID and CODE are integers.
  7500. +
  7501. +(signal-process PID SIG)Fprocess-send-eof
  7502. +Make PROCESS see end-of-file in its input.
  7503. +Eof comes after any text already sent to it.
  7504. +PROCESS may be a process, a buffer, the name of a process or buffer, or
  7505. +nil, indicating the current buffer's process.
  7506. +If PROCESS is a network connection, or is a process communicating
  7507. +through a pipe (as opposed to a pty), then you cannot send any more
  7508. +text to PROCESS after you call this function.
  7509. +
  7510. +(process-send-eof &optional PROCESS)Vdelete-exited-processes
  7511. +*Non-nil means delete processes immediately when they exit.
  7512. +nil means don't delete them until `list-processes' is run.Vprocess-connection-type
  7513. +Control type of device used to communicate with subprocesses.
  7514. +Values are nil to use a pipe, or t or `pty' to use a pty.
  7515. +The value has no effect if the system has no ptys or if all ptys are busy:
  7516. +then a pipe is used in any case.
  7517. +The value takes effect when `start-process' is called.Fcall-process
  7518. +Call PROGRAM synchronously in separate process.
  7519. +The program's input comes from file INFILE (nil means `/dev/null').
  7520. +Insert output in BUFFER before point; t means current buffer;
  7521. + nil for BUFFER means discard it; 0 means discard and don't wait.
  7522. +Fourth arg DISPLAY non-nil means redisplay buffer as output is inserted.
  7523. +Remaining arguments are strings passed as command arguments to PROGRAM.
  7524. +If BUFFER is 0, returns immediately with value nil.
  7525. +Otherwise waits for PROGRAM to terminate
  7526. +and returns a numeric exit status or a signal description string.
  7527. +If you quit, the process is killed with SIGINT, or SIGKILL if you quit again.Fcall-process-region
  7528. +Send text from START to END to a synchronous process running PROGRAM.
  7529. +Delete the text if fourth arg DELETE is non-nil.
  7530. +Insert output in BUFFER before point; t means current buffer;
  7531. + nil for BUFFER means discard it; 0 means discard and don't wait.
  7532. +Sixth arg DISPLAY non-nil means redisplay buffer as output is inserted.
  7533. +Remaining args are passed to PROGRAM at startup as command args.
  7534. +If BUFFER is nil, returns immediately with value nil.
  7535. +Otherwise waits for PROGRAM to terminate
  7536. +and returns a numeric exit status or a signal description string.
  7537. +If you quit, the process is killed with SIGINT, or SIGKILL if you quit again.Fgetenv
  7538. +Return the value of environment variable VAR, as a string.
  7539. +VAR should be a string.  Value is nil if VAR is undefined in the environment.
  7540. +This function consults the variable ``process-environment'' for its value.
  7541. +
  7542. +(getenv VAR)Vbinary-process-input
  7543. +*If non-nil then new subprocesses are assumed to take binary input.Vbinary-process-output
  7544. +*If non-nil then new subprocesses are assumed to produce binary output.Vshell-file-name
  7545. +*File name to load inferior shells from.
  7546. +Initialized from the SHELL environment variable.Vexec-path
  7547. +*List of directories to search programs to run in subprocesses.
  7548. +Each element is a string (directory name) or nil (try default directory).Vexec-directory
  7549. +Directory of architecture-dependent files that come with GNU Emacs,
  7550. +especially executable programs intended for Emacs to invoke.Vdata-directory
  7551. +Directory of architecture-independent files that come with GNU Emacs,
  7552. +intended for Emacs to use.Vdoc-directory
  7553. +Directory containing the DOC file that comes with GNU Emacs.
  7554. +This is usually the same as data-directory.Vconfigure-info-directory
  7555. +For internal use by the build procedure only.
  7556. +This is the name of the directory in which the build procedure installed
  7557. +Emacs's info files; the default value for Info-default-directory-list
  7558. +includes this.Vprocess-environment
  7559. +List of environment variables for subprocesses to inherit.
  7560. +Each element should be a string of the form ENVVARNAME=VALUE.
  7561. +The environment which Emacs inherits is placed in this variable
  7562. +when Emacs starts.Famiga-cut
  7563. +Copy string into Amiga clipboard.
  7564. +
  7565. +(amiga-cut ARG)Famiga-paste
  7566. +Returns text currently in the Amiga clipboard, or NIL if there is none.
  7567. +
  7568. +(amiga-paste)Vamiga-new-clip
  7569. +Set to t every time a new clip is put in the Amiga clipboardFamiga-put-icon
  7570. +Create an icon for FILE.
  7571. +If FORCE is non-nil create it unconditionally, otherwise only if one doesn't exist.
  7572. +Returns t if an icon was created, nil otherwise.
  7573. +
  7574. +(amiga-put-icon FILE FORCE)Vamiga-initialized
  7575. +Vamiga-malloc-bytes-used
  7576. +Number of malloc bytes used when emacs was dumpedVamiga-create-icons
  7577. +If non-nil, create icons when saving files.Vamiga-process-stack-size
  7578. +Size of stack for called processes. 0 means same size as emacs stack.Famiga-mouse-events
  7579. +Return number of pending mouse events from Intuition.
  7580. +
  7581. +(amiga-mouse-events)Famiga-proc-mouse-event
  7582. +Pulls a mouse event out of the mouse event buffer and dispatches
  7583. +the appropriate function to act upon this event.
  7584. +
  7585. +(amiga-proc-mouse-event)Famiga-get-mouse-event
  7586. +Get next mouse event out of mouse event buffer (com-letter (x y)).
  7587. +ARG non-nil means return nil immediately if no pending event;
  7588. +otherwise, wait for an event.
  7589. +
  7590. +(amiga-get-mouse-event ARG)Famiga-get-wb-event
  7591. +Get next Workbench event out of workbench event buffer (a file name).
  7592. +ARG non-nil means return nil immediately if no pending event;
  7593. +otherwise, wait for an event.
  7594. +
  7595. +(amiga-get-wb-event ARG)Famiga-set-foreground-color
  7596. +Use PEN as foreground color
  7597. +
  7598. +(amiga-set-foreground-color PEN)Famiga-set-background-color
  7599. +Use PEN as background color
  7600. +
  7601. +(amiga-set-background-color PEN)Famiga-set-inverse-fill-pen
  7602. +Use PEN's color for inverse fills (0-7 or 8 for reverse)
  7603. +
  7604. +(amiga-set-inverse-fill-pen PEN)Famiga-set-inverse-text-pen
  7605. +Use PEN's color for inverse fills (0-7 or 8 for reverse)
  7606. +
  7607. +(amiga-set-inverse-text-pen PEN)Famiga-set-font
  7608. +Set font used for window to FONT with given HEIGHT.
  7609. +The font used must be non-proportional.
  7610. +
  7611. +(amiga-set-font WFONT HEIGHT)Famiga-set-geometry
  7612. +Set Emacs window geometry and screen.
  7613. +First 4 parameters are the (X,Y) position of the top-left corner of the window
  7614. +and its WIDTH and HEIGHT. These must be big enough for an 11x4 characters window.
  7615. +If nil is given for any of these, that means to keep the same value as before.
  7616. +The optional argument SCREEN specifies which screen to use, nil stands for the
  7617. +same screen as the window is on, t stands for the default public screen (normally
  7618. +the Workbench), a string specifies a given public screen.
  7619. +If optional argument BACKDROP is t, a backdrop window is used.Famiga-get-window-geometry
  7620. +Get Emacs window geometry.
  7621. +a list returned is of the form:  (iconified x y width height backdrop)
  7622. +where x, y, width, height are integers, backdrop is t or nil and iconified
  7623. +is t if the window is iconified and nil otherwise
  7624. +
  7625. +(amiga-get-window-geometry)Famiga-get-screen-geometry
  7626. +Get geometry of the screen emacs window resides on.
  7627. +a list returned is of the form:  (name x y width height)
  7628. +where name is a string, x, y, width, height are integers.
  7629. +Only the public screen name is returned if the window is not currently open.
  7630. +In this last case, the name may be nil if the window will be opened on the
  7631. +default public screen.
  7632. +
  7633. +(amiga-get-screen-geometry)Famiga-iconify
  7634. +Toggle the emacs iconification state.
  7635. +
  7636. +(amiga-iconify)Famiga-set-icon-pos
  7637. +Set the X Y position of the icon for emacs when iconified.
  7638. +
  7639. +(amiga-set-icon-pos LISP-OBJECT X LISP-OBJECT Y)Famiga-activate-window
  7640. +Makes emacs window the currently active one.
  7641. +
  7642. +(amiga-activate-window)Famiga-window-to-front
  7643. +Pulls the emacs window to the front (including screen)
  7644. +
  7645. +(amiga-window-to-front)Famiga-window-to-back
  7646. +Pushes the emacs window to the back (including screen)
  7647. +
  7648. +(amiga-window-to-back)Famiga-popup-font-request
  7649. +Open an ASL Font Requester and return the value as cons of font name and font size.
  7650. +
  7651. +(amiga-popup-font-request)Vamiga-mouse-item
  7652. +Encoded representation of last mouse click, corresponding to
  7653. +numerical entries in amiga-mouse-map.Vamiga-mouse-pos
  7654. +Current x-y position of mouse by row, column as specified by font.Vamiga-remap-bsdel
  7655. +*If true, map DEL to Ctrl-D and Backspace to DEL. 
  7656. +This is the most convenient (and default) setting. If nil, don't remap.Vamiga-remap-numeric-keypad
  7657. +*If true, numeric keypad keys are prefixed with C-x C-^ K.
  7658. +This enables you to remap them, but causes problems with functions like
  7659. +isearch-forward-regexp on some keyboards. Default to true.Vamiga-mouse-initialized
  7660. +Set to true once lisp has been setup to process mouse commands.
  7661. +No mouse processing request (C-X C-^ M) will be queued while this is nil.Vamiga-wb-initialized
  7662. +Set to true once lisp has been setup to process workbench commands.
  7663. +No workbench processing request (C-X C-^ W) will be queued while this is nil.Famiga-arexx-wait
  7664. +Wait for an ARexx event (command or reply) before proceeding.
  7665. +
  7666. +(amiga-arexx-wait)Famiga-arexx-check-command
  7667. +Return t if command ID has finished, nil otherwise.
  7668. +
  7669. +(amiga-arexx-check-command ID)Famiga-arexx-get-next-msg
  7670. +Returns the oldest arexx msg sent to emacs rexx port.
  7671. +When you are through with this message call (amiga-arexx-reply).
  7672. +if the msg is not replied this function will continue to
  7673. +return that msg until it has been replied to.
  7674. +
  7675. +(amiga-arexx-get-next-msg)Famiga-arexx-get-msg-results
  7676. +Returns the results from MSGID. will be a list of the form:
  7677. +  (msgid resultcode secondary)
  7678. +
  7679. +If resultcode is 0 then secondary will be a string or nil.
  7680. +else resulcode will be greater than 0 and secondary will be
  7681. +an error-code (int).
  7682. +
  7683. +If MSGID has not yet completed nil is returned.
  7684. +if MSGID has been dealt with or is invalid and error will occur.
  7685. +
  7686. +(amiga-arexx-get-msg-results MSGID)Famiga-arexx-reply
  7687. +Replies to the first arexx message (the one got via amiga-arexx-get-event)
  7688. +with RC as return code.
  7689. +If RC=0, TEXT is the result, otherwise it is the error text. It can be nil.
  7690. +
  7691. +(amiga-arexx-reply RC TEXT)Famiga-arexx-send-command
  7692. +Sends a command to ARexx for execution.
  7693. +If the second arg is non-nil, the command is directly interpreted.
  7694. +Returns an integer that uniquely identifies this message.  This must
  7695. +then be used to get the results from the command.
  7696. +NOTE: this is very different from old way things worked.
  7697. +      earlier versions of emacs discarded successful results
  7698. +      and errors always got replied to becuase they caused failures
  7699. +      Neither of these are true now.This function is also no longer interactive.
  7700. +Use (amiga-arexx-do-command)
  7701. +
  7702. +
  7703. +(amiga-arexx-send-command STR &optional AS-FILE)Vamiga-arexx-initialized
  7704. +Set this to t when Emacs is ready to respond to ARexx messages.
  7705. +Fsun-window-init
  7706. +One time setup for using Sun Windows with mouse.
  7707. +Unless optional argument FORCE is non-nil, is a noop after its first call.
  7708. +Returns a number representing the file descriptor of the open Sun Window,
  7709. +or -1 if can not open it.
  7710. +
  7711. +(sun-window-init &optional FORCE)Fsit-for-millisecs
  7712. +Like sit-for, but ARG is milliseconds. 
  7713. +Perform redisplay, then wait for ARG milliseconds or until
  7714. +input is available.  Returns t if wait completed with no input.
  7715. +Redisplay does not happen if input is available before it starts.
  7716. +
  7717. +(sit-for-millisecs N)Fsleep-for-millisecs
  7718. +Pause, without updating display, for ARG milliseconds.
  7719. +
  7720. +(sleep-for-millisecs N)Fupdate-display
  7721. +Perform redisplay.
  7722. +
  7723. +(update-display)Fsun-change-cursor-icon
  7724. +Change the Sun mouse cursor icon.  ICON is a lisp vector whose 1st element
  7725. +is the X offset of the cursor hot-point, whose 2nd element is the Y offset
  7726. +of the cursor hot-point and whose 3rd element is the cursor pixel data
  7727. +expressed as a string.  If ICON is nil then the original arrow cursor is used
  7728. +
  7729. +(sun-change-cursor-icon ICON)Fsun-set-selection
  7730. +Set the current sunwindow selection to STRING.
  7731. +
  7732. +(sun-set-selection STR)Fsun-get-selection
  7733. +Return the current sunwindows selection as a string.
  7734. +
  7735. +(sun-get-selection)Fsun-menu-internal
  7736. +Set up a SunView pop-up menu and return the user's choice.
  7737. +Arguments WINDOW, X, Y, BUTTON, and MENU.
  7738. +*** User code should generally use sun-menu-evaluate ***
  7739. +
  7740. +Arguments WINDOW, X, Y, BUTTON, and MENU.
  7741. +Put MENU up in WINDOW at position X, Y.
  7742. +The BUTTON argument specifies the button to be released that selects an item:
  7743. +   1 = LEFT BUTTON
  7744. +   2 = MIDDLE BUTTON
  7745. +   4 = RIGHT BUTTON
  7746. +The MENU argument is a vector containing (STRING . VALUE) pairs.
  7747. +The VALUE of the selected item is returned.
  7748. +If the VALUE of the first pair is nil, then the first STRING will be used
  7749. +as a menu label.
  7750. +
  7751. +(sun-menu-internal WINDOW X-POSITION Y-POSITION BUTTON MENU)Vonly-global-abbrevs
  7752. +*t means user plans to use global abbrevs only.
  7753. +Makes the commands to define mode-specific abbrevs define global ones instead.Fabbrev-mode
  7754. +Toggle abbrev mode.
  7755. +With argument ARG, turn abbrev mode on iff ARG is positive.
  7756. +In abbrev mode, inserting an abbreviation causes it to expand
  7757. +and be replaced by its expansion.Vedit-abbrevs-map
  7758. +Keymap used in edit-abbrevs.Fkill-all-abbrevs
  7759. +Undefine all defined abbrevs.Finsert-abbrevs
  7760. +Insert after point a description of all defined abbrevs.
  7761. +Mark is set after the inserted text.Flist-abbrevs
  7762. +Display a list of all defined abbrevs.Fedit-abbrevs-mode
  7763. +Major mode for editing the list of abbrev definitions.
  7764. +\{edit-abbrevs-map}Fedit-abbrevs
  7765. +Alter abbrev definitions by editing a list of them.
  7766. +Selects a buffer containing a list of abbrev definitions.
  7767. +You can edit them and type \<edit-abbrevs-map>\[edit-abbrevs-redefine] to redefine abbrevs
  7768. +according to your editing.
  7769. +Buffer contains a header line for each abbrev table,
  7770. + which is the abbrev table name in parentheses.
  7771. +This is followed by one line per abbrev in that table:
  7772. +NAME   USECOUNT   EXPANSION   HOOK
  7773. +where NAME and EXPANSION are strings with quotes,
  7774. +USECOUNT is an integer, and HOOK is any valid function
  7775. +or may be omitted (it is usually omitted).Fedit-abbrevs-redefine
  7776. +Redefine abbrevs according to current buffer contents.Fdefine-abbrevs
  7777. +Define abbrevs according to current visible buffer contents.
  7778. +See documentation of `edit-abbrevs' for info on the format of the
  7779. +text you must have in the buffer.
  7780. +With argument, eliminate all abbrev definitions except
  7781. +the ones defined from the buffer now.Fread-abbrev-file
  7782. +Read abbrev definitions from file written with `write-abbrev-file'.
  7783. +Optional argument FILE is the name of the file to read;
  7784. +it defaults to the value of `abbrev-file-name'.
  7785. +Optional second argument QUIETLY non-nil means don't print anything.Fquietly-read-abbrev-file
  7786. +Read abbrev definitions from file written with write-abbrev-file.
  7787. +Optional argument FILE is the name of the file to read;
  7788. +it defaults to the value of `abbrev-file-name'.
  7789. +Does not print anything.Fwrite-abbrev-file
  7790. +Write all abbrev definitions to a file of Lisp code.
  7791. +The file written can be loaded in another session to define the same abbrevs.
  7792. +The argument FILE is the file name to write.Fadd-mode-abbrev
  7793. +Define mode-specific abbrev for last word(s) before point.
  7794. +Argument is how many words before point form the expansion;
  7795. +or zero means the region is the expansion.
  7796. +A negative argument means to undefine the specified abbrev.
  7797. +Reads the abbreviation in the minibuffer.
  7798. +
  7799. +Don't use this function in a Lisp program; use `define-abbrev' instead.Fadd-global-abbrev
  7800. +Define global (all modes) abbrev for last word(s) before point.
  7801. +The prefix argument specifies the number of words before point that form the
  7802. +expansion; or zero means the region is the expansion.
  7803. +A negative argument means to undefine the specified abbrev.
  7804. +This command uses the minibuffer to read the abbreviation.
  7805. +
  7806. +Don't use this function in a Lisp program; use `define-abbrev' instead.Finverse-add-mode-abbrev
  7807. +Define last word before point as a mode-specific abbrev.
  7808. +With prefix argument N, defines the Nth word before point.
  7809. +This command uses the minibuffer to read the expansion.
  7810. +Expands the abbreviation after defining it.Finverse-add-global-abbrev
  7811. +Define last word before point as a global (mode-independent) abbrev.
  7812. +With prefix argument N, defines the Nth word before point.
  7813. +This command uses the minibuffer to read the expansion.
  7814. +Expands the abbreviation after defining it.Fabbrev-prefix-mark
  7815. +Mark current point as the beginning of an abbrev.
  7816. +Abbrev to be expanded starts here rather than at beginning of word.
  7817. +This way, you can expand an abbrev with a prefix: insert the prefix,
  7818. +use this command, then insert the abbrev.Fexpand-region-abbrevs
  7819. +For abbrev occurrence in the region, offer to expand it.
  7820. +The user is asked to type y or n for each occurrence.
  7821. +A prefix argument means don't query; expand all abbrevs.
  7822. +If called from a Lisp program, arguments are START END &optional NOQUERY.VBuffer-menu-mode-map
  7823. +FBuffer-menu-mode
  7824. +Major mode for editing a list of buffers.
  7825. +Each line describes one of the buffers in Emacs.
  7826. +Letters do not insert themselves; instead, they are commands.
  7827. +\<Buffer-menu-mode-map>
  7828. +\[Buffer-menu-mouse-select] -- select buffer you click on, in place of the buffer menu.
  7829. +\[Buffer-menu-this-window] -- select current line's buffer in place of the buffer menu.
  7830. +\[Buffer-menu-other-window] -- select that buffer in another window,
  7831. +  so the buffer menu buffer remains visible in its window.
  7832. +\[Buffer-menu-switch-other-window] -- make another window display that buffer.
  7833. +\[Buffer-menu-mark] -- mark current line's buffer to be displayed.
  7834. +\[Buffer-menu-select] -- select current line's buffer.
  7835. +  Also show buffers marked with m, in other windows.
  7836. +\[Buffer-menu-1-window] -- select that buffer in full-frame window.
  7837. +\[Buffer-menu-2-window] -- select that buffer in one window,
  7838. +  together with buffer selected before this one in another window.
  7839. +\[Buffer-menu-visit-tags-table] -- visit-tags-table this buffer.
  7840. +\[Buffer-menu-not-modified] -- clear modified-flag on that buffer.
  7841. +\[Buffer-menu-save] -- mark that buffer to be saved, and move down.
  7842. +\[Buffer-menu-delete] -- mark that buffer to be deleted, and move down.
  7843. +\[Buffer-menu-delete-backwards] -- mark that buffer to be deleted, and move up.
  7844. +\[Buffer-menu-execute] -- delete or save marked buffers.
  7845. +\[Buffer-menu-unmark] -- remove all kinds of marks from current line.
  7846. +  With prefix argument, also move up one line.
  7847. +\[Buffer-menu-backup-unmark] -- back up a line and remove marks.
  7848. +\[Buffer-menu-toggle-read-only] -- toggle read-only status of buffer on this line.FBuffer-menu-buffer
  7849. +Return buffer described by this line of buffer menu.Fbuffer-menu
  7850. +Make a menu of buffers so you can save, delete or select them.
  7851. +With argument, show only buffers that are visiting files.
  7852. +Type ? after invocation to get help on commands available.
  7853. +Type q immediately to make the buffer menu go away and to restore
  7854. +previous window configuration.FBuffer-menu-quit
  7855. +Quit the buffer menu.FBuffer-menu-mark
  7856. +Mark buffer on this line for being displayed by \<Buffer-menu-mode-map>\[Buffer-menu-select] command.FBuffer-menu-unmark
  7857. +Cancel all requested operations on buffer on this line and move down.
  7858. +Optional ARG means move up.FBuffer-menu-backup-unmark
  7859. +Move up and cancel all requested operations on buffer on line above.FBuffer-menu-delete
  7860. +Mark buffer on this line to be deleted by \<Buffer-menu-mode-map>\[Buffer-menu-execute] command.FBuffer-menu-delete-backwards
  7861. +Mark buffer on this line to be deleted by \<Buffer-menu-mode-map>\[Buffer-menu-execute] command
  7862. +and then move up one lineFBuffer-menu-save
  7863. +Mark buffer on this line to be saved by \<Buffer-menu-mode-map>\[Buffer-menu-execute] command.FBuffer-menu-not-modified
  7864. +Mark buffer on this line as unmodified (no changes to save).FBuffer-menu-execute
  7865. +Save and/or delete buffers marked with \<Buffer-menu-mode-map>\[Buffer-menu-save] or \<Buffer-menu-mode-map>\[Buffer-menu-delete] commands.FBuffer-menu-select
  7866. +Select this line's buffer; also display buffers marked with `>'.
  7867. +You can mark buffers with the \<Buffer-menu-mode-map>\[Buffer-menu-mark] command.FBuffer-menu-visit-tags-table
  7868. +Visit the tags table in the buffer on this line.  See `visit-tags-table'.FBuffer-menu-1-window
  7869. +Select this line's buffer, alone, in full frame.FBuffer-menu-mouse-select
  7870. +Select the buffer whose line you click on.FBuffer-menu-this-window
  7871. +Select this line's buffer in this window.FBuffer-menu-other-window
  7872. +Select this line's buffer in other window, leaving buffer menu visible.FBuffer-menu-switch-other-window
  7873. +Make the other window select this line's buffer.
  7874. +The current window remains selected.FBuffer-menu-2-window
  7875. +Select this line's buffer, with previous buffer in second window.FBuffer-menu-toggle-read-only
  7876. +Toggle read-only status of buffer on this line, perhaps via version control.Fdefsubst
  7877. +Define an inline function.  The syntax is just like that of `defun'.Fmake-obsolete
  7878. +Make the byte-compiler warn that FUNCTION is obsolete.
  7879. +The warning will say that NEW should be used instead.
  7880. +If NEW is a string, that is the `use instead' message.Fmake-obsolete-variable
  7881. +Make the byte-compiler warn that VARIABLE is obsolete,
  7882. +and NEW should be used instead.  If NEW is a string, then that is the
  7883. +`use instead' message.Fdont-compile
  7884. +Like `progn', but the body always runs interpreted (not compiled).
  7885. +If you think you need this, you're probably making a mistake somewhere.Feval-when-compile
  7886. +Like `progn', but evaluates the body at compile time.
  7887. +The result of the body appears to the compiler as a quoted constant.Feval-and-compile
  7888. +Like `progn', but evaluates the body at compile time and at load time.Vc-mode-abbrev-table
  7889. +Abbrev table in use in C mode.Vc-mode-map
  7890. +Keymap used in C mode.Fc-macro-expand
  7891. +Display the result of expanding all C macros occurring in the region.
  7892. +The expansion is entirely correct because it uses the C preprocessor.Vc-mode-syntax-table
  7893. +Syntax table in use in C-mode buffers.Vc-indent-level
  7894. +*Indentation of C statements with respect to containing block.Vc-brace-imaginary-offset
  7895. +*Imagined indentation of a C open brace that actually follows a statement.Vc-brace-offset
  7896. +*Extra indentation for braces, compared with other text in same context.Vc-argdecl-indent
  7897. +*Indentation level of declarations of C function arguments.Vc-label-offset
  7898. +*Offset of C label lines and case statements relative to usual indentation.Vc-continued-statement-offset
  7899. +*Extra indent for lines not starting new statements.Vc-continued-brace-offset
  7900. +*Extra indent for substatements that start with open-braces.
  7901. +This is in addition to c-continued-statement-offset.Vc-auto-newline
  7902. +*Non-nil means automatically newline before and after braces,
  7903. +and after colons and semicolons, inserted in C code.
  7904. +If you do not want a leading newline before braces then use:
  7905. +  (define-key c-mode-map "{" 'electric-c-semi)Vc-tab-always-indent
  7906. +*Non-nil means TAB in C mode should always reindent the current line,
  7907. +regardless of where in the line point is when the TAB command is used.Fc-mode
  7908. +Major mode for editing C code.
  7909. +Expression and list commands understand all C brackets.
  7910. +Tab indents for C code.
  7911. +Comments are delimited with /* ... */.
  7912. +Paragraphs are separated by blank lines only.
  7913. +Delete converts tabs to spaces as it moves back.
  7914. +\{c-mode-map}
  7915. +Variables controlling indentation style:
  7916. + c-tab-always-indent
  7917. +    Non-nil means TAB in C mode should always reindent the current line,
  7918. +    regardless of where in the line point is when the TAB command is used.
  7919. + c-auto-newline
  7920. +    Non-nil means automatically newline before and after braces,
  7921. +    and after colons and semicolons, inserted in C code.
  7922. + c-indent-level
  7923. +    Indentation of C statements within surrounding block.
  7924. +    The surrounding block's indentation is the indentation
  7925. +    of the line on which the open-brace appears.
  7926. + c-continued-statement-offset
  7927. +    Extra indentation given to a substatement, such as the
  7928. +    then-clause of an if or body of a while.
  7929. + c-continued-brace-offset
  7930. +    Extra indentation given to a brace that starts a substatement.
  7931. +    This is in addition to c-continued-statement-offset.
  7932. + c-brace-offset
  7933. +    Extra indentation for line if it starts with an open brace.
  7934. + c-brace-imaginary-offset
  7935. +    An open brace following other text is treated as if it were
  7936. +    this far to the right of the start of its line.
  7937. + c-argdecl-indent
  7938. +    Indentation level of declarations of C function arguments.
  7939. + c-label-offset
  7940. +    Extra indentation for line that is a label, or case or default.
  7941. +
  7942. +Settings for K&R and BSD indentation styles are
  7943. +  c-indent-level                5    8
  7944. +  c-continued-statement-offset  5    8
  7945. +  c-brace-offset               -5   -8
  7946. +  c-argdecl-indent              0    8
  7947. +  c-label-offset               -5   -8
  7948. +
  7949. +Turning on C mode calls the value of the variable c-mode-hook with no args,
  7950. +if that value is non-nil.Fc-fill-paragraph
  7951. +Like \[fill-paragraph] but handle C comments.
  7952. +If any of the current line is a comment or within a comment,
  7953. +fill the comment or the paragraph of it that point is in,
  7954. +preserving the comment indentation or line-starting decorations.Felectric-c-brace
  7955. +Insert character and correct line's indentation.Felectric-c-sharp-sign
  7956. +Insert character and correct line's indentation.Felectric-c-semi
  7957. +Insert character and correct line's indentation.Felectric-c-terminator
  7958. +Insert character and correct line's indentation.Fc-indent-command
  7959. +Indent current line as C code, or in some cases insert a tab character.
  7960. +If `c-tab-always-indent' is non-nil (the default), always indent current line.
  7961. +Otherwise, indent the current line only if point is at the left margin or
  7962. +in the line's indentation; otherwise insert a tab.
  7963. +
  7964. +A numeric argument, regardless of its value, means indent rigidly all the
  7965. +lines of the expression starting after point so that this line becomes
  7966. +properly indented.  The relative indentation among the lines of the
  7967. +expression are preserved.Fc-indent-line
  7968. +Indent current line as C code.
  7969. +Return the amount the indentation changed by.Fcalculate-c-indent
  7970. +Return appropriate indentation for current line as C code.
  7971. +In usual case returns an integer: the column to indent to.
  7972. +Returns nil if line starts inside a string, t if in a comment.Fcalculate-c-indent-within-comment
  7973. +Return the indentation amount for line inside a block comment.
  7974. +Optional arg AFTER-STAR means, if lines in the comment have a leading star,
  7975. +return the indentation of the text that would follow this star.Fc-backward-to-start-of-if
  7976. +Move to the start of the last "unbalanced" `if'.Fc-backward-to-start-of-do
  7977. +If point follows a `do' statement, move to beginning of it and return t.
  7978. +Otherwise return nil and don't move point.Fc-beginning-of-statement
  7979. +Go to the beginning of the innermost C statement.
  7980. +With prefix arg, go back N - 1 statements.  If already at the beginning of a
  7981. +statement then go to the beginning of the preceding one.
  7982. +If within a string or comment, or next to a comment (only whitespace between),
  7983. +move by sentences instead of statements.Fc-end-of-statement
  7984. +Go to the end of the innermost C statement.
  7985. +With prefix arg, go forward N - 1 statements.
  7986. +Move forward to end of the next statement if already at end.
  7987. +If within a string or comment, move by sentences instead of statements.Fmark-c-function
  7988. +Put mark at end of C function, point at beginning.Findent-c-exp
  7989. +Indent each line of the C grouping following point.Fset-c-style
  7990. +Set C-mode variables to use one of several different indentation styles.
  7991. +The arguments are a string representing the desired style
  7992. +and a flag which, if non-nil, means to set the style globally.
  7993. +(Interactively, the flag comes from the prefix argument.)
  7994. +Available styles are GNU, K&R, BSD and Whitesmith.Vc-backslash-column
  7995. +*Minimum column for end-of-line backslashes of macro definitions.Fc-backslash-region
  7996. +Insert, align, or delete end-of-line backslashes on the lines in the region.
  7997. +With no argument, inserts backslashes and aligns existing backslashes.
  7998. +With an argument, deletes the backslashes.
  7999. +
  8000. +This function does not modify the last line of the region if the region ends 
  8001. +right at the start of the following line; it does not modify blank lines
  8002. +at the start of the region.  So you can put the region around an entire macro
  8003. +definition and conveniently use this command.Fc-up-conditional
  8004. +Move back to the containing preprocessor conditional, leaving mark behind.
  8005. +A prefix argument acts as a repeat count.  With a negative argument,
  8006. +move forward to the end of the containing preprocessor conditional.
  8007. +When going backwards, `#elif' is treated like `#else' followed by `#if'.
  8008. +When going forwards, `#elif' is ignored.Fc-backward-conditional
  8009. +Move back across a preprocessor conditional, leaving mark behind.
  8010. +A prefix argument acts as a repeat count.  With a negative argument,
  8011. +move forward across a preprocessor conditional.Fc-forward-conditional
  8012. +Move forward across a preprocessor conditional, leaving mark behind.
  8013. +A prefix argument acts as a repeat count.  With a negative argument,
  8014. +move backward across a preprocessor conditional.Vdelete-auto-save-files
  8015. +*Non-nil means delete auto-save file when a buffer is saved or killed.Vdirectory-abbrev-alist
  8016. +*Alist of abbreviations for file directories.
  8017. +A list of elements of the form (FROM . TO), each meaning to replace
  8018. +FROM with TO when it appears in a directory name.  This replacement is
  8019. +done when setting up the default directory of a newly visited file.
  8020. +*Every* FROM string should start with `^'.
  8021. +
  8022. +Do not use `~' in the TO strings.
  8023. +They should be ordinary absolute directory names.
  8024. +
  8025. +Use this feature when you have directories which you normally refer to
  8026. +via absolute symbolic links.  Make TO the name of the link, and FROM
  8027. +the name it is linked to.Vmake-backup-files
  8028. +*Non-nil means make a backup of a file the first time it is saved.
  8029. +This can be done by renaming the file or by copying.
  8030. +
  8031. +Renaming means that Emacs renames the existing file so that it is a
  8032. +backup file, then writes the buffer into a new file.  Any other names
  8033. +that the old file had will now refer to the backup file.  The new file
  8034. +is owned by you and its group is defaulted.
  8035. +
  8036. +Copying means that Emacs copies the existing file into the backup
  8037. +file, then writes the buffer on top of the existing file.  Any other
  8038. +names that the old file had will now refer to the new (edited) file.
  8039. +The file's owner and group are unchanged.
  8040. +
  8041. +The choice of renaming or copying is controlled by the variables
  8042. +`backup-by-copying', `backup-by-copying-when-linked' and
  8043. +`backup-by-copying-when-mismatch'.  See also `backup-inhibited'.Vbackup-inhibited
  8044. +Non-nil means don't make a backup, regardless of the other parameters.
  8045. +This variable is intended for use by making it local to a buffer.
  8046. +But it is local only if you make it local.Vbackup-by-copying
  8047. +*Non-nil means always use copying to create backup files.
  8048. +See documentation of variable `make-backup-files'.Vbackup-by-copying-when-linked
  8049. +*Non-nil means use copying to create backups for files with multiple names.
  8050. +This causes the alternate names to refer to the latest version as edited.
  8051. +This variable is relevant only if `backup-by-copying' is nil.Vbackup-by-copying-when-mismatch
  8052. +*Non-nil means create backups by copying if this preserves owner or group.
  8053. +Renaming may still be used (subject to control of other variables)
  8054. +when it would not result in changing the owner or group of the file;
  8055. +that is, for files which are owned by you and whose group matches
  8056. +the default for a new file created there by you.
  8057. +This variable is relevant only if `backup-by-copying' is nil.Vbackup-enable-predicate
  8058. +Predicate that looks at a file name and decides whether to make backups.
  8059. +Called with an absolute file name as argument, it returns t to enable backup.Vbuffer-offer-save
  8060. +*Non-nil in a buffer means offer to save the buffer on exit
  8061. +even if the buffer is not visiting a file.
  8062. +Automatically local in all buffers.Vfind-file-existing-other-name
  8063. +*Non-nil means find a file under alternative names, in existing buffers.
  8064. +This means if any existing buffer is visiting the file you want
  8065. +under another name, you get the existing buffer instead of a new buffer.Vfind-file-visit-truename
  8066. +*Non-nil means visit a file under its truename.
  8067. +The truename of a file is found by chasing all links
  8068. +both at the file level and at the levels of the containing directories.Vbuffer-file-truename
  8069. +The abbreviated truename of the file visited in the current buffer.
  8070. +That is, (abbreviated-file-name (file-truename buffer-file-name)).
  8071. +This variable is automatically local in all buffers, when non-nil.Vbuffer-file-number
  8072. +The device number and file number of the file visited in the current buffer.
  8073. +The value is a list of the form (FILENUM DEVNUM).
  8074. +This pair of numbers uniquely identifies the file.
  8075. +If the buffer is visiting a new file, the value is nil.Vfile-precious-flag
  8076. +*Non-nil means protect against I/O errors while saving files.
  8077. +Some modes set this non-nil in particular buffers.Vversion-control
  8078. +*Control use of version numbers for backup files.
  8079. +t means make numeric backup versions unconditionally.
  8080. +nil means make them for files that have some already.
  8081. +`never' means do not make them.Vdired-kept-versions
  8082. +*When cleaning directory, number of versions to keep.Vdelete-old-versions
  8083. +*If t, delete excess backup versions silently.
  8084. +If nil, ask confirmation.  Any other value prevents any trimming.Vkept-old-versions
  8085. +*Number of oldest versions to keep when a new numbered backup is made.Vkept-new-versions
  8086. +*Number of newest versions to keep when a new numbered backup is made.
  8087. +Includes the new backup.  Must be > 0Vrequire-final-newline
  8088. +*Value of t says silently ensure a file ends in a newline when it is saved.
  8089. +Non-nil but not t says ask user whether to add a newline when there isn't one.
  8090. +nil means don't add newlines.Vauto-save-default
  8091. +*Non-nil says by default do auto-saving of every file-visiting buffer.Vauto-save-visited-file-name
  8092. +*Non-nil says auto-save a buffer in the file it is visiting, when practical.
  8093. +Normally auto-save files are written under other names.Vsave-abbrevs
  8094. +*Non-nil means save word abbrevs too when files are saved.
  8095. +Loading an abbrev file sets this to t.Vfind-file-run-dired
  8096. +*Non-nil says run dired if `find-file' is given the name of a directory.Vfind-file-not-found-hooks
  8097. +List of functions to be called for `find-file' on nonexistent file.
  8098. +These functions are called as soon as the error is detected.
  8099. +`buffer-file-name' is already set up.
  8100. +The functions are called in the order given until one of them returns non-nil.Vfind-file-hooks
  8101. +List of functions to be called after a buffer is loaded from a file.
  8102. +The buffer's local variables (if any) will have been processed before the
  8103. +functions are called.Vwrite-file-hooks
  8104. +List of functions to be called before writing out a buffer to a file.
  8105. +If one of them returns non-nil, the file is considered already written
  8106. +and the rest are not called.
  8107. +These hooks are considered to pertain to the visited file.
  8108. +So this list is cleared if you change the visited file name.
  8109. +See also `write-contents-hooks'.
  8110. +Don't make this variable buffer-local; instead, use `local-write-file-hooks'.Vlocal-write-file-hooks
  8111. +Just like `write-file-hooks', except intended for per-buffer use.
  8112. +The functions in this list are called before the ones in
  8113. +`write-file-hooks'.Vwrite-contents-hooks
  8114. +List of functions to be called before writing out a buffer to a file.
  8115. +If one of them returns non-nil, the file is considered already written
  8116. +and the rest are not called.
  8117. +These hooks are considered to pertain to the buffer's contents,
  8118. +not to the particular visited file; thus, `set-visited-file-name' does
  8119. +not clear this variable, but changing the major mode does clear it.
  8120. +See also `write-file-hooks'.Venable-local-variables
  8121. +*Control use of local-variables lists in files you visit.
  8122. +The value can be t, nil or something else.
  8123. +A value of t means local-variables lists are obeyed;
  8124. +nil means they are ignored; anything else means query.
  8125. +
  8126. +The command \[normal-mode] always obeys local-variables lists
  8127. +and ignores this variable.Venable-local-eval
  8128. +*Control processing of the "variable" `eval' in a file's local variables.
  8129. +The value can be t, nil or something else.
  8130. +A value of t means obey `eval' variables;
  8131. +nil means ignore them; anything else means query.
  8132. +
  8133. +The command \[normal-mode] always obeys local-variables lists
  8134. +and ignores this variable.Vbackup-char
  8135. +Character to add to file names to make backup names.Vautosave-char
  8136. +Character to add to file names to make autosave names.Vbufferfile-char
  8137. +Character to add to buffer names to make file names.Fpwd
  8138. +Show the current default directory.Vcd-path
  8139. +Value of the CDPATH environment variable, as a list.
  8140. +Not actually set up until the first time you you use it.Fparse-colon-path
  8141. +Explode a colon-separated list of paths into a string list.Fcd-absolute
  8142. +Change current directory to given absolute file name DIR.Fcd
  8143. +Make DIR become the current buffer's default directory.
  8144. +If your environment includes a `CDPATH' variable, try each one of that
  8145. +colon-separated list of directories when resolving a relative directory name.Fload-file
  8146. +Load the Lisp file named FILE.Fload-library
  8147. +Load the library named LIBRARY.
  8148. +This is an interface to the function `load'.Ffile-local-copy
  8149. +Copy the file FILE into a temporary file on this machine.
  8150. +Returns the name of the local copy, or nil, if FILE is directly
  8151. +accessible.Ffile-truename
  8152. +Return the truename of FILENAME, which should be absolute.
  8153. +The truename of a file name is found by chasing symbolic links
  8154. +both at the level of the file and at the level of the directories
  8155. +containing it, until no links are left at any level.
  8156. +
  8157. +The arguments COUNTER and PREV-DIRS are used only in recursive calls.
  8158. +Do not specify them in other calls.Ffile-chase-links
  8159. +Chase links in FILENAME until a name that is not a link.
  8160. +Does not examine containing directories for links,
  8161. +unlike `file-truename'.Fswitch-to-buffer-other-window
  8162. +Select buffer BUFFER in another window.Fswitch-to-buffer-other-frame
  8163. +Switch to buffer BUFFER in another frame.Ffind-file
  8164. +Edit file FILENAME.
  8165. +Switch to a buffer visiting file FILENAME,
  8166. +creating one if none already exists.Ffind-file-other-window
  8167. +Edit file FILENAME, in another window.
  8168. +May create a new window, or reuse an existing one.
  8169. +See the function `display-buffer'.Ffind-file-other-frame
  8170. +Edit file FILENAME, in another frame.
  8171. +May create a new frame, or reuse an existing one.
  8172. +See the function `display-buffer'.Ffind-file-read-only
  8173. +Edit file FILENAME but don't allow changes.
  8174. +Like \[find-file] but marks buffer as read-only.
  8175. +Use \[toggle-read-only] to permit editing.Ffind-file-read-only-other-window
  8176. +Edit file FILENAME in another window but don't allow changes.
  8177. +Like \[find-file-other-window] but marks buffer as read-only.
  8178. +Use \[toggle-read-only] to permit editing.Ffind-file-read-only-other-frame
  8179. +Edit file FILENAME in another frame but don't allow changes.
  8180. +Like \[find-file-other-frame] but marks buffer as read-only.
  8181. +Use \[toggle-read-only] to permit editing.Ffind-alternate-file
  8182. +Find file FILENAME, select its buffer, kill previous buffer.
  8183. +If the current buffer now contains an empty file that you just visited
  8184. +(presumably by mistake), use this command to visit the file you really want.Fcreate-file-buffer
  8185. +Create a suitably named buffer for visiting FILENAME, and return it.
  8186. +FILENAME (sans directory) is used unchanged if that name is free;
  8187. +otherwise a string <2> or <3> or ... is appended to get an unused name.Fgenerate-new-buffer
  8188. +Create and return a buffer with a name based on NAME.
  8189. +Choose the buffer's name using `generate-new-buffer-name'.Vautomount-dir-prefix
  8190. +Regexp to match the automounter prefix in a directory name.Vabbreviated-home-dir
  8191. +The user's homedir abbreviated according to `directory-abbrev-list'.Fabbreviate-file-name
  8192. +Return a version of FILENAME shortened using `directory-abbrev-alist'.
  8193. +This also substitutes "~" for the user's home directory.
  8194. +Type \[describe-variable] directory-abbrev-alist RET for more information.Vfind-file-not-true-dirname-list
  8195. +*List of logical names for which visiting shouldn't save the true dirname.
  8196. +On VMS, when you visit a file using a logical name that searches a path,
  8197. +you may or may not want the visited file name to record the specific
  8198. +directory where the file was found.  If you *do not* want that, add the logical
  8199. +name to this list as a string.Ffind-buffer-visiting
  8200. +Return the buffer visiting file FILENAME (a string).
  8201. +This is like `get-file-buffer', except that it checks for any buffer
  8202. +visiting the same file, possibly under a different name.
  8203. +If there is no such live buffer, return nil.Ffind-file-noselect
  8204. +Read file FILENAME into a buffer and return the buffer.
  8205. +If a buffer exists visiting FILENAME, return that one, but
  8206. +verify that the file has not changed since visited or saved.
  8207. +The buffer is not selected, just returned to the caller.Fafter-find-file
  8208. +Called after finding a file and by the default revert function.
  8209. +Sets buffer mode, parses local variables.
  8210. +Optional args ERROR, WARN, and NOAUTO: ERROR non-nil means there was an
  8211. +error in reading the file.  WARN non-nil means warn if there
  8212. +exists an auto-save file more recent than the visited file.
  8213. +NOAUTO means don't mess with auto-save mode.
  8214. +Fourth arg AFTER-FIND-FILE-FROM-REVERT-BUFFER non-nil
  8215. + means this call was from `revert-buffer'.
  8216. +Finishes by calling the functions in `find-file-hooks'.Fnormal-mode
  8217. +Choose the major mode for this buffer automatically.
  8218. +Also sets up any specified local variables of the file.
  8219. +Uses the visited file name, the -*- line, and the local variables spec.
  8220. +
  8221. +This function is called automatically from `find-file'.  In that case,
  8222. +we may set up specified local variables depending on the value of
  8223. +`enable-local-variables': if it is t, we do; if it is nil, we don't;
  8224. +otherwise, we query.  `enable-local-variables' is ignored if you
  8225. +run `normal-mode' explicitly.Vauto-mode-alist
  8226. +Alist of filename patterns vs corresponding major mode functions.
  8227. +Each element looks like (REGEXP . FUNCTION) or (REGEXP FUNCTION).
  8228. +Visiting a file whose name matches REGEXP causes FUNCTION to be called.
  8229. +If the element has the form (REGEXP FUNCTION), then after calling
  8230. +FUNCTION, we delete the suffix that matched REGEXP and search the list
  8231. +again for another match.Vinterpreter-mode-alist
  8232. +Alist mapping interpreter names to major modes.
  8233. +This alist applies to files whose first line starts with `#!'.
  8234. +Each element looks like (INTERPRETER . MODE).
  8235. +The car of each element is compared with
  8236. +the name of the interpreter specified in the first line.
  8237. +If it matches, mode MODE is selected.Vinhibit-first-line-modes-regexps
  8238. +List of regexps; if one matches a file name, don't look for `-*-'.Vuser-init-file
  8239. +File name including directory of user's initialization file.Fset-auto-mode
  8240. +Select major mode appropriate for current buffer.
  8241. +This checks for a -*- mode tag in the buffer's text,
  8242. +compares the filename against the entries in `auto-mode-alist',
  8243. +or checks the interpreter that runs this file against
  8244. +`interpreter-mode-alist'.
  8245. +
  8246. +It does not check for the `mode:' local variable in the
  8247. +Local Variables section of the file; for that, use `hack-local-variables'.
  8248. +
  8249. +If `enable-local-variables' is nil, this function does not check for a
  8250. +-*- mode tag.Fhack-local-variables
  8251. +Parse and put into effect this buffer's local variables spec.Vignored-local-variables
  8252. +Variables to be ignored in a file's local variable spec.Fset-visited-file-name
  8253. +Change name of file visited in current buffer to FILENAME.
  8254. +The next time the buffer is saved it will go in the newly specified file.
  8255. +nil or empty string as argument means make buffer not be visiting any file.
  8256. +Remember to delete the initial contents of the minibuffer
  8257. +if you wish to pass an empty string as the argument.Fwrite-file
  8258. +Write current buffer into file FILENAME.
  8259. +Makes buffer visit that file, and marks it not modified.
  8260. +If the buffer is already visiting a file, you can specify
  8261. +a directory name as FILENAME, to write a file of the same
  8262. +old name in that directory.Fbackup-buffer
  8263. +Make a backup of the disk file visited by the current buffer, if appropriate.
  8264. +This is normally done before saving the buffer the first time.
  8265. +If the value is non-nil, it is the result of `file-modes' on the original
  8266. +file; this means that the caller, after saving the buffer, should change
  8267. +the modes of the new file to agree with the old modes.Ffile-name-sans-versions
  8268. +Return FILENAME sans backup versions or strings.
  8269. +This is a separate procedure so your site-init or startup file can
  8270. +redefine it.
  8271. +If the optional argument KEEP-BACKUP-VERSION is non-nil,
  8272. +we do not remove backup version numbers, only true file version numbers.Fmake-backup-file-name
  8273. +Create the non-numeric backup file name for FILE.
  8274. +This is a separate function so you can redefine it for customization.Fbackup-file-name-p
  8275. +Return non-nil if FILE is a backup file name (numeric or not).
  8276. +This is a separate function so you can redefine it for customization.
  8277. +You may need to redefine `file-name-sans-versions' as well.Fbackup-extract-version
  8278. +Given the name of a numeric backup file, return the backup number.
  8279. +Uses the free variable `bv-length', whose value should be
  8280. +the index in the name where the version number begins.Ffind-backup-file-name
  8281. +Find a file name for a backup file, and suggestions for deletions.
  8282. +Value is a list whose car is the name for the backup file
  8283. + and whose cdr is a list of old versions to consider deleting now.Ffile-nlinks
  8284. +Return number of names file FILENAME has.Ffile-relative-name
  8285. +Convert FILENAME to be relative to DIRECTORY (default: default-directory).Fsave-buffer
  8286. +Save current buffer in visited file if modified.  Versions described below.
  8287. +By default, makes the previous version into a backup file
  8288. + if previously requested or if this is the first save.
  8289. +With 1 or 3 \[universal-argument]'s, marks this version
  8290. + to become a backup when the next save is done.
  8291. +With 2 or 3 \[universal-argument]'s,
  8292. + unconditionally makes the previous version into a backup file.
  8293. +With argument of 0, never makes the previous version into a backup file.
  8294. +
  8295. +If a file's name is FOO, the names of its numbered backup versions are
  8296. + FOO.~i~ for various integers i.  A non-numbered backup file is called FOO~.
  8297. +Numeric backups (rather than FOO~) will be made if value of
  8298. + `version-control' is not the atom `never' and either there are already
  8299. + numeric versions of the file being backed up, or `version-control' is
  8300. + non-nil.
  8301. +We don't want excessive versions piling up, so there are variables
  8302. + `kept-old-versions', which tells Emacs how many oldest versions to keep,
  8303. + and `kept-new-versions', which tells how many newest versions to keep.
  8304. + Defaults are 2 old versions and 2 new.
  8305. +`dired-kept-versions' controls dired's clean-directory (.) command.
  8306. +If `delete-old-versions' is nil, system will query user
  8307. + before trimming versions.  Otherwise it does it silently.Fdelete-auto-save-file-if-necessary
  8308. +Delete auto-save file for current buffer if `delete-auto-save-files' is t.
  8309. +Normally delete only if the file was written by this Emacs since
  8310. +the last real save, but optional arg FORCE non-nil means delete anyway.Fbasic-save-buffer
  8311. +Save the current buffer in its visited file, if it has been modified.Fsave-some-buffers
  8312. +Save some modified file-visiting buffers.  Asks user about each one.
  8313. +Optional argument (the prefix) non-nil means save all with no questions.
  8314. +Optional second argument EXITING means ask about certain non-file buffers
  8315. + as well as about file buffers.Fnot-modified
  8316. +Mark current buffer as unmodified, not needing to be saved.
  8317. +With prefix arg, mark buffer as modified, so \[save-buffer] will save.Ftoggle-read-only
  8318. +Change whether this buffer is visiting its file read-only.
  8319. +With arg, set read-only iff arg is positive.Finsert-file
  8320. +Insert contents of file FILENAME into buffer after point.
  8321. +Set mark after the inserted text.
  8322. +
  8323. +This function is meant for the user to run interactively.
  8324. +Don't call it from programs!  Use `insert-file-contents' instead.
  8325. +(Its calling sequence is different; see its documentation).Fappend-to-file
  8326. +Append the contents of the region to the end of file FILENAME.
  8327. +When called from a function, expects three arguments,
  8328. +START, END and FILENAME.  START and END are buffer positions
  8329. +saying what text to write.Ffile-newest-backup
  8330. +Return most recent backup file for FILENAME or nil if no backups exist.Frename-uniquely
  8331. +Rename current buffer to a similar name not already taken.
  8332. +This function is useful for creating multiple shell process buffers
  8333. +or multiple mail buffers, etc.Fmake-directory
  8334. +Create the directory DIR and any nonexistent parent dirs.
  8335. +Interactively, the default choice of directory to create
  8336. +is the current default directory for file names.
  8337. +That is useful when you have visited a file in a nonexistint directory.
  8338. +
  8339. +Noninteractively, the second (optional) argument PARENTS says whether
  8340. +to create parent directories if they don't exist.Vrevert-buffer-function
  8341. +Function to use to revert this buffer, or nil to do the default.
  8342. +The function receives two arguments IGNORE-AUTO and NOCONFIRM,
  8343. +which are the arguments that `revert-buffer' received.Vrevert-buffer-insert-file-contents-function
  8344. +Function to use to insert contents when reverting this buffer.
  8345. +Gets two args, first the nominal file name to use,
  8346. +and second, t if reading the auto-save file.Frevert-buffer
  8347. +Replace the buffer text with the text of the visited file on disk.
  8348. +This undoes all changes since the file was visited or saved.
  8349. +With a prefix argument, offer to revert from latest auto-save file, if
  8350. +that is more recent than the visited file.
  8351. +
  8352. +When called from lisp, The first argument is IGNORE-AUTO; only offer
  8353. +to revert from the auto-save file when this is nil.  Note that the
  8354. +sense of this argument is the reverse of the prefix argument, for the
  8355. +sake of backward compatibility.  IGNORE-AUTO is optional, defaulting
  8356. +to nil.
  8357. +
  8358. +Optional second argument NOCONFIRM means don't ask for confirmation at
  8359. +all.
  8360. +
  8361. +If the value of `revert-buffer-function' is non-nil, it is called to
  8362. +do the work.
  8363. +
  8364. +The default revert function runs the hook `before-revert-hook' at the
  8365. +beginning and `after-revert-hook' at the end.Frecover-file
  8366. +Visit file FILE, but get contents from its last auto-save file.Fkill-some-buffers
  8367. +For each buffer, ask whether to kill it.Fauto-save-mode
  8368. +Toggle auto-saving of contents of current buffer.
  8369. +With prefix argument ARG, turn auto-saving on if positive, else off.Frename-auto-save-file
  8370. +Adjust current buffer's auto save file name for current conditions.
  8371. +Also rename any existing auto save file, if it was made in this session.Fmake-auto-save-file-name
  8372. +Return file name to use for auto-saves of current buffer.
  8373. +Does not consider `auto-save-visited-file-name' as that variable is checked
  8374. +before calling this function.  You can redefine this for customization.
  8375. +See also `auto-save-file-name-p'.Fauto-save-file-name-p
  8376. +Return non-nil if FILENAME can be yielded by `make-auto-save-file-name'.
  8377. +FILENAME should lack slashes.  You can redefine this for customization.Vlist-directory-brief-switches
  8378. +*Switches for list-directory to pass to `ls' for brief listing,Vlist-directory-verbose-switches
  8379. +*Switches for list-directory to pass to `ls' for verbose listing,Flist-directory
  8380. +Display a list of files in or matching DIRNAME, a la `ls'.
  8381. +DIRNAME is globbed by the shell if necessary.
  8382. +Prefix arg (second arg if noninteractive) means supply -l switch to `ls'.
  8383. +Actions controlled by variables `list-directory-brief-switches'
  8384. +and `list-directory-verbose-switches'.Vinsert-directory-program
  8385. +Absolute or relative name of the `ls' program used by `insert-directory'.Finsert-directory
  8386. +Insert directory listing for FILE, formatted according to SWITCHES.
  8387. +Leaves point after the inserted text.
  8388. +SWITCHES may be a string of options, or a list of strings.
  8389. +Optional third arg WILDCARD means treat FILE as shell wildcard.
  8390. +Optional fourth arg FULL-DIRECTORY-P means file is a directory and
  8391. +switches do not contain `d', so that a full listing is expected.
  8392. +
  8393. +This works by running a directory listing program
  8394. +whose name is in the variable `insert-directory-program'.
  8395. +If WILDCARD, it also runs the shell specified by `shell-file-name'.Vkill-emacs-query-functions
  8396. +Functions to call with no arguments to query about killing Emacs.
  8397. +If any of these functions returns nil, killing Emacs is cancelled.Fsave-buffers-kill-emacs
  8398. +Offer to save each buffer, then kill this Emacs process.
  8399. +With prefix arg, silently save all file-visiting buffers, then kill.Vfill-individual-varying-indent
  8400. +*Controls criterion for a new paragraph in `fill-individual-paragraphs'.
  8401. +Non-nil means changing indent doesn't end a paragraph.
  8402. +That mode can handle paragraphs with extra indentation on the first line,
  8403. +but it requires separator lines between paragraphs.
  8404. +A value of nil means that any change in indentation starts a new paragraph.Vsentence-end-double-space
  8405. +*Non-nil means a single space does not end a sentence.Fset-fill-prefix
  8406. +Set the fill prefix to the current line up to point.
  8407. +Filling expects lines to start with the fill prefix and
  8408. +reinserts the fill prefix in each resulting line.Vadaptive-fill-mode
  8409. +*Non-nil means determine a paragraph's fill prefix from its text.Vadaptive-fill-regexp
  8410. +*Regexp to match text at start of line that constitutes indentation.
  8411. +If Adaptive Fill mode is enabled, whatever text matches this pattern
  8412. +on the second line of a paragraph is used as the standard indentation
  8413. +for the paragraph.Ffill-region-as-paragraph
  8414. +Fill region as one paragraph: break lines to fit `fill-column'.
  8415. +Prefix arg means justify too.
  8416. +If `sentence-end-double-space' is non-nil, then period followed by one
  8417. +space does not end a sentence, so don't break a line there.
  8418. +From program, pass args FROM, TO and JUSTIFY-FLAG.Ffill-paragraph
  8419. +Fill paragraph at or after point.  Prefix arg means justify as well.
  8420. +If `sentence-end-double-space' is non-nil, then period followed by one
  8421. +space does not end a sentence, so don't break a line there.Ffill-region
  8422. +Fill each of the paragraphs in the region.
  8423. +Prefix arg (non-nil third arg, if called from program) means justify as well.
  8424. +If `sentence-end-double-space' is non-nil, then period followed by one
  8425. +space does not end a sentence, so don't break a line there.Fjustify-current-line
  8426. +Add spaces to line point is in, so it ends at `fill-column'.Ffill-nonuniform-paragraphs
  8427. +Fill paragraphs within the region, allowing varying indentation within each.
  8428. +This command divides the region into "paragraphs",
  8429. +only at paragraph-separator lines, then fills each paragraph
  8430. +using as the fill prefix the smallest indentation of any line
  8431. +in the paragraph.
  8432. +
  8433. +When calling from a program, pass range to fill as first two arguments.
  8434. +
  8435. +Optional third and fourth arguments JUSTIFY-FLAG and MAIL-FLAG:
  8436. +JUSTIFY-FLAG to justify paragraphs (prefix arg),
  8437. +MAIL-FLAG for a mail message, i. e. don't fill header lines.Ffill-individual-paragraphs
  8438. +Fill paragraphs of uniform indentation within the region.
  8439. +This command divides the region into "paragraphs", 
  8440. +treating every change in indentation level as a paragraph boundary,
  8441. +then fills each paragraph using its indentation level as the fill prefix.
  8442. +
  8443. +When calling from a program, pass range to fill as first two arguments.
  8444. +
  8445. +Optional third and fourth arguments JUSTIFY-FLAG and MAIL-FLAG:
  8446. +JUSTIFY-FLAG to justify paragraphs (prefix arg),
  8447. +MAIL-FLAG for a mail message, i. e. don't fill header lines.Vpi
  8448. +The value of Pi (3.1415926...)Ve
  8449. +The value of e (2.7182818...)Vdegrees-to-radians
  8450. +Degrees to radian conversion constantVradians-to-degrees
  8451. +Radian to degree conversion constantFdegrees-to-radians
  8452. +Convert ARG from degrees to radians.Fradians-to-degrees
  8453. +Convert ARG from radians to degrees.Vhelp-map
  8454. +Keymap for characters following the Help key.Ffinder-by-keyword
  8455. +Find packages matching a given keyword.Fhelp-with-tutorial
  8456. +Select the Emacs learn-by-doing tutorial.Fdescribe-key-briefly
  8457. +Print the name of the function KEY invokes.  KEY is a string.Fprint-help-return-message
  8458. +Display or return message saying how to restore windows after help command.
  8459. +Computes a message and applies the optional argument FUNCTION to it.
  8460. +If FUNCTION is nil, applies `message' to it, thus printing it.Fdescribe-key
  8461. +Display documentation of the function invoked by KEY.  KEY is a string.Fdescribe-mode
  8462. +Display documentation of current major mode and minor modes.
  8463. +For this to work correctly for a minor mode, the mode's indicator variable
  8464. +(listed in `minor-mode-alist') must also be a function whose documentation
  8465. +describes the minor mode.Fdescribe-distribution
  8466. +Display info on how to obtain the latest version of GNU Emacs.Fdescribe-copying
  8467. +Display info on how you may redistribute copies of GNU Emacs.Fdescribe-project
  8468. +Display info on the GNU project.Fdescribe-no-warranty
  8469. +Display info on all the kinds of warranty Emacs does NOT have.Fdescribe-prefix-bindings
  8470. +Describe the bindings of the prefix used to reach this command.
  8471. +The prefix described consists of all but the last event
  8472. +of the key sequence that ran this command.Fview-emacs-news
  8473. +Display info on recent changes to Emacs.Fview-lossage
  8474. +Display last 100 input keystrokes.Fhelp-for-help
  8475. +You have typed \[help-command], the help character.  Type a Help option:
  8476. +(Use \<help-map>\[scroll-up] or \[scroll-down] to scroll through this text.
  8477. +Type \<help-map>\[help-quit] to exit the Help command.)
  8478. +
  8479. +a  command-apropos.  Give a substring, and see a list of commands
  8480. +    (functions interactively callable) that contain
  8481. +    that substring.  See also the  apropos  command.
  8482. +b  describe-bindings.  Display table of all key bindings.
  8483. +c  describe-key-briefly.  Type a command key sequence;
  8484. +    it prints the function name that sequence runs.
  8485. +f  describe-function.  Type a function name and get documentation of it.
  8486. +C-f Info-goto-emacs-command-node.  Type a function name;
  8487. +    it takes you to the Info node for that command.
  8488. +i  info. The  info  documentation reader.
  8489. +k  describe-key.  Type a command key sequence;
  8490. +    it displays the full documentation.
  8491. +C-k Info-goto-emacs-key-command-node.  Type a command key sequence;
  8492. +    it takes you to the Info node for the command bound to that key.
  8493. +l  view-lossage.  Shows last 100 characters you typed.
  8494. +m  describe-mode.  Print documentation of current major mode,
  8495. +    which describes the commands peculiar to it.
  8496. +n  view-emacs-news.  Shows emacs news file.
  8497. +p  finder-by-keyword. Find packages matching a given topic keyword.
  8498. +s  describe-syntax.  Display contents of syntax table, plus explanations
  8499. +t  help-with-tutorial.  Select the Emacs learn-by-doing tutorial.
  8500. +v  describe-variable.  Type name of a variable;
  8501. +    it displays the variable's documentation and value.
  8502. +w  where-is.  Type command name; it prints which keystrokes
  8503. +    invoke that command.
  8504. +C-c print Emacs copying permission (General Public License).
  8505. +C-d print Emacs ordering information.
  8506. +C-n print news of recent Emacs changes.
  8507. +C-p print information about the GNU project.
  8508. +C-w print information on absence of warranty for GNU Emacs.Fdescribe-function
  8509. +Display the full documentation of FUNCTION (a symbol).Fdescribe-variable
  8510. +Display the full documentation of VARIABLE (a symbol).
  8511. +Returns the documentation as a string, also.Fwhere-is
  8512. +Print message listing key sequences that invoke specified command.
  8513. +Argument is a command definition, usually a symbol with a function definition.Fcommand-apropos
  8514. +Like apropos but lists only symbols that are names of commands
  8515. +(interactively callable functions).  Argument REGEXP is a regular expression
  8516. +that is matched against command symbol names.  Returns list of symbols and
  8517. +documentation found.Flocate-library
  8518. +Show the full path name of Emacs library LIBRARY.
  8519. +This command searches the directories in `load-path' like `M-x load-library'
  8520. +to find the file that `M-x load-library RET LIBRARY RET' would load.
  8521. +Optional second arg NOSUFFIX non-nil means don't add suffixes `.elc' or `.el'
  8522. +to the specified name LIBRARY (a la calling `load' instead of `load-library').Vindent-line-function
  8523. +Function to indent current line.Findent-according-to-mode
  8524. +Indent line in proper way for current major mode.Findent-for-tab-command
  8525. +Indent line in proper way for current major mode.Findent-rigidly
  8526. +Indent all lines starting in the region sideways by ARG columns.
  8527. +Called from a program, takes three arguments, START, END and ARG.Vindent-region-function
  8528. +Function which is short cut to indent region using indent-according-to-mode.
  8529. +A value of nil means really run indent-according-to-mode on each line.Findent-region
  8530. +Indent each nonblank line in the region.
  8531. +With no argument, indent each line using `indent-according-to-mode',
  8532. +or use `indent-region-function' to do the whole region if that's non-nil.
  8533. +If there is a fill prefix, make each line start with the fill prefix.
  8534. +With argument COLUMN, indent each line to that column.
  8535. +Called from a program, takes three args: START, END and COLUMN.Findent-relative-maybe
  8536. +Indent a new line like previous nonblank line.Findent-relative
  8537. +Space out to under next indent point in previous nonblank line.
  8538. +An indent point is a non-whitespace character following whitespace.
  8539. +If the previous nonblank line has no indent points beyond the
  8540. +column point starts at, `tab-to-tab-stop' is done instead.Vtab-stop-list
  8541. +*List of tab stop positions used by `tab-to-tab-stops'.
  8542. +This should be a list of integers, ordered from smallest to largest.Vedit-tab-stops-map
  8543. +Keymap used in `edit-tab-stops'.Vedit-tab-stops-buffer
  8544. +Buffer whose tab stops are being edited--in case
  8545. +the variable `tab-stop-list' is local in that buffer.Fedit-tab-stops
  8546. +Edit the tab stops used by `tab-to-tab-stop'.
  8547. +Creates a buffer *Tab Stops* containing text describing the tab stops.
  8548. +A colon indicates a column where there is a tab stop.
  8549. +You can add or remove colons and then do \<edit-tab-stops-map>\[edit-tab-stops-note-changes] to make changes take effect.Fedit-tab-stops-note-changes
  8550. +Put edited tab stops into effect.Ftab-to-tab-stop
  8551. +Insert spaces or tabs to next defined tab-stop column.
  8552. +The variable `tab-stop-list' is a list of columns at which there are tab stops.
  8553. +Use \[edit-tab-stops] to edit them interactively.Fmove-to-tab-stop
  8554. +Move point to next defined tab-stop column.
  8555. +The variable `tab-stop-list' is a list of columns at which there are tab stops.
  8556. +Use \[edit-tab-stops] to edit them interactively.Vsearch-exit-option
  8557. +*Non-nil means random control characters terminate incremental search.Vsearch-slow-window-lines
  8558. +*Number of lines in slow search display windows.
  8559. +These are the short windows used during incremental search on slow terminals.
  8560. +Negative means put the slow search window at the top (normally it's at bottom)
  8561. +and the value is minus the number of lines.Vsearch-slow-speed
  8562. +*Highest terminal speed at which to use "slow" style incremental search.
  8563. +This is the style where a one-line window is created to show the line
  8564. +that the search has reached.Vsearch-upper-case
  8565. +*If non-nil, upper case chars disable case fold searching.
  8566. +That is, upper and lower case chars must match exactly.
  8567. +This applies no matter where the chars come from, but does not
  8568. +apply to chars in regexps that are prefixed with `\'.
  8569. +If this value is `not-yanks', yanked text is always downcased.Vsearch-nonincremental-instead
  8570. +*If non-nil, do a nonincremental search instead if exiting immediately.
  8571. +Actually, `isearch-edit-string' is called to let you enter the search
  8572. +string, and RET terminates editing and does a nonincremental search.Vsearch-whitespace-regexp
  8573. +*If non-nil, regular expression to match a sequence of whitespace chars.
  8574. +You might want to use something like "[ \t\r\n]+" instead.Vsearch-highlight
  8575. +*Non-nil means incremental search highlights the current match.Visearch-mode-hook
  8576. +Function(s) to call after starting up an incremental search.Visearch-mode-end-hook
  8577. +Function(s) to call after terminating an incremental search.Vsearch-ring
  8578. +List of search string sequences.Vregexp-search-ring
  8579. +List of regular expression search string sequences.Vsearch-ring-max
  8580. +*Maximum length of search ring before oldest elements are thrown away.Vregexp-search-ring-max
  8581. +*Maximum length of regexp search ring before oldest elements are thrown away.Vsearch-ring-yank-pointer
  8582. +Index in `search-ring' of last string reused.
  8583. +nil if none yet.Vregexp-search-ring-yank-pointer
  8584. +Index in `regexp-search-ring' of last string reused.
  8585. +nil if none yet.Vsearch-ring-update
  8586. +*Non-nil if advancing or retreating in the search ring should cause search.
  8587. +Default value, nil, means edit the string instead.Visearch-mode-map
  8588. +Keymap for isearch-mode.Vminibuffer-local-isearch-map
  8589. +Keymap for editing isearch strings in the minibuffer.Fisearch-forward
  8590. +Do incremental search forward.
  8591. +With a prefix argument, do an incremental regular expression search instead.
  8592. +\<isearch-mode-map>
  8593. +As you type characters, they add to the search string and are found.
  8594. +The following non-printing keys are bound in `isearch-mode-map'.  
  8595. +
  8596. +Type \[isearch-delete-char] to cancel characters from end of search string.
  8597. +Type \[isearch-exit] to exit, leaving point at location found.
  8598. +Type LFD (C-j) to match end of line.
  8599. +Type \[isearch-repeat-forward] to search again forward, \[isearch-repeat-backward] to search again backward.
  8600. +Type \[isearch-yank-word] to yank word from buffer onto end of search string and search for it.
  8601. +Type \[isearch-yank-line] to yank rest of line onto end of search string and search for it.
  8602. +Type \[isearch-quote-char] to quote control character to search for it.
  8603. +\[isearch-abort] while searching or when search has failed cancels input back to what has
  8604. + been found successfully.
  8605. +\[isearch-abort] when search is successful aborts and moves point to starting point.
  8606. +
  8607. +Also supported is a search ring of the previous 16 search strings.
  8608. +Type \[isearch-ring-advance] to search for the next item in the search ring.
  8609. +Type \[isearch-ring-retreat] to search for the previous item in the search ring.
  8610. +Type \[isearch-complete] to complete the search string using the search ring.
  8611. +
  8612. +The above keys, bound in `isearch-mode-map', are often controlled by 
  8613. + options; do M-x apropos on search-.* to find them.
  8614. +Other control and meta characters terminate the search
  8615. + and are then executed normally (depending on `search-exit-option').
  8616. +
  8617. +If this function is called non-interactively, it does not return to
  8618. +the calling function until the search is done.Fisearch-forward-regexp
  8619. +Do incremental search forward for regular expression.
  8620. +With a prefix argument, do a regular string search instead.
  8621. +Like ordinary incremental search except that your input
  8622. +is treated as a regexp.  See \[isearch-forward] for more info.Fisearch-backward
  8623. +Do incremental search backward.
  8624. +With a prefix argument, do a regular expression search instead.
  8625. +See \[isearch-forward] for more information.Fisearch-backward-regexp
  8626. +Do incremental search backward for regular expression.
  8627. +With a prefix argument, do a regular string search instead.
  8628. +Like ordinary incremental search except that your input
  8629. +is treated as a regexp.  See \[isearch-forward] for more info.Fisearch-mode
  8630. +Start isearch minor mode.  Called by isearch-forward, etc.Fisearch-exit
  8631. +Exit search normally.
  8632. +However, if this is the first command after starting incremental
  8633. +search and `search-nonincremental-instead' is non-nil, do a
  8634. +nonincremental search instead via `isearch-edit-string'.Fisearch-edit-string
  8635. +Edit the search string in the minibuffer.
  8636. +The following additional command keys are active while editing.
  8637. +\<minibuffer-local-isearch-map>
  8638. +\[exit-minibuffer] to resume incremental searching with the edited string.
  8639. +\[isearch-nonincremental-exit-minibuffer] to do one nonincremental search.
  8640. +\[isearch-forward-exit-minibuffer] to resume isearching forward.
  8641. +\[isearch-reverse-exit-minibuffer] to resume isearching backward.
  8642. +\[isearch-ring-advance-edit] to replace the search string with the next item in the search ring.
  8643. +\[isearch-ring-retreat-edit] to replace the search string with the previous item in the search ring.
  8644. +\[isearch-complete-edit] to complete the search string using the search ring.
  8645. +\<isearch-mode-map>
  8646. +If first char entered is \[isearch-yank-word], then do word search instead.Fisearch-abort
  8647. +Abort incremental search mode if searching is successful, signalling quit.
  8648. +Otherwise, revert to previous successful search and continue searching.
  8649. +Use `isearch-exit' to quit without signalling.Fisearch-repeat-forward
  8650. +Repeat incremental search forwards.Fisearch-repeat-backward
  8651. +Repeat incremental search backwards.Fisearch-toggle-regexp
  8652. +Toggle regexp searching on or off.Fisearch-toggle-case-fold
  8653. +Toggle case folding in searching on or off.Fisearch-delete-char
  8654. +Discard last input item and move point back.  
  8655. +If no previous match was done, just beep.Fisearch-yank-kill
  8656. +Pull string from kill ring into search string.Fisearch-yank-word
  8657. +Pull next word from buffer into search string.Fisearch-yank-line
  8658. +Pull rest of line from buffer into search string.Fisearch-*-char
  8659. +Handle * and ? specially in regexps.Fisearch-|-char
  8660. +If in regexp search, jump to the barrier.Fisearch-other-meta-char
  8661. +Exit the search normally and reread this key sequence.
  8662. +But only if `search-exit-option' is non-nil, the default.
  8663. +If it is the symbol `edit', the search string is edited in the minibuffer
  8664. +and the meta character is unread so that it applies to editing the string.Fisearch-quote-char
  8665. +Quote special characters for incremental search.Fisearch-return-char
  8666. +Convert return into newline for incremental search.
  8667. +Obsolete.Fisearch-printing-char
  8668. +Add this ordinary printing character to the search string and search.Fisearch-whitespace-chars
  8669. +Match all whitespace chars, if in regexp mode.
  8670. +If you want to search for just a space, type C-q SPC.Fisearch-ring-advance
  8671. +Advance to the next search string in the ring.Fisearch-ring-retreat
  8672. +Retreat to the previous search string in the ring.Fisearch-ring-advance-edit
  8673. +Insert the next element of the search history into the minibuffer.Fisearch-ring-retreat-edit
  8674. +Inserts the previous element of the search history into the minibuffer.Fisearch-complete
  8675. +Complete the search string from the strings on the search ring.
  8676. +The completed string is then editable in the minibuffer.
  8677. +If there is no completion possible, say so and continue searching.Fisearch-complete-edit
  8678. +Same as `isearch-complete' except in the minibuffer.Fisearch-no-upper-case-p
  8679. +Return t if there are no upper case chars in STRING.
  8680. +If REGEXP-FLAG is non-nil, disregard letters preceeded by `\' (but not `\\')
  8681. +since they have special meaning in a regexp.Vlisp-mode-syntax-table
  8682. +Vemacs-lisp-mode-syntax-table
  8683. +Vlisp-mode-abbrev-table
  8684. +Vshared-lisp-mode-map
  8685. +Keymap for commands shared by all sorts of Lisp modes.Vemacs-lisp-mode-map
  8686. +Keymap for Emacs Lisp mode.
  8687. +All commands in shared-lisp-mode-map are inherited by this map.Femacs-lisp-mode
  8688. +Major mode for editing Lisp code to run in Emacs.
  8689. +Commands:
  8690. +Delete converts tabs to spaces as it moves back.
  8691. +Blank lines separate paragraphs.  Semicolons start comments.
  8692. +\{emacs-lisp-mode-map}
  8693. +Entry to this mode calls the value of `emacs-lisp-mode-hook'
  8694. +if that value is non-nil.Vlisp-mode-map
  8695. +Keymap for ordinary Lisp mode.
  8696. +All commands in `shared-lisp-mode-map' are inherited by this map.Flisp-mode
  8697. +Major mode for editing Lisp code for Lisps other than GNU Emacs Lisp.
  8698. +Commands:
  8699. +Delete converts tabs to spaces as it moves back.
  8700. +Blank lines separate paragraphs.  Semicolons start comments.
  8701. +\{lisp-mode-map}
  8702. +Note that `run-lisp' may be used either to start an inferior Lisp job
  8703. +or to switch back to an existing one.
  8704. +
  8705. +Entry to this mode calls the value of `lisp-mode-hook'
  8706. +if that value is non-nil.Flisp-eval-defun
  8707. +Send the current defun to the Lisp process made by \[run-lisp].Vlisp-interaction-mode-map
  8708. +Keymap for Lisp Interaction moe.
  8709. +All commands in `shared-lisp-mode-map' are inherited by this map.Flisp-interaction-mode
  8710. +Major mode for typing and evaluating Lisp forms.
  8711. +Like Lisp mode except that \[eval-print-last-sexp] evals the Lisp expression
  8712. +before point, and prints its value into the buffer, advancing point.
  8713. +
  8714. +Commands:
  8715. +Delete converts tabs to spaces as it moves back.
  8716. +Paragraphs are separated only by blank lines.
  8717. +Semicolons start comments.
  8718. +\{lisp-interaction-mode-map}
  8719. +Entry to this mode calls the value of `lisp-interaction-mode-hook'
  8720. +if that value is non-nil.Feval-print-last-sexp
  8721. +Evaluate sexp before point; print value into current buffer.Feval-last-sexp
  8722. +Evaluate sexp before point; print value in minibuffer.
  8723. +With argument, print output into current buffer.Feval-defun
  8724. +Evaluate defun that point is in or before.
  8725. +Print value in minibuffer.
  8726. +With argument, insert value in current buffer after the defun.Vlisp-indent-offset
  8727. +Vlisp-indent-function
  8728. +Flisp-indent-line
  8729. +Indent current line as Lisp code.
  8730. +With argument, indent any additional lines of the same expression
  8731. +rigidly along with this one.Fcalculate-lisp-indent
  8732. +Return appropriate indentation for current line as Lisp code.
  8733. +In usual case returns an integer: the column to indent to.
  8734. +Can instead return a list, whose car is the column to indent to.
  8735. +This means that following lines at the same level of indentation
  8736. +should not necessarily be indented the same way.
  8737. +The second element of the list is the buffer position
  8738. +of the start of the containing expression.Vlisp-body-indent
  8739. +Number of columns to indent the second line of a `(def...)' form.Findent-sexp
  8740. +Indent each line of the list starting just after point.
  8741. +If optional arg ENDPOS is given, indent each line, stopping when
  8742. +ENDPOS is encountered.Flisp-fill-paragraph
  8743. +Like \[fill-paragraph], but handle Emacs Lisp comments.
  8744. +If any of the current line is a comment, fill the comment or the
  8745. +paragraph of it that point is in, preserving the comment's indentation
  8746. +and initial semicolons.Findent-code-rigidly
  8747. +Indent all lines of code, starting in the region, sideways by ARG columns.
  8748. +Does not affect lines starting inside comments or strings, assuming that
  8749. +the start of the region is not inside them.
  8750. +
  8751. +Called from a program, takes args START, END, COLUMNS and NOCHANGE-REGEXP.
  8752. +The last is a regexp which, if matched at the beginning of a line,
  8753. +means don't indent that line.Vdefun-prompt-regexp
  8754. +*Non-nil => regexp to ignore, before the character that starts a defun.
  8755. +This is only necessary if the opening paren or brace is not in column 0.
  8756. +See `beginning-of-defun'.Vparens-require-spaces
  8757. +Non-nil => `insert-parentheses' should insert whitespace as needed.Fforward-sexp
  8758. +Move forward across one balanced expression (sexp).
  8759. +With argument, do it that many times.  Negative arg -N means
  8760. +move backward across N balanced expressions.Fbackward-sexp
  8761. +Move backward across one balanced expression (sexp).
  8762. +With argument, do it that many times.  Negative arg -N means
  8763. +move forward across N balanced expressions.Fmark-sexp
  8764. +Set mark ARG sexps from point.
  8765. +The place mark goes is the same place \[forward-sexp] would
  8766. +move to with the same argument.Fforward-list
  8767. +Move forward across one balanced group of parentheses.
  8768. +With argument, do it that many times.
  8769. +Negative arg -N means move backward across N groups of parentheses.Fbackward-list
  8770. +Move backward across one balanced group of parentheses.
  8771. +With argument, do it that many times.
  8772. +Negative arg -N means move forward across N groups of parentheses.Fdown-list
  8773. +Move forward down one level of parentheses.
  8774. +With argument, do this that many times.
  8775. +A negative argument means move backward but still go down a level.
  8776. +In Lisp programs, an argument is required.Fbackward-up-list
  8777. +Move backward out of one level of parentheses.
  8778. +With argument, do this that many times.
  8779. +A negative argument means move forward but still to a less deep spot.
  8780. +In Lisp programs, an argument is required.Fup-list
  8781. +Move forward out of one level of parentheses.
  8782. +With argument, do this that many times.
  8783. +A negative argument means move backward but still to a less deep spot.
  8784. +In Lisp programs, an argument is required.Fkill-sexp
  8785. +Kill the sexp (balanced expression) following the cursor.
  8786. +With argument, kill that many sexps after the cursor.
  8787. +Negative arg -N means kill N sexps before the cursor.Fbackward-kill-sexp
  8788. +Kill the sexp (balanced expression) preceding the cursor.
  8789. +With argument, kill that many sexps before the cursor.
  8790. +Negative arg -N means kill N sexps after the cursor.Fbeginning-of-defun
  8791. +Move backward to the beginning of a defun.
  8792. +With argument, do it that many times.  Negative arg -N
  8793. +means move forward to Nth following beginning of defun.
  8794. +Returns t unless search stops due to beginning or end of buffer.
  8795. +
  8796. +Normally a defun starts when there is an char with open-parenthesis
  8797. +syntax at the beginning of a line.  If `defun-prompt-regexp' is
  8798. +non-nil, then a string which matches that regexp may precede the
  8799. +open-parenthesis, and point ends up at the beginning of the line.Fbeginning-of-defun-raw
  8800. +Move point to the character that starts a defun.
  8801. +This is identical to beginning-of-defun, except that point does not move
  8802. +to the beginning of the line when `defun-prompt-regexp' is non-nil.Fend-of-defun
  8803. +Move forward to next end of defun.  With argument, do it that many times.
  8804. +Negative argument -N means move back to Nth preceding end of defun.
  8805. +
  8806. +An end of a defun occurs right after the close-parenthesis that matches
  8807. +the open-parenthesis that starts a defun; see `beginning-of-defun'.Fmark-defun
  8808. +Put mark at end of this defun, point at beginning.
  8809. +The defun marked is the one that contains point or follows point.Finsert-parentheses
  8810. +Put parentheses around next ARG sexps.  Leave point after open-paren.
  8811. +No argument is equivalent to zero: just insert `()' and leave point between.
  8812. +If `parens-require-spaces' is non-nil, this command also inserts a space
  8813. +before and after, depending on the surrounding characters.Fmove-past-close-and-reindent
  8814. +Move past next `)', delete indentation before it, then indent after it.Flisp-complete-symbol
  8815. +Perform completion on Lisp symbol preceding point.
  8816. +Compare that symbol against the known Lisp symbols.
  8817. +
  8818. +The context determines which symbols are considered.
  8819. +If the symbol starts just after an open-parenthesis, only symbols
  8820. +with function definitions are considered.  Otherwise, all symbols with
  8821. +function definitions, values or properties are considered.Vminor-mode-alist
  8822. +Alist saying how to show minor modes in the mode line.
  8823. +Each element looks like (VARIABLE STRING);
  8824. +STRING is included in the mode line iff VARIABLE's value is non-nil.
  8825. +
  8826. +Actually, STRING need not be a string; any possible mode-line element
  8827. +is okay.  See `mode-line-format'.Fprompt-for-change-log-name
  8828. +Prompt for a change log name.Ffind-change-log
  8829. +Find a change log file for \[add-change-log-entry] and return the name.
  8830. +Optional arg FILE-NAME is a name to try first.
  8831. +If FILE-NAME is nil, use the value of `change-log-default-name' if non-nil.
  8832. +Failing that, use "ChangeLog" in the current directory.
  8833. +If the file does not exist in the named directory, successive parent
  8834. +directories are tried.
  8835. +
  8836. +Once a file is found, `change-log-default-name' is set locally in the
  8837. +current buffer to the complete file name.Fadd-change-log-entry
  8838. +Find change log file and add an entry for today.
  8839. +Optional arg (interactive prefix) non-nil means prompt for user name and site.
  8840. +Second arg is file name of change log.  If nil, uses `change-log-default-name'.
  8841. +Third arg OTHER-WINDOW non-nil means visit in other window.
  8842. +Fourth arg NEW-ENTRY non-nil means always create a new entry at the front;
  8843. +never append to an existing entry.Fadd-change-log-entry-other-window
  8844. +Find change log file in other window and add an entry for today.
  8845. +Optional arg (interactive prefix) non-nil means prompt for user name and site.
  8846. +Second arg is file name of change log.  If nil, uses `change-log-default-name'.Fchange-log-mode
  8847. +Major mode for editing change logs; like Indented Text Mode.
  8848. +Prevents numeric backups and sets `left-margin' to 8 and `fill-column' to 74.
  8849. +New log entries are usually made with \[add-change-log-entry] or \[add-change-log-entry-other-window].
  8850. +Each entry behaves as a paragraph, and the entries for one day as a page.
  8851. +Runs `change-log-mode-hook'.Fadd-log-current-defun
  8852. +Return name of function definition point is in, or nil.
  8853. +
  8854. +Understands C, Lisp, LaTeX ("functions" are chapters, sections, ...),
  8855. +Texinfo (@node titles), and Fortran.
  8856. +
  8857. +Other modes are handled by a heuristic that looks in the 10K before
  8858. +point for uppercase headings starting in the first column or
  8859. +identifiers followed by `:' or `=', see variable
  8860. +`add-log-current-defun-header-regexp'.
  8861. +
  8862. +Has a preference of looking backwards.Vad-start-advice-on-load
  8863. +*Non-nil will start Advice magic when this file gets loaded.
  8864. +Also see function `ad-start-advice'.Vad-activate-on-definition
  8865. +*Non-nil means automatic advice activation at function definition.
  8866. +Set this variable to t if you want to enable forward advice (which is
  8867. +automatic advice activation of a previously undefined function at the
  8868. +point the function gets defined/loaded/autoloaded).  The value of this
  8869. +variable takes effect only during the execution of `ad-start-advice'. 
  8870. +If non-nil it will enable definition hooks regardless of the value
  8871. +of `ad-enable-definition-hooks'.Vad-redefinition-action
  8872. +*Defines what to do with redefinitions during de/activation.
  8873. +Redefinition occurs if a previously activated function that already has an
  8874. +original definition associated with it gets redefined and then de/activated.
  8875. +In such a case we can either accept the current definition as the new
  8876. +original definition, discard the current definition and replace it with the
  8877. +old original, or keep it and raise an error.  The values `accept', `discard',
  8878. +`error' or `warn' govern what will be done.  `warn' is just like `accept' but
  8879. +it additionally prints a warning message.  All other values will be
  8880. +interpreted as `error'.Vad-definition-hooks
  8881. +*List of hooks to be run after a function definition.
  8882. +The variable `ad-defined-function' will be bound to the name of
  8883. +the currently defined function when the hook function is run.Vad-enable-definition-hooks
  8884. +*Non-nil will enable hooks to be run on function definition.
  8885. +Setting this variable is a noop unless the value of
  8886. +`ad-activate-on-definition' (which see) is nil.Fad-add-advice
  8887. +Adds a piece of ADVICE to FUNCTION's list of advices in CLASS.
  8888. +If FUNCTION already has one or more pieces of advice of the specified
  8889. +CLASS then POSITION determines where the new piece will go.  The value
  8890. +of POSITION can either be `first', `last' or a number where 0 corresponds
  8891. +to `first'.  Numbers outside the range will be mapped to the closest
  8892. +extreme position.  If there was already a piece of ADVICE with the same
  8893. +name, then the position argument will be ignored and the old advice
  8894. +will be overwritten with the new one.
  8895. +    If the FUNCTION was not advised already, then its advice info will be 
  8896. +initialized.  Redefining a piece of advice whose name is part of the cache-id
  8897. +will clear the cache.Fdefadvice
  8898. +Defines a piece of advice for FUNCTION (a symbol).
  8899. +The syntax of `defadvice' is as follows:
  8900. +
  8901. +  (defadvice FUNCTION (CLASS NAME [POSITION] [ARGLIST] FLAG...)
  8902. +    [DOCSTRING] [INTERACTIVE-FORM]
  8903. +    BODY... )
  8904. +
  8905. +FUNCTION ::= Name of the function to be advised.
  8906. +CLASS ::= `before' | `around' | `after' | `activation' | `deactivation'.
  8907. +NAME ::= Non-nil symbol that names this piece of advice.
  8908. +POSITION ::= `first' | `last' | NUMBER. Optional, defaults to `first',
  8909. +    see also `ad-add-advice'.
  8910. +ARGLIST ::= An optional argument list to be used for the advised function
  8911. +    instead of the argument list of the original.  The first one found in
  8912. +    before/around/after-advices will be used.
  8913. +FLAG ::= `protect'|`disable'|`activate'|`compile'|`preactivate'|`freeze'.
  8914. +    All flags can be specified with unambiguous initial substrings.
  8915. +DOCSTRING ::= Optional documentation for this piece of advice.
  8916. +INTERACTIVE-FORM ::= Optional interactive form to be used for the advised
  8917. +    function.  The first one found in before/around/after-advices will be used.
  8918. +BODY ::= Any s-expression.
  8919. +
  8920. +Semantics of the various flags:
  8921. +`protect': The piece of advice will be protected against non-local exits in
  8922. +any code that precedes it.  If any around-advice of a function is protected
  8923. +then automatically all around-advices will be protected (the complete onion).
  8924. +
  8925. +`activate': All advice of FUNCTION will be activated immediately if
  8926. +FUNCTION has been properly defined prior to this application of `defadvice'.
  8927. +
  8928. +`compile': In conjunction with `activate' specifies that the resulting
  8929. +advised function should be compiled.
  8930. +
  8931. +`disable': The defined advice will be disabled, hence, it will not be used 
  8932. +during activation until somebody enables it.
  8933. +
  8934. +`preactivate': Preactivates the advised FUNCTION at macro-expansion/compile
  8935. +time.  This generates a compiled advised definition according to the current
  8936. +advice state that will be used during activation if appropriate.  Only use
  8937. +this if the `defadvice' gets actually compiled.
  8938. +
  8939. +`freeze': Expands the `defadvice' into a redefining `defun/defmacro' according
  8940. +to the current advice state.  No other advice information will be saved.
  8941. +Frozen advices cannot be undone, they behave like a hard redefinition of
  8942. +the advised function.  `freeze' implies `activate' and `preactivate'.  The
  8943. +documentation of the advised function can be dumped onto the `DOC' file
  8944. +during preloading.
  8945. +
  8946. +Look at the file `advice.el' for comprehensive documentation.Fad-start-advice
  8947. +Redefines some primitives to start the advice magic.
  8948. +If `ad-activate-on-definition' is t then advice information will
  8949. +automatically get activated whenever an advised function gets defined or
  8950. +redefined.  This will enable goodies such as forward advice and
  8951. +automatically enable function definition hooks.  If its value is nil but
  8952. +the value of `ad-enable-definition-hooks' is t then definition hooks
  8953. +will be enabled without having automatic advice activation, otherwise
  8954. +function definition hooks will be disabled too.  If definition hooks are
  8955. +enabled then functions stored in `ad-definition-hooks' are run whenever
  8956. +a function gets defined or redefined.Vappt-issue-message
  8957. +*Non-nil means check for appointments in the diary buffer.
  8958. +To be detected, the diary entry must have the time
  8959. +as the first thing on a line.Vappt-message-warning-time
  8960. +*Time in minutes before an appointment that the warning begins.Vappt-audible
  8961. +*Non-nil means beep to indicate appointment.Vappt-visible
  8962. +*Non-nil means display appointment message in echo area.Vappt-display-mode-line
  8963. +*Non-nil means display minutes to appointment and time on the mode line.Vappt-msg-window
  8964. +*Non-nil means display appointment message in another window.Vappt-display-duration
  8965. +*The number of seconds an appointment message is displayed.Vappt-display-diary
  8966. +*Non-nil means to display the next days diary on the screen. 
  8967. +This will occur at midnight when the appointment list is updated.Fapropos
  8968. +Show all symbols whose names contain matches for REGEXP.
  8969. +If optional argument DO-ALL is non-nil (prefix argument if interactive),
  8970. +or if `apropos-do-all' is non-nil, does more (time-consuming) work such as
  8971. +showing key bindings.  Optional argument PRED is called with each symbol, and
  8972. +if it returns nil, the symbol is not shown.
  8973. +
  8974. +Returns list of symbols and documentation found.Fsuper-apropos
  8975. +Show symbols whose names/documentation contain matches for REGEXP.
  8976. +If optional argument DO-ALL is non-nil (prefix argument if interactive),
  8977. +or if `apropos-do-all' is non-nil, does more (time-consuming) work such as
  8978. +showing key bindings and documentation that is not stored in the documentation
  8979. +file.
  8980. +
  8981. +Returns list of symbols and documentation found.Fasm-mode
  8982. +Major mode for editing typical assembler code.
  8983. +Features a private abbrev table and the following bindings:
  8984. +
  8985. +\[asm-colon]    outdent a preceding label, tab to next tab stop.
  8986. +\[tab-to-tab-stop]    tab to next tab stop.
  8987. +\[asm-newline]    newline, then tab to next tab stop.
  8988. +\[asm-comment]    smart placement of assembler comments.
  8989. +
  8990. +The character used for making comments is set by the variable
  8991. +`asm-comment-char' (which defaults to `?;').
  8992. +
  8993. +Alternatively, you may set this variable in `asm-set-comment-hook', which is
  8994. +called near the beginning of mode initialization.
  8995. +
  8996. +Turning on Asm mode runs the hook `asm-mode-hook' at the end of initialization.
  8997. +
  8998. +Special commands:
  8999. +\{asm-mode-map}
  9000. +Fupdate-file-autoloads
  9001. +Update the autoloads for FILE in `generated-autoload-file'
  9002. +(which FILE might bind in its local variables).Fupdate-autoloads-here
  9003. +Update sections of the current buffer generated by \[update-file-autoloads].Fupdate-directory-autoloads
  9004. +Run \[update-file-autoloads] on each .el file in DIR.Fbatch-update-autoloads
  9005. +Update the autoloads for the files or directories on the command line.
  9006. +Runs \[update-file-autoloads] on files and \[update-directory-autoloads]
  9007. +on directories.  Must be used only with -batch, and kills Emacs on completion.
  9008. +Each file will be processed even if an error occurred previously.
  9009. +For example, invoke `emacs -batch -f batch-update-autoloads *.el'.Fawk-mode
  9010. +Major mode for editing AWK code.
  9011. +This is much like C mode except for the syntax of comments.  It uses
  9012. +the same keymap as C mode and has the same variables for customizing
  9013. +indentation.  It has its own abbrev table and its own syntax table.
  9014. +
  9015. +Turning on AWK mode calls the value of the variable `awk-mode-hook'
  9016. +with no args, if that value is non-nil.Fbackquote
  9017. +Argument STRUCTURE describes a template to build.
  9018. +
  9019. +The whole structure acts as if it were quoted except for certain
  9020. +places where expressions are evaluated and inserted or spliced in.
  9021. +
  9022. +For example:
  9023. +
  9024. +b                 => (ba bb bc)        ; assume b has this value
  9025. +(` (a b c))       => (a b c)        ; backquote acts like quote
  9026. +(` (a (, b) c))   => (a (ba bb bc) c)    ; insert the value of b
  9027. +(` (a (,@ b) c))  => (a ba bb bc c)    ; splice in the value of b
  9028. +
  9029. +Vectors work just like lists.  Nested backquotes are permitted.Fbibtex-mode
  9030. +Major mode for editing bibtex files.
  9031. +
  9032. +\{bibtex-mode-map}
  9033. +
  9034. +A command such as \[bibtex-Book] will outline the fields for a BibTeX book entry.
  9035. +
  9036. +The optional fields start with the string OPT, and thus ignored by BibTeX.
  9037. +The OPT string may be removed from a field with \[bibtex-remove-OPT].
  9038. +\[bibtex-kill-optional-field] kills the current optional field entirely.
  9039. +\[bibtex-remove-double-quotes] removes the double-quotes around the text of
  9040. +the current field.  \[bibtex-empty-field] replaces the text of the current
  9041. +field with the default "".
  9042. +
  9043. +The command \[bibtex-clean-entry] cleans the current entry, i.e. (i) removes
  9044. +double-quotes from entirely numerical fields, (ii) removes OPT from all
  9045. +non-empty optional fields, (iii) removes all empty optional fields, and (iv)
  9046. +checks that no non-optional fields are empty.
  9047. +
  9048. +Use \[bibtex-find-text] to position the dot at the end of the current field.
  9049. +Use \[bibtex-next-field] to move to end of the next field.
  9050. +
  9051. +The following may be of interest as well:
  9052. +
  9053. +  Functions:
  9054. +    find-bibtex-duplicates
  9055. +    find-bibtex-entry-location
  9056. +    hide-bibtex-entry-bodies
  9057. +    sort-bibtex-entries
  9058. +    validate-bibtex-buffer
  9059. +
  9060. +  Variables:
  9061. +    bibtex-clean-entry-zap-empty-opts
  9062. +    bibtex-entry-field-alist
  9063. +    bibtex-include-OPTannote
  9064. +    bibtex-include-OPTcrossref
  9065. +    bibtex-include-OPTkey
  9066. +    bibtex-maintain-sorted-entries
  9067. +    bibtex-mode-user-optional-fields
  9068. +
  9069. +Fields:
  9070. +    address
  9071. +           Publisher's address
  9072. +    annote
  9073. +           Long annotation used for annotated bibliographies (begins sentence)
  9074. +    author
  9075. +           Name(s) of author(s), in BibTeX name format
  9076. +    booktitle
  9077. +           Book title when the thing being referenced isn't the whole book.
  9078. +           For book entries, the title field should be used instead.
  9079. +    chapter
  9080. +           Chapter number
  9081. +    crossref
  9082. +       The database key of the entry being cross referenced.
  9083. +    edition
  9084. +           Edition of a book (e.g., "second")
  9085. +    editor
  9086. +           Name(s) of editor(s), in BibTeX name format.
  9087. +           If there is also an author field, then the editor field should be
  9088. +           for the book or collection that the work appears in
  9089. +    howpublished
  9090. +            How something strange has been published (begins sentence)
  9091. +    institution
  9092. +           Sponsoring institution
  9093. +    journal
  9094. +           Journal name (macros are provided for many)
  9095. +    key
  9096. +           Alphabetizing and labeling key (needed when no author or editor)
  9097. +    month
  9098. +           Month (macros are provided)
  9099. +    note
  9100. +           To help the reader find a reference (begins sentence)
  9101. +    number
  9102. +           Number of a journal or technical report
  9103. +    organization
  9104. +           Organization (sponsoring a conference)
  9105. +    pages
  9106. +           Page number or numbers (use `--' to separate a range)
  9107. +    publisher
  9108. +           Publisher name
  9109. +    school
  9110. +           School name (for theses)
  9111. +    series
  9112. +           The name of a series or set of books.
  9113. +           An individual book will will also have it's own title
  9114. +    title
  9115. +           The title of the thing being referenced
  9116. +    type
  9117. +           Type of a technical report (e.g., "Research Note") to be used
  9118. +           instead of the default "Technical Report"
  9119. +    volume
  9120. +           Volume of a journal or multivolume work
  9121. +    year
  9122. +           Year---should contain only numerals
  9123. +---------------------------------------------------------
  9124. +Entry to this mode calls the value of bibtex-mode-hook if that value is
  9125. +non-nil.Fblackbox
  9126. +Play blackbox.  Optional prefix argument is the number of balls;
  9127. +the default is 4.
  9128. +
  9129. +What is blackbox?
  9130. +
  9131. +Blackbox is a game of hide and seek played on an 8 by 8 grid (the
  9132. +Blackbox).  Your opponent (Emacs, in this case) has hidden several
  9133. +balls (usually 4) within this box.  By shooting rays into the box and
  9134. +observing where they emerge it is possible to deduce the positions of
  9135. +the hidden balls.  The fewer rays you use to find the balls, the lower
  9136. +your score.
  9137. +
  9138. +Overview of play:
  9139. +
  9140. +\<blackbox-mode-map>To play blackbox, type \[blackbox].  An optional prefix argument
  9141. +specifies the number of balls to be hidden in the box; the default is
  9142. +four.
  9143. +
  9144. +The cursor can be moved around the box with the standard cursor
  9145. +movement keys.
  9146. +
  9147. +To shoot a ray, move the cursor to the edge of the box and press SPC.
  9148. +The result will be determined and the playfield updated.
  9149. +
  9150. +You may place or remove balls in the box by moving the cursor into the
  9151. +box and pressing \[bb-romp].
  9152. +
  9153. +When you think the configuration of balls you have placed is correct,
  9154. +press \[bb-done].  You will be informed whether you are correct or
  9155. +not, and be given your score.  Your score is the number of letters and
  9156. +numbers around the outside of the box plus five for each incorrectly
  9157. +placed ball.  If you placed any balls incorrectly, they will be
  9158. +indicated with `x', and their actual positions indicated with `o'.
  9159. +
  9160. +Details:
  9161. +
  9162. +There are three possible outcomes for each ray you send into the box:
  9163. +
  9164. +    Detour: the ray is deflected and emerges somewhere other than
  9165. +        where you sent it in.  On the playfield, detours are
  9166. +        denoted by matching pairs of numbers -- one where the
  9167. +        ray went in, and the other where it came out.
  9168. +
  9169. +    Reflection: the ray is reflected and emerges in the same place
  9170. +        it was sent in.  On the playfield, reflections are
  9171. +        denoted by the letter `R'.
  9172. +
  9173. +    Hit:    the ray strikes a ball directly and is absorbed.  It does
  9174. +        not emerge from the box.  On the playfield, hits are
  9175. +        denoted by the letter `H'.
  9176. +
  9177. +The rules for how balls deflect rays are simple and are best shown by
  9178. +example.
  9179. +
  9180. +As a ray approaches a ball it is deflected ninety degrees.  Rays can
  9181. +be deflected multiple times.  In the diagrams below, the dashes
  9182. +represent empty box locations and the letter `O' represents a ball.
  9183. +The entrance and exit points of each ray are marked with numbers as
  9184. +described under "Detour" above.  Note that the entrance and exit
  9185. +points are always interchangeable.  `*' denotes the path taken by the
  9186. +ray.
  9187. +
  9188. +Note carefully the relative positions of the ball and the ninety
  9189. +degree deflection it causes.
  9190. +
  9191. +    1                                            
  9192. +  - * - - - - - -         - - - - - - - -         - - - - - - - -       
  9193. +  - * - - - - - -         - - - - - - - -         - - - - - - - -       
  9194. +1 * * - - - - - -         - - - - - - - -         - O - - - - O -       
  9195. +  - - O - - - - -         - - O - - - - -         - - * * * * - -
  9196. +  - - - - - - - -         - - - * * * * * 2     3 * * * - - * - -
  9197. +  - - - - - - - -         - - - * - - - -         - - - O - * - -      
  9198. +  - - - - - - - -         - - - * - - - -         - - - - * * - -       
  9199. +  - - - - - - - -         - - - * - - - -         - - - - * - O -       
  9200. +                                2                         3
  9201. +
  9202. +As mentioned above, a reflection occurs when a ray emerges from the same point
  9203. +it was sent in.  This can happen in several ways:
  9204. +
  9205. +                                                                           
  9206. +  - - - - - - - -         - - - - - - - -          - - - - - - - -
  9207. +  - - - - O - - -         - - O - O - - -          - - - - - - - -
  9208. +R * * * * - - - -         - - - * - - - -          O - - - - - - -
  9209. +  - - - - O - - -         - - - * - - - -        R - - - - - - - -
  9210. +  - - - - - - - -         - - - * - - - -          - - - - - - - -
  9211. +  - - - - - - - -         - - - * - - - -          - - - - - - - -
  9212. +  - - - - - - - -       R * * * * - - - -          - - - - - - - -
  9213. +  - - - - - - - -         - - - - O - - -          - - - - - - - -
  9214. +
  9215. +In the first example, the ray is deflected downwards by the upper
  9216. +ball, then left by the lower ball, and finally retraces its path to
  9217. +its point of origin.  The second example is similar.  The third
  9218. +example is a bit anomalous but can be rationalized by realizing the
  9219. +ray never gets a chance to get into the box.  Alternatively, the ray
  9220. +can be thought of as being deflected downwards and immediately
  9221. +emerging from the box.
  9222. +
  9223. +A hit occurs when a ray runs straight into a ball:
  9224. +
  9225. +  - - - - - - - -         - - - - - - - -          - - - - - - - -
  9226. +  - - - - - - - -         - - - - - - - -          - - - - O - - -
  9227. +  - - - - - - - -         - - - - O - - -        H * * * * - - - -
  9228. +  - - - - - - - -       H * * * * O - - -          - - - * - - - -
  9229. +  - - - - - - - -         - - - - O - - -          - - - O - - - -
  9230. +H * * * O - - - -         - - - - - - - -          - - - - - - - -
  9231. +  - - - - - - - -         - - - - - - - -          - - - - - - - -
  9232. +  - - - - - - - -         - - - - - - - -          - - - - - - - -
  9233. +
  9234. +Be sure to compare the second example of a hit with the first example of
  9235. +a reflection.Vbookmark-map
  9236. +Keymap containing bindings to bookmark functions.
  9237. +It is not bound to any key by default: to bind it
  9238. +so that you have a bookmark prefix, just use `global-set-key' and bind a
  9239. +key of your choice to `bookmark-map'.  All interactive bookmark
  9240. +functions have a binding in this keymap.Fbookmark-set
  9241. +Set a bookmark named NAME inside a file.  
  9242. +With prefix arg, will not overwrite a bookmark that has the same name
  9243. +as NAME if such a bookmark already exists, but instead will "push"
  9244. +the new bookmark onto the bookmark alist.  Thus the most recently set
  9245. +bookmark with name NAME would be the one in effect at any given time,
  9246. +but the others are still there, should you decide to delete the most
  9247. +recent one.
  9248. +
  9249. +To yank words from the text of the buffer and use them as part of the
  9250. +bookmark name, type C-w while setting a bookmark.  Successive C-w's
  9251. +yank successive words.
  9252. +
  9253. +Typing C-v inserts the name of the current file being visited. Typing
  9254. +C-u inserts the name of the last bookmark used in the buffer (as an
  9255. +aid in using a single bookmark name to track your progress through a
  9256. +large file).  If no bookmark was used, then C-u behaves like C-v and
  9257. +inserts the name of the file being visited.
  9258. +
  9259. +Use \[bookmark-delete] to remove bookmarks (you give it a name,
  9260. +and it removes only the first instance of a bookmark with that name from
  9261. +the list of bookmarks.)Fbookmark-jump
  9262. +Jump to bookmark BOOKMARK (a point in some file).  
  9263. +You may have a problem using this function if the value of variable
  9264. +`bookmark-alist' is nil.  If that happens, you need to load in some
  9265. +bookmarks.  See help on function `bookmark-load' for more about
  9266. +this.
  9267. +
  9268. +If the file pointed to by BOOKMARK no longer exists, you will be asked
  9269. +if you wish to give the bookmark a new location, and bookmark-jump
  9270. +will then jump to the new location, as well as recording it in place
  9271. +of the old one in the permanent bookmark record.Fbookmark-relocate
  9272. +Relocate BOOKMARK -- prompts for a filename, and makes an already
  9273. +existing bookmark point to that file, instead of the one it used to
  9274. +point at.  Useful when a file has been renamed after a bookmark was
  9275. +set in it.Fbookmark-locate
  9276. +Insert the name of the file associated with BOOKMARK.
  9277. +Optional second arg NO-INSERTION means merely return the filename as a
  9278. +string.Fbookmark-rename
  9279. +Change the name of OLD-BOOKMARK to NEWNAME.  
  9280. +If called from keyboard, prompts for OLD-BOOKMARK and NEWNAME.
  9281. +If called from menubar, OLD-BOOKMARK is selected from a menu, and
  9282. +prompts for NEWNAME. 
  9283. +If called from Lisp, prompts for NEWNAME if only OLD-BOOKMARK was
  9284. +passed as an argument.  If called with two strings, then no prompting
  9285. +is done.  You must pass at least OLD-BOOKMARK when calling from Lisp.
  9286. +
  9287. +While you are entering the new name, consecutive C-w's insert
  9288. +consectutive words from the text of the buffer into the new bookmark
  9289. +name, and C-v inserts the name of the file.Fbookmark-insert
  9290. +Insert the text of the file pointed to by bookmark BOOKMARK.  
  9291. +You may have a problem using this function if the value of variable
  9292. +`bookmark-alist' is nil.  If that happens, you need to load in some
  9293. +bookmarks.  See help on function `bookmark-load' for more about
  9294. +this.Fbookmark-delete
  9295. +Delete the bookmark named NAME from the bookmark list.  
  9296. +Removes only the first instance of a bookmark with that name.  If
  9297. +there are one or more other bookmarks with the same name, they will
  9298. +not be deleted.  Defaults to the "current" bookmark (that is, the
  9299. +one most recently used in this file, if any).Fbookmark-write
  9300. +Write bookmarks to a file (for which the user will be prompted
  9301. +interactively).  Don't use this in Lisp programs; use bookmark-save
  9302. +instead.Fbookmark-save
  9303. +Save currently defined bookmarks.
  9304. +Saves by default in the file defined by the variable
  9305. +`bookmark-file'.  With a prefix arg, save it in file FILE.
  9306. +
  9307. +If you are calling this from Lisp, the two arguments are PREFIX-ARG
  9308. +and FILE, and if you just want it to write to the default file, then
  9309. +pass no arguments.  Or pass in nil and FILE, and it will save in FILE
  9310. +instead.  If you pass in one argument, and it is non-nil, then the
  9311. +user will be interactively queried for a file to save in.
  9312. +
  9313. +When you want to load in the bookmarks from a file, use
  9314. +`bookmark-load', \[bookmark-load].  That function will prompt you
  9315. +for a file, defaulting to the file defined by variable
  9316. +`bookmark-file'.Fbookmark-load
  9317. +Load bookmarks from FILE (which must be in bookmark format).
  9318. +Appends loaded bookmarks to the front of the list of bookmarks.  If
  9319. +optional second argument REVERT is non-nil, existing bookmarks are
  9320. +destroyed.  Optional third arg NO-MSG means don't display any messages
  9321. +while loading.
  9322. +
  9323. +If you load a file that doesn't contain a proper bookmark alist, you
  9324. +will corrupt Emacs's bookmark list.  Generally, you should only load
  9325. +in files that were created with the bookmark functions in the first
  9326. +place.  Your own personal bookmark file, `~/.emacs-bkmrks', is
  9327. +maintained automatically by Emacs; you shouldn't need to load it
  9328. +explicitly.Flist-bookmarks
  9329. +Display a list of existing bookmarks.
  9330. +The list is displayed in a buffer named `*Bookmark List*'.
  9331. +The leftmost column displays a D if the bookmark is flagged for
  9332. +deletion, or > if it is flagged for displaying.Fbookmark-menu-bar-insert
  9333. +Insert the text of the file pointed to by bookmark BOOKMARK.  
  9334. +You may have a problem using this function if the value of variable
  9335. +`bookmark-alist' is nil.  If that happens, you need to load in some
  9336. +bookmarks.  See help on function `bookmark-load' for more about
  9337. +this.Fbookmark-menu-bar-jump
  9338. +Jump to bookmark BOOKMARK (a point in some file).  
  9339. +You may have a problem using this function if the value of variable
  9340. +`bookmark-alist' is nil.  If that happens, you need to load in some
  9341. +bookmarks.  See help on function `bookmark-load' for more about
  9342. +this.Fbookmark-menu-bar-locate
  9343. +Insert the name of the  file associated with BOOKMARK. 
  9344. +(This is not the same as the contents of that file).Fbookmark-menu-bar-rename
  9345. +Change the name of OLD-BOOKMARK to NEWNAME.  
  9346. +If called from keyboard, prompts for OLD-BOOKMARK and NEWNAME.
  9347. +If called from menubar, OLD-BOOKMARK is selected from a menu, and
  9348. +prompts for NEWNAME. 
  9349. +If called from Lisp, prompts for NEWNAME if only OLD-BOOKMARK was
  9350. +passed as an argument.  If called with two strings, then no prompting
  9351. +is done.  You must pass at least OLD-BOOKMARK when calling from Lisp.
  9352. +
  9353. +While you are entering the new name, consecutive C-w's insert
  9354. +consectutive words from the text of the buffer into the new bookmark
  9355. +name, and C-v inserts the name of the file.Fbookmark-menu-bar-delete
  9356. +Delete the bookmark named NAME from the bookmark list.  
  9357. +Removes only the first instance of a bookmark with that name.  If
  9358. +there are one or more other bookmarks with the same name, they will
  9359. +not be deleted.  Defaults to the "current" bookmark (that is, the
  9360. +one most recently used in this file, if any).Fbyte-recompile-directory
  9361. +Recompile every `.el' file in DIRECTORY that needs recompilation.
  9362. +This is if a `.elc' file exists but is older than the `.el' file.
  9363. +Files in subdirectories of DIRECTORY are processed also.
  9364. +
  9365. +If the `.elc' file does not exist, normally the `.el' file is *not* compiled.
  9366. +But a prefix argument (optional second arg) means ask user,
  9367. +for each such `.el' file, whether to compile it.  Prefix argument 0 means
  9368. +don't ask and compile the file anyway.
  9369. +
  9370. +A nonzero prefix argument also means ask about each subdirectory.Fbyte-compile-file
  9371. +Compile a file of Lisp code named FILENAME into a file of byte code.
  9372. +The output file's name is made by appending `c' to the end of FILENAME.
  9373. +With prefix arg (noninteractively: 2nd arg), load the file after compiling.Fcompile-defun
  9374. +Compile and evaluate the current top-level form.
  9375. +Print the result in the minibuffer.
  9376. +With argument, insert value in current buffer after the form.Fbyte-compile
  9377. +If FORM is a symbol, byte-compile its function definition.
  9378. +If FORM is a lambda or a macro, byte-compile it as a function.Fdisplay-call-tree
  9379. +Display a call graph of a specified file.
  9380. +This lists which functions have been called, what functions called
  9381. +them, and what functions they call.  The list includes all functions
  9382. +whose definitions have been compiled in this Emacs session, as well as
  9383. +all functions called by those functions.
  9384. +
  9385. +The call graph does not include macros, inline functions, or
  9386. +primitives that the byte-code interpreter knows about directly (eq,
  9387. +cons, etc.).
  9388. +
  9389. +The call tree also lists those functions which are not known to be called
  9390. +(that is, to which no calls have been compiled), and which cannot be
  9391. +invoked interactively.Fbatch-byte-compile
  9392. +Run `byte-compile-file' on the files remaining on the command line.
  9393. +Use this from the command line, with `-batch';
  9394. +it won't work in an interactive Emacs.
  9395. +Each file is processed even if an error occurred previously.
  9396. +For example, invoke "emacs -batch -f batch-byte-compile $emacs/ ~/*.el"Fbatch-byte-recompile-directory
  9397. +Runs `byte-recompile-directory' on the dirs remaining on the command line.
  9398. +Must be used only with `-batch', and kills Emacs on completion.
  9399. +For example, invoke `emacs -batch -f batch-byte-recompile-directory .'.Vcalendar-week-start-day
  9400. +*The day of the week on which a week in the calendar begins.
  9401. +0 means Sunday (default), 1 means Monday, and so on.Vview-diary-entries-initially
  9402. +*Non-nil means display current date's diary entries on entry.
  9403. +The diary is displayed in another window when the calendar is first displayed,
  9404. +if the current date is visible.  The number of days of diary entries displayed
  9405. +is governed by the variable `number-of-diary-entries'.Vnumber-of-diary-entries
  9406. +*Specifies how many days of diary entries are to be displayed initially.
  9407. +This variable affects the diary display when the command M-x diary is used,
  9408. +or if the value of the variable `view-diary-entries-initially' is t.  For
  9409. +example, if the default value 1 is used, then only the current day's diary
  9410. +entries will be displayed.  If the value 2 is used, then both the current
  9411. +day's and the next day's entries will be displayed.
  9412. +
  9413. +The value can also be a vector such as [0 2 2 2 2 4 1]; this value
  9414. +says to display no diary entries on Sunday, the display the entries
  9415. +for the current date and the day after on Monday through Thursday,
  9416. +display Friday through Monday's entries on Friday, and display only
  9417. +Saturday's entries on Saturday.
  9418. +
  9419. +This variable does not affect the diary display with the `d' command
  9420. +from the calendar; in that case, the prefix argument controls the
  9421. +number of days of diary entries displayed.Vmark-diary-entries-in-calendar
  9422. +*Non-nil means mark dates with diary entries, in the calendar window.
  9423. +The marking symbol is specified by the variable `diary-entry-marker'.Vview-calendar-holidays-initially
  9424. +*Non-nil means display holidays for current three month period on entry.
  9425. +The holidays are displayed in another window when the calendar is first
  9426. +displayed.Vmark-holidays-in-calendar
  9427. +*Non-nil means mark dates of holidays in the calendar window.
  9428. +The marking symbol is specified by the variable `calendar-holiday-marker'.Vall-hebrew-calendar-holidays
  9429. +*If nil, show only major holidays from the Hebrew calendar.
  9430. +This means only those Jewish holidays that appear on secular calendars.
  9431. +
  9432. +If t, show all the holidays that would appear in a complete Hebrew calendar.Vall-christian-calendar-holidays
  9433. +*If nil, show only major holidays from the Christian calendar.
  9434. +This means only those Christian holidays that appear on secular calendars.
  9435. +
  9436. +If t, show all the holidays that would appear in a complete Christian
  9437. +calendar.Vall-islamic-calendar-holidays
  9438. +*If nil, show only major holidays from the Islamic calendar.
  9439. +This means only those Islamic holidays that appear on secular calendars.
  9440. +
  9441. +If t, show all the holidays that would appear in a complete Islamic
  9442. +calendar.Vcalendar-load-hook
  9443. +*List of functions to be called after the calendar is first loaded.
  9444. +This is the place to add key bindings to `calendar-mode-map'.Vinitial-calendar-window-hook
  9445. +*List of functions to be called when the calendar window is first opened.
  9446. +The functions invoked are called after the calendar window is opened, but
  9447. +once opened is never called again.  Leaving the calendar with the `q' command
  9448. +and reentering it will cause these functions to be called again.Vtoday-visible-calendar-hook
  9449. +*List of functions called whenever the current date is visible.
  9450. +This can be used, for example, to replace today's date with asterisks; a
  9451. +function `calendar-star-date' is included for this purpose:
  9452. +    (setq today-visible-calendar-hook 'calendar-star-date)
  9453. +It can also be used to mark the current date with `calendar-today-marker';
  9454. +a function is also provided for this:
  9455. +    (setq today-visible-calendar-hook 'calendar-mark-today)
  9456. +
  9457. +The corresponding variable `today-invisible-calendar-hook' is the list of
  9458. +functions called when the calendar function was called when the current
  9459. +date is not visible in the window.
  9460. +
  9461. +Other than the use of the provided functions, the changing of any
  9462. +characters in the calendar buffer by the hooks may cause the failure of the
  9463. +functions that move by days and weeks.Vtoday-invisible-calendar-hook
  9464. +*List of functions called whenever the current date is not visible.
  9465. +
  9466. +The corresponding variable `today-visible-calendar-hook' is the list of
  9467. +functions called when the calendar function was called when the current
  9468. +date is visible in the window.
  9469. +
  9470. +Other than the use of the provided functions, the changing of any
  9471. +characters in the calendar buffer by the hooks may cause the failure of the
  9472. +functions that move by days and weeks.Vdiary-file
  9473. +*Name of the file in which one's personal diary of dates is kept.
  9474. +
  9475. +The file's entries are lines in any of the forms
  9476. +
  9477. +            MONTH/DAY
  9478. +            MONTH/DAY/YEAR
  9479. +            MONTHNAME DAY
  9480. +            MONTHNAME DAY, YEAR
  9481. +            DAYNAME
  9482. +
  9483. +at the beginning of the line; the remainder of the line is the diary entry
  9484. +string for that date.  MONTH and DAY are one or two digit numbers, YEAR is
  9485. +a number and may be written in full or abbreviated to the final two digits.
  9486. +If the date does not contain a year, it is generic and applies to any year.
  9487. +DAYNAME entries apply to any date on which is on that day of the week.
  9488. +MONTHNAME and DAYNAME can be spelled in full, abbreviated to three
  9489. +characters (with or without a period), capitalized or not.  Any of DAY,
  9490. +MONTH, or MONTHNAME, YEAR can be `*' which matches any day, month, or year,
  9491. +respectively.
  9492. +
  9493. +The European style (in which the day precedes the month) can be used
  9494. +instead, if you execute `european-calendar' when in the calendar, or set
  9495. +`european-calendar-style' to t in your .emacs file.  The European forms are
  9496. +
  9497. +            DAY/MONTH
  9498. +            DAY/MONTH/YEAR
  9499. +            DAY MONTHNAME
  9500. +            DAY MONTHNAME YEAR
  9501. +            DAYNAME
  9502. +
  9503. +To revert to the default American style from the European style, execute
  9504. +`american-calendar' in the calendar.
  9505. +
  9506. +A diary entry can be preceded by the character
  9507. +`diary-nonmarking-symbol' (ordinarily `&') to make that entry
  9508. +nonmarking--that is, it will not be marked on dates in the calendar
  9509. +window but will appear in a diary window.
  9510. +
  9511. +Multiline diary entries are made by indenting lines after the first with
  9512. +either a TAB or one or more spaces.
  9513. +
  9514. +Lines not in one the above formats are ignored.  Here are some sample diary
  9515. +entries (in the default American style):
  9516. +
  9517. +     12/22/1988 Twentieth wedding anniversary!!
  9518. +     &1/1. Happy New Year!
  9519. +     10/22 Ruth's birthday.
  9520. +     21: Payday
  9521. +     Tuesday--weekly meeting with grad students at 10am
  9522. +              Supowit, Shen, Bitner, and Kapoor to attend.
  9523. +     1/13/89 Friday the thirteenth!!
  9524. +     &thu 4pm squash game with Lloyd.
  9525. +     mar 16 Dad's birthday
  9526. +     April 15, 1989 Income tax due.
  9527. +     &* 15 time cards due.
  9528. +
  9529. +If the first line of a diary entry consists only of the date or day name with
  9530. +no trailing blanks or punctuation, then that line is not displayed in the
  9531. +diary window; only the continuation lines is shown.  For example, the
  9532. +single diary entry
  9533. +
  9534. +     02/11/1989
  9535. +      Bill Blattner visits Princeton today
  9536. +      2pm Cognitive Studies Committee meeting
  9537. +      2:30-5:30 Lizzie at Lawrenceville for `Group Initiative'
  9538. +      4:00pm Jamie Tappenden
  9539. +      7:30pm Dinner at George and Ed's for Alan Ryan
  9540. +      7:30-10:00pm dance at Stewart Country Day School
  9541. +
  9542. +will appear in the diary window without the date line at the beginning.  This
  9543. +facility allows the diary window to look neater, but can cause confusion if
  9544. +used with more than one day's entries displayed.
  9545. +
  9546. +Diary entries can be based on Lisp sexps.  For example, the diary entry
  9547. +
  9548. +      %%(diary-block 11 1 1990 11 10 1990) Vacation
  9549. +
  9550. +causes the diary entry "Vacation" to appear from November 1 through November
  9551. +10, 1990.  Other functions available are `diary-float', `diary-anniversary',
  9552. +`diary-cyclic', `diary-day-of-year', `diary-iso-date', `diary-french-date',
  9553. +`diary-hebrew-date', `diary-islamic-date', `diary-mayan-date',
  9554. +`diary-yahrzeit', `diary-sunrise-sunset', `diary-phases-of-moon',
  9555. +`diary-parasha', `diary-omer', `diary-rosh-hodesh', and
  9556. +`diary-sabbath-candles'.  See the documentation for the function
  9557. +`list-sexp-diary-entries' for more details.
  9558. +
  9559. +Diary entries based on the Hebrew and/or the Islamic calendar are also
  9560. +possible, but because these are somewhat slow, they are ignored
  9561. +unless you set the `nongregorian-diary-listing-hook' and the
  9562. +`nongregorian-diary-marking-hook' appropriately.  See the documentation
  9563. +for these functions for details.
  9564. +
  9565. +Diary files can contain directives to include the contents of other files; for
  9566. +details, see the documentation for the variable `list-diary-entries-hook'.Vdiary-nonmarking-symbol
  9567. +*Symbol indicating that a diary entry is not to be marked in the calendar.Vhebrew-diary-entry-symbol
  9568. +*Symbol indicating a diary entry according to the Hebrew calendar.Vislamic-diary-entry-symbol
  9569. +*Symbol indicating a diary entry according to the Islamic calendar.Vdiary-include-string
  9570. +*The string indicating inclusion of another file of diary entries.
  9571. +See the documentation for the function `include-other-diary-files'.Vsexp-diary-entry-symbol
  9572. +*The string used to indicate a sexp diary entry in diary-file.
  9573. +See the documentation for the function `list-sexp-diary-entries'.Vabbreviated-calendar-year
  9574. +*Interpret a two-digit year DD in a diary entry as either 19DD or 20DD.
  9575. +For the Gregorian calendar; similarly for the Hebrew and Islamic calendars.
  9576. +If this variable is nil, years must be written in full.Veuropean-calendar-style
  9577. +*Use the European style of dates in the diary and in any displays.
  9578. +If this variable is t, a date 1/2/1990 would be interpreted as February 1,
  9579. +1990.  The accepted European date styles are
  9580. +
  9581. +            DAY/MONTH
  9582. +            DAY/MONTH/YEAR
  9583. +            DAY MONTHNAME
  9584. +            DAY MONTHNAME YEAR
  9585. +            DAYNAME
  9586. +
  9587. +Names can be capitalized or not, written in full, or abbreviated to three
  9588. +characters with or without a period.Vamerican-date-diary-pattern
  9589. +*List of pseudo-patterns describing the American patterns of date used.
  9590. +See the documentation of `diary-date-forms' for an explanation.Veuropean-date-diary-pattern
  9591. +*List of pseudo-patterns describing the European patterns of date used.
  9592. +See the documentation of `diary-date-forms' for an explanation.Veuropean-calendar-display-form
  9593. +*Pseudo-pattern governing the way a date appears in the European style.
  9594. +See the documentation of calendar-date-display-form for an explanation.Vamerican-calendar-display-form
  9595. +*Pseudo-pattern governing the way a date appears in the American style.
  9596. +See the documentation of `calendar-date-display-form' for an explanation.Vprint-diary-entries-hook
  9597. +*List of functions called after a temporary diary buffer is prepared.
  9598. +The buffer shows only the diary entries currently visible in the diary
  9599. +buffer.  The default just does the printing.  Other uses might include, for
  9600. +example, rearranging the lines into order by day and time, saving the buffer
  9601. +instead of deleting it, or changing the function used to do the printing.Vlist-diary-entries-hook
  9602. +*List of functions called after diary file is culled for relevant entries.
  9603. +It is to be used for diary entries that are not found in the diary file.
  9604. +
  9605. +A function `include-other-diary-files' is provided for use as the value of
  9606. +this hook.  This function enables you to use shared diary files together
  9607. +with your own.  The files included are specified in the diary file by lines
  9608. +of the form
  9609. +
  9610. +        #include "filename"
  9611. +
  9612. +This is recursive; that is, #include directives in files thus included are
  9613. +obeyed.  You can change the "#include" to some other string by changing
  9614. +the variable `diary-include-string'.  When you use `include-other-diary-files'
  9615. +as part of the list-diary-entries-hook, you will probably also want to use the
  9616. +function `mark-included-diary-files' as part of `mark-diary-entries-hook'.
  9617. +
  9618. +For example, you could use
  9619. +
  9620. +     (setq list-diary-entries-hook
  9621. +       '(include-other-diary-files sort-diary-entries))
  9622. +     (setq diary-display-hook 'fancy-diary-display)
  9623. +
  9624. +in your `.emacs' file to cause the fancy diary buffer to be displayed with
  9625. +diary entries from various included files, each day's entries sorted into
  9626. +lexicographic order.Vdiary-hook
  9627. +*List of functions called after the display of the diary.
  9628. +Can be used for appointment notification.Vdiary-display-hook
  9629. +*List of functions that handle the display of the diary.
  9630. +If nil (the default), `simple-diary-display' is used.  Use `ignore' for no
  9631. +diary display.
  9632. +
  9633. +Ordinarily, this just displays the diary buffer (with holidays indicated in
  9634. +the mode line), if there are any relevant entries.  At the time these
  9635. +functions are called, the variable `diary-entries-list' is a list, in order
  9636. +by date, of all relevant diary entries in the form of ((MONTH DAY YEAR)
  9637. +STRING), where string is the diary entry for the given date.  This can be
  9638. +used, for example, a different buffer for display (perhaps combined with
  9639. +holidays), or produce hard copy output.
  9640. +
  9641. +A function `fancy-diary-display' is provided as an alternative
  9642. +choice for this hook; this function prepares a special noneditable diary
  9643. +buffer with the relevant diary entries that has neat day-by-day arrangement
  9644. +with headings.  The fancy diary buffer will show the holidays unless the
  9645. +variable `holidays-in-diary-buffer' is set to nil.  Ordinarily, the fancy
  9646. +diary buffer will not show days for which there are no diary entries, even
  9647. +if that day is a holiday; if you want such days to be shown in the fancy
  9648. +diary buffer, set the variable `diary-list-include-blanks' to t.Vnongregorian-diary-listing-hook
  9649. +*List of functions called for listing diary file and included files.
  9650. +As the files are processed for diary entries, these functions are used to cull
  9651. +relevant entries.  You can use either or both of `list-hebrew-diary-entries'
  9652. +and `list-islamic-diary-entries'.  The documentation for these functions
  9653. +describes the style of such diary entries.Vmark-diary-entries-hook
  9654. +*List of functions called after marking diary entries in the calendar.
  9655. +
  9656. +A function `mark-included-diary-files' is also provided for use as the
  9657. +mark-diary-entries-hook; it enables you to use shared diary files together
  9658. +with your own.  The files included are specified in the diary file by lines
  9659. +of the form
  9660. +        #include "filename"
  9661. +This is recursive; that is, #include directives in files thus included are
  9662. +obeyed.  You can change the "#include" to some other string by changing the
  9663. +variable `diary-include-string'.  When you use `mark-included-diary-files' as
  9664. +part of the mark-diary-entries-hook, you will probably also want to use the
  9665. +function `include-other-diary-files' as part of `list-diary-entries-hook'.Vnongregorian-diary-marking-hook
  9666. +*List of functions called for marking diary file and included files.
  9667. +As the files are processed for diary entries, these functions are used to cull
  9668. +relevant entries.  You can use either or both of `mark-hebrew-diary-entries'
  9669. +and `mark-islamic-diary-entries'.  The documentation for these functions
  9670. +describes the style of such diary entries.Vdiary-list-include-blanks
  9671. +*If nil, do not include days with no diary entry in the list of diary entries.
  9672. +Such days will then not be shown in the the fancy diary buffer, even if they
  9673. +are holidays.Vholidays-in-diary-buffer
  9674. +*Non-nil means include holidays in the diary display.
  9675. +The holidays appear in the mode line of the diary buffer, or in the
  9676. +fancy diary buffer next to the date.  This slows down the diary functions
  9677. +somewhat; setting it to nil makes the diary display faster.Vgeneral-holidays
  9678. +*General holidays.  Default value is for the United States.
  9679. +See the documentation for `calendar-holidays' for details.Vlocal-holidays
  9680. +*Local holidays.
  9681. +See the documentation for `calendar-holidays' for details.Vother-holidays
  9682. +*User defined holidays.
  9683. +See the documentation for `calendar-holidays' for details.Vhebrew-holidays
  9684. +*Jewish holidays.
  9685. +See the documentation for `calendar-holidays' for details.Vchristian-holidays
  9686. +*Christian holidays.
  9687. +See the documentation for `calendar-holidays' for details.Vislamic-holidays
  9688. +*Islamic holidays.
  9689. +See the documentation for `calendar-holidays' for details.Vsolar-holidays
  9690. +*Sun-related holidays.
  9691. +See the documentation for `calendar-holidays' for details.Fcalendar
  9692. +Display a three-month calendar in another window.
  9693. +The three months appear side by side, with the current month in the middle
  9694. +surrounded by the previous and next months.  The cursor is put on today's date.
  9695. +
  9696. +If called with an optional prefix argument, prompts for month and year.
  9697. +
  9698. +This function is suitable for execution in a .emacs file; appropriate setting
  9699. +of the variable `view-diary-entries-initially' will cause the diary entries for
  9700. +the current date to be displayed in another window.  The value of the variable
  9701. +`number-of-diary-entries' controls the number of days of diary entries
  9702. +displayed upon initial display of the calendar.
  9703. +
  9704. +An optional prefix argument ARG causes the calendar displayed to be ARG
  9705. +months in the future if ARG is positive or in the past if ARG is negative;
  9706. +in this case the cursor goes on the first day of the month.
  9707. +
  9708. +Once in the calendar window, future or past months can be moved into view.
  9709. +Arbitrary months can be displayed, or the calendar can be scrolled forward
  9710. +or backward.
  9711. +
  9712. +The cursor can be moved forward or backward by one day, one week, one month,
  9713. +or one year.  All of these commands take prefix arguments which, when negative,
  9714. +cause movement in the opposite direction.  For convenience, the digit keys
  9715. +and the minus sign are automatically prefixes.  The window is replotted as
  9716. +necessary to display the desired date.
  9717. +
  9718. +Diary entries can be marked on the calendar or displayed in another window.
  9719. +
  9720. +Use M-x describe-mode for details of the key bindings in the calendar window.
  9721. +
  9722. +The Gregorian calendar is assumed.
  9723. +
  9724. +After loading the calendar, the hooks given by the variable
  9725. +`calendar-load-hook' are run.  This the place to add key bindings to the
  9726. +calendar-mode-map.
  9727. +
  9728. +After preparing the calendar window initially, the hooks given by the variable
  9729. +`initial-calendar-window-hook' are run.
  9730. +
  9731. +The hooks given by the variable `today-visible-calendar-hook' are run
  9732. +everytime the calendar window gets scrolled, if the current date is visible
  9733. +in the window.  If it is not visible, the hooks given by the variable
  9734. +`today-invisible-calendar-hook' are run.  Thus, for example, setting
  9735. +`today-visible-calendar-hook' to 'calendar-star-date will cause today's date
  9736. +to be replaced by asterisks to highlight it whenever it is in the window.Flist-yahrzeit-dates
  9737. +List Yahrzeit dates for *Gregorian* DEATH-DATE from START-YEAR to END-YEAR.
  9738. +When called interactively from the calendar window, the date of death is taken
  9739. +from the cursor position.Fdescribe-buffer-case-table
  9740. +Describe the case table of the current buffer.Fset-case-syntax-delims
  9741. +Make characters L and R a matching pair of non-case-converting delimiters.
  9742. +This sets the entries for L and R in TABLE, which is a string
  9743. +that will be used as the downcase part of a case table.
  9744. +It also modifies `standard-syntax-table' to
  9745. +indicate left and right delimiters.Fset-case-syntax-pair
  9746. +Make characters UC and LC a pair of inter-case-converting letters.
  9747. +This sets the entries for characters UC and LC in TABLE, which is a string
  9748. +that will be used as the downcase part of a case table.
  9749. +It also modifies `standard-syntax-table' to give them the syntax of
  9750. +word constituents.Fset-case-syntax
  9751. +Make characters C case-invariant with syntax SYNTAX.
  9752. +This sets the entries for character C in TABLE, which is a string
  9753. +that will be used as the downcase part of a case table.
  9754. +It also modifies `standard-syntax-table'.
  9755. +SYNTAX should be " ", "w", "." or "_".Frepeat-matching-complex-command
  9756. +Edit and re-evaluate complex command with name matching PATTERN.
  9757. +Matching occurrences are displayed, most recent first, until you select
  9758. +a form for evaluation.  If PATTERN is empty (or nil), every form in the
  9759. +command history is offered.  The form is placed in the minibuffer for
  9760. +editing and the result is evaluated.Flist-command-history
  9761. +List history of commands typed to minibuffer.
  9762. +The number of commands listed is controlled by `list-command-history-max'.
  9763. +Calls value of `list-command-history-filter' (if non-nil) on each history
  9764. +element to judge if that element should be excluded from the list.
  9765. +
  9766. +The buffer is left in Command History mode.Fcommand-history-mode
  9767. +Major mode for examining commands from `command-history'.
  9768. +The number of commands listed is controlled by `list-command-history-max'.
  9769. +The command history is filtered by `list-command-history-filter' if non-nil.
  9770. +Use \<command-history-map>\[command-history-repeat] to repeat the command on the current line.
  9771. +
  9772. +Otherwise much like Emacs-Lisp Mode except that there is no self-insertion
  9773. +and digits provide prefix arguments.  Tab does not indent.
  9774. +\{command-history-map}
  9775. +Calls the value of `command-history-hook' if that is non-nil.
  9776. +The Command History listing is recomputed each time this mode is invoked.Fmake-comint
  9777. +Make a comint process NAME in a buffer, running PROGRAM.
  9778. +The name of the buffer is made by surrounding NAME with `*'s.
  9779. +If there is already a running process in that buffer, it is not restarted.
  9780. +Optional third arg STARTFILE is the name of a file to send the contents of to 
  9781. +the process.  Any more args are arguments to PROGRAM.Fcomint-run
  9782. +Run PROGRAM in a comint buffer and switch to it.
  9783. +The buffer name is made by surrounding the file name of PROGRAM with `*'s.
  9784. +The file name is used to make a symbol name, such as `comint-sh-hook', and any
  9785. +hooks on this symbol are run in the buffer.
  9786. +See `make-comint' and `comint-exec'.Fcompare-windows
  9787. +Compare text in current window with text in next window.
  9788. +Compares the text starting at point in each window,
  9789. +moving over text in each one as far as they match.
  9790. +
  9791. +A prefix arg means ignore changes in whitespace.
  9792. +The variable `compare-windows-whitespace' controls how whitespace is skipped.
  9793. +If `compare-ignore-case' is non-nil, changes in case are also ignored.Vcompilation-mode-hook
  9794. +*List of hook functions run by `compilation-mode' (see `run-hooks').Vcompilation-window-height
  9795. +*Number of lines in a compilation window.  If nil, use Emacs default.Vcompilation-buffer-name-function
  9796. +Function to compute the name of a compilation buffer.
  9797. +The function receives one argument, the name of the major mode of the
  9798. +compilation buffer.  It should return a string.
  9799. +nil means compute the name with `(concat "*" (downcase major-mode) "*")'.Vcompilation-finish-function
  9800. +*Function to call when a compilation process finishes.
  9801. +It is called with two arguments: the compilation buffer, and a string
  9802. +describing how the process finished.Vcompilation-search-path
  9803. +*List of directories to search for source files named in error messages.
  9804. +Elements should be directory names, not file names of directories.
  9805. +nil as an element means to try the default directory.Fcompile
  9806. +Compile the program including the current buffer.  Default: run `make'.
  9807. +Runs COMMAND, a shell command, in a separate process asynchronously
  9808. +with output going to the buffer `*compilation*'.
  9809. +
  9810. +You can then use the command \[next-error] to find the next error message
  9811. +and move to the source code that caused it.
  9812. +
  9813. +To run more than one compilation at once, start one and rename the
  9814. +`*compilation*' buffer to some other name with \[rename-buffer].
  9815. +Then start the next one.
  9816. +
  9817. +The name used for the buffer is actually whatever is returned by
  9818. +the function in `compilation-buffer-name-function', so you can set that
  9819. +to a function that generates a unique name.Fgrep
  9820. +Run grep, with user-specified args, and collect output in a buffer.
  9821. +While grep runs asynchronously, you can use the \[next-error] command
  9822. +to find the text that grep hits refer to.
  9823. +
  9824. +This command uses a special history list for its arguments, so you can
  9825. +easily repeat a grep command.Fcompilation-minor-mode
  9826. +Toggle compilation minor mode.
  9827. +With arg, turn compilation mode on if and only if arg is positive.
  9828. +See `compilation-mode'.Fnext-error
  9829. +Visit next compilation error message and corresponding source code.
  9830. +This operates on the output from the \[compile] command.
  9831. +If all preparsed error messages have been processed,
  9832. +the error message buffer is checked for new ones.
  9833. +
  9834. +A prefix arg specifies how many error messages to move;
  9835. +negative means move back to previous error messages.
  9836. +Just C-u as a prefix means reparse the error message buffer
  9837. +and start at the first error.
  9838. +
  9839. +\[next-error] normally applies to the most recent compilation started,
  9840. +but as long as you are in the middle of parsing errors from one compilation
  9841. +output buffer, you stay with that compilation output buffer.
  9842. +
  9843. +Use \[next-error] in a compilation output buffer to switch to
  9844. +processing errors from that compilation.
  9845. +
  9846. +See variables `compilation-parse-errors-function' and
  9847. +`compilation-error-regexp-alist' for customization ideas.Fcookie
  9848. +Return a random phrase from PHRASE-FILE.  When the phrase file
  9849. +is read in, display STARTMSG at beginning of load, ENDMSG at end.Fcookie-insert
  9850. +Insert random phrases from PHRASE-FILE; COUNT of them.  When the phrase file
  9851. +is read in, display STARTMSG at beginning of load, ENDMSG at end.Fcookie-snarf
  9852. +Reads in the PHRASE-FILE, returns it as a vector of strings.
  9853. +Emit STARTMSG and ENDMSG before and after.  Caches the result; second
  9854. +and subsequent calls on the same file won't go to disk.Fshuffle-vector
  9855. +Randomly permute the elements of VECTOR (all permutations equally likely)Fc++-mode
  9856. +Major mode for editing C++ code.  Very much like editing C code.
  9857. +Expression and list commands understand all C++ brackets.
  9858. +Tab at left margin indents for C++ code
  9859. +Comments are delimited with /* ... */ {or with // ... <newline>}
  9860. +Paragraphs are separated by blank lines only.
  9861. +Delete converts tabs to spaces as it moves back.
  9862. +\{c++-mode-map}
  9863. +Variables controlling indentation style:
  9864. + c-tab-always-indent
  9865. +    Non-nil means TAB in C mode should always reindent the current line,
  9866. +    regardless of where in the line point is when the TAB command is used.
  9867. +    Default is t.
  9868. + c-auto-newline
  9869. +    Non-nil means automatically newline before and after braces,
  9870. +    and after colons and semicolons, inserted in C code.
  9871. + c-indent-level
  9872. +    Indentation of C statements within surrounding block.
  9873. +    The surrounding block's indentation is the indentation
  9874. +    of the line on which the open-brace appears.
  9875. + c-continued-statement-offset
  9876. +    Extra indentation given to a substatement, such as the
  9877. +    then-clause of an if or body of a while.
  9878. + c-continued-brace-offset
  9879. +    Extra indentation given to a brace that starts a substatement.
  9880. +    This is in addition to c-continued-statement-offset.
  9881. + c-brace-offset
  9882. +    Extra indentation for line if it starts with an open brace.
  9883. + c-brace-imaginary-offset
  9884. +    An open brace following other text is treated as if it were
  9885. +    this far to the right of the start of its line.
  9886. + c-argdecl-indent
  9887. +    Indentation level of declarations of C function arguments.
  9888. + c-label-offset
  9889. +    Extra indentation for line that is a label, or case or ``default:'', or
  9890. +    ``public:'' or ``private:'', or ``protected:''.
  9891. + c++-electric-colon
  9892. +    If non-nil at invocation of c++-mode (t is the default) colon electricly
  9893. +    indents.
  9894. + c++-empty-arglist-indent
  9895. +    If non-nil, a function declaration or invocation which ends a line with a
  9896. +    left paren is indented this many extra spaces, instead of flush with the
  9897. +    left paren.
  9898. + c++-friend-offset
  9899. +    Offset of C++ friend declarations relative to member declarations.
  9900. + c++-member-init-indent
  9901. +    Indentation level of member initializations in function declarations,
  9902. +    if they are on a separate line beginning with a colon.
  9903. + c++-continued-member-init-offset
  9904. +    Extra indentation for continuation lines of member initializations; NIL
  9905. +    means to align with previous initializations rather than with the colon.
  9906. +
  9907. +Settings for K&R, BSD, and Stroustrup indentation styles are
  9908. +  c-indent-level                5    8    4
  9909. +  c-continued-statement-offset  5    8    4
  9910. +  c-continued-brace-offset                0
  9911. +  c-brace-offset               -5   -8    0
  9912. +  c-brace-imaginary-offset                0
  9913. +  c-argdecl-indent              0    8    4
  9914. +  c-label-offset               -5   -8   -4
  9915. +  c++-empty-arglist-indent                4
  9916. +  c++-friend-offset                       0
  9917. +
  9918. +Turning on C++ mode calls the value of the variable `c++-mode-hook' with
  9919. +no args if that value is non-nil.Fdabbrev-expand
  9920. +Expand previous word "dynamically".
  9921. +Expands to the most recent, preceding word for which this is a prefix.
  9922. +If no suitable preceding word is found, words following point are considered.
  9923. +
  9924. +If `case-fold-search' and `case-replace' are non-nil (usually true)
  9925. +then the substituted word may be case-adjusted to match the abbreviation
  9926. +that you had typed.  This takes place if the substituted word, as found,
  9927. +is all lower case, or if it is at the beginning of a sentence and only
  9928. +its first letter was upper case.
  9929. +
  9930. +A positive prefix arg N says to take the Nth backward DISTINCT
  9931. +possibility.  A negative argument says search forward.  The variable
  9932. +`dabbrev-backward-only' may be used to limit the direction of search to
  9933. +backward if set non-nil.
  9934. +
  9935. +If the cursor has not moved from the end of the previous expansion and
  9936. +no argument is given, replace the previously-made expansion
  9937. +with the next possible expansion not yet tried.Fdebug
  9938. +Enter debugger.  To return, type \<debugger-mode-map>`\[debugger-continue]'.
  9939. +Arguments are mainly for use when this is called from the internals
  9940. +of the evaluator.
  9941. +
  9942. +You may call with no args, or you may pass nil as the first arg and
  9943. +any other args you like.  In that case, the list of args after the
  9944. +first will be printed into the backtrace buffer.Fdebug-on-entry
  9945. +Request FUNCTION to invoke debugger each time it is called.
  9946. +If you tell the debugger to continue, FUNCTION's execution proceeds.
  9947. +This works by modifying the definition of FUNCTION,
  9948. +which must be written in Lisp, not predefined.
  9949. +Use \[cancel-debug-on-entry] to cancel the effect of this command.
  9950. +Redefining FUNCTION also cancels it.Fcancel-debug-on-entry
  9951. +Undo effect of \[debug-on-entry] on FUNCTION.
  9952. +If argument is nil or an empty string, cancel for all functions.Fdelete-selection-mode
  9953. +Toggle Delete Selection mode.
  9954. +When ON, typed text replaces the selection if the selection is active.
  9955. +When OFF, typed text is just inserted at point.Fdefine-derived-mode
  9956. +Create a new mode as a variant of an existing mode.
  9957. +
  9958. +The arguments to this command are as follow:
  9959. +
  9960. +PARENT:    the name of the command for the parent mode (ie. text-mode).
  9961. +CHILD:     the name of the command for the derived mode.
  9962. +NAME:      a string which will appear in the status line (ie. "Hypertext")
  9963. +DOCSTRING: an optional documentation string--if you do not supply one,
  9964. +           the function will attempt to invent something useful.
  9965. +BODY:      forms to execute just before running the
  9966. +           hooks for the new mode.
  9967. +
  9968. +Here is how you could define LaTeX-Thesis mode as a variant of LaTeX mode:
  9969. +
  9970. +  (define-derived-mode LaTeX-thesis-mode LaTeX-mode "LaTeX-Thesis")
  9971. +
  9972. +You could then make new key bindings for `LaTeX-thesis-mode-map'
  9973. +without changing regular LaTeX mode.  In this example, BODY is empty,
  9974. +and DOCSTRING is generated by default.
  9975. +
  9976. +On a more complicated level, the following command uses sgml-mode as
  9977. +the parent, and then sets the variable `case-fold-search' to nil:
  9978. +
  9979. +  (define-derived-mode article-mode sgml-mode "Article"
  9980. +    "Major mode for editing technical articles."
  9981. +    (setq case-fold-search nil))
  9982. +
  9983. +Note that if the documentation string had been left out, it would have
  9984. +been generated automatically, with a reference to the keymap.Fderived-mode-init-mode-variables
  9985. +Initialise variables for a new mode. 
  9986. +Right now, if they don't already exist, set up a blank keymap, an
  9987. +empty syntax table, and an empty abbrev table -- these will be merged
  9988. +the first time the mode is used.Fdiary
  9989. +Generate the diary window for ARG days starting with the current date.
  9990. +If no argument is provided, the number of days of diary entries is governed
  9991. +by the variable `number-of-diary-entries'.  This function is suitable for
  9992. +execution in a `.emacs' file.Fdiff
  9993. +Find and display the differences between OLD and NEW files.
  9994. +Interactively the current buffer's file name is the default for NEW
  9995. +and a backup file for NEW is the default for OLD.
  9996. +With prefix arg, prompt for diff switches.Fdiff-backup
  9997. +Diff this file with its backup file or vice versa.
  9998. +Uses the latest backup, if there are several numerical backups.
  9999. +If this file is a backup, diff it with its original.
  10000. +The backup file is the first file given to `diff'.Vdired-listing-switches
  10001. +*Switches passed to `ls' for dired.  MUST contain the `l' option.
  10002. +May contain all other options that don't contradict `-l';
  10003. +may contain even `F', `b', `i' and `s'.  See also the variable
  10004. +`dired-ls-F-marks-symlinks' concerning the `F' switch.Vdired-chown-program
  10005. +Name of chown command (usually `chown' or `/etc/chown').Vdired-ls-F-marks-symlinks
  10006. +*Informs dired about how `ls -lF' marks symbolic links.
  10007. +Set this to t if `insert-directory-program' with `-lF' marks the symbolic link
  10008. +itself with a trailing @ (usually the case under Ultrix).
  10009. +
  10010. +Example: if `ln -s foo bar; ls -F bar' gives `bar -> foo', set it to
  10011. +nil (the default), if it gives `bar@ -> foo', set it to t.
  10012. +
  10013. +Dired checks if there is really a @ appended.  Thus, if you have a
  10014. +marking `ls' program on one host and a non-marking on another host, and
  10015. +don't care about symbolic links which really end in a @, you can
  10016. +always set this variable to t.Vdired-trivial-filenames
  10017. +*Regexp of files to skip when finding first file of a directory.
  10018. +A value of nil means move to the subdir line.
  10019. +A value of t means move to first file.Vdired-keep-marker-rename
  10020. +*Controls marking of renamed files.
  10021. +If t, files keep their previous marks when they are renamed.
  10022. +If a character, renamed files (whether previously marked or not)
  10023. +are afterward marked with that character.Vdired-keep-marker-copy
  10024. +*Controls marking of copied files.
  10025. +If t, copied files are marked if and as the corresponding original files were.
  10026. +If a character, copied files are unconditionally marked with that character.Vdired-keep-marker-hardlink
  10027. +*Controls marking of newly made hard links.
  10028. +If t, they are marked if and as the files linked to were marked.
  10029. +If a character, new links are unconditionally marked with that character.Vdired-keep-marker-symlink
  10030. +*Controls marking of newly made symbolic links.
  10031. +If t, they are marked if and as the files linked to were marked.
  10032. +If a character, new links are unconditionally marked with that character.Vdired-dwim-target
  10033. +*If non-nil, dired tries to guess a default target directory.
  10034. +This means: if there is a dired buffer displayed in the next window,
  10035. +use its current subdir, instead of the current subdir of this dired buffer.
  10036. +
  10037. +The target is used in the prompt for file copy, rename etc.Vdired-copy-preserve-time
  10038. +*If non-nil, Dired preserves the last-modified time in a file copy.
  10039. +(This works on only some systems.)Fdired
  10040. +"Edit" directory DIRNAME--delete, rename, print, etc. some files in it.
  10041. +Optional second argument SWITCHES specifies the `ls' options used.
  10042. +(Interactively, use a prefix argument to be able to specify SWITCHES.)
  10043. +Dired displays a list of files in DIRNAME (which may also have
  10044. +shell wildcards appended to select certain files).  If DIRNAME is a cons,
  10045. +its first element is taken as the directory name and the resr as an explicit
  10046. +list of files to make directory entries for.
  10047. +\<dired-mode-map>You can move around in it with the usual commands.
  10048. +You can flag files for deletion with \[dired-flag-file-deletion] and then
  10049. +delete them by typing \[dired-do-flagged-delete].
  10050. +Type \[describe-mode] after entering dired for more info.
  10051. +
  10052. +If DIRNAME is already in a dired buffer, that buffer is used without refresh.Fdired-other-window
  10053. +"Edit" directory DIRNAME.  Like `dired' but selects in another window.Fdired-other-frame
  10054. +"Edit" directory DIRNAME.  Like `dired' but makes a new frame.Fdired-noselect
  10055. +Like `dired' but returns the dired buffer as value, does not select it.Fdired-diff
  10056. +Compare file at point with file FILE using `diff'.
  10057. +FILE defaults to the file at the mark.
  10058. +The prompted-for file is the first file given to `diff'.
  10059. +With prefix arg, prompt for second argument SWITCHES,
  10060. + which is options for `diff'.Fdired-backup-diff
  10061. +Diff this file with its backup file or vice versa.
  10062. +Uses the latest backup, if there are several numerical backups.
  10063. +If this file is a backup, diff it with its original.
  10064. +The backup file is the first file given to `diff'.
  10065. +With prefix arg, prompt for argument SWITCHES which is options for `diff'.Fdired-do-chmod
  10066. +Change the mode of the marked (or next ARG) files.
  10067. +This calls chmod, thus symbolic modes like `g+w' are allowed.Fdired-do-chgrp
  10068. +Change the group of the marked (or next ARG) files.Fdired-do-chown
  10069. +Change the owner of the marked (or next ARG) files.Fdired-do-print
  10070. +Print the marked (or next ARG) files.
  10071. +Uses the shell command coming from variables `lpr-command' and
  10072. +`lpr-switches' as default.Fdired-do-shell-command
  10073. +Run a shell command COMMAND on the marked files.
  10074. +If no files are marked or a specific numeric prefix arg is given,
  10075. +the next ARG files are used.  Just \[universal-argument] means the current file.
  10076. +The prompt mentions the file(s) or the marker, as appropriate.
  10077. +
  10078. +If there is output, it goes to a separate buffer.
  10079. +
  10080. +Normally the command is run on each file individually.
  10081. +However, if there is a `*' in the command then it is run
  10082. +just once with the entire file list substituted there.
  10083. +
  10084. +No automatic redisplay of dired buffers is attempted, as there's no
  10085. +telling what files the command may have changed.  Type
  10086. +\[dired-do-redisplay] to redisplay the marked files.
  10087. +
  10088. +The shell command has the top level directory as working directory, so
  10089. +output files usually are created there instead of in a subdir.Fdired-do-kill-lines
  10090. +Kill all marked lines (not the files).
  10091. +With a prefix argument, kill that many lines starting with the current line.
  10092. +(A negative argument kills lines before the current line.)
  10093. +To kill an entire subdirectory, go to its directory header line
  10094. +and use this command with a prefix argument (the value does not matter).Fdired-do-compress
  10095. +Compress or uncompress marked (or next ARG) files.Fdired-do-byte-compile
  10096. +Byte compile marked (or next ARG) Emacs Lisp files.Fdired-do-load
  10097. +Load the marked (or next ARG) Emacs Lisp files.Fdired-do-redisplay
  10098. +Redisplay all marked (or next ARG) files.
  10099. +If on a subdir line, redisplay that subdirectory.  In that case,
  10100. +a prefix arg lets you edit the `ls' switches used for the new listing.Fdired-string-replace-match
  10101. +Replace first match of REGEXP in STRING with NEWTEXT.
  10102. +If it does not match, nil is returned instead of the new string.
  10103. +Optional arg LITERAL means to take NEWTEXT literally.
  10104. +Optional arg GLOBAL means to replace all matches.Fdired-create-directory
  10105. +Create a directory called DIRECTORY.Fdired-do-copy
  10106. +Copy all marked (or next ARG) files, or copy the current file.
  10107. +This normally preserves the last-modified date when copying.
  10108. +When operating on just the current file, you specify the new name.
  10109. +When operating on multiple or marked files, you specify a directory
  10110. +and new symbolic links are made in that directory
  10111. +with the same names that the files currently have.Fdired-do-symlink
  10112. +Make symbolic links to current file or all marked (or next ARG) files.
  10113. +When operating on just the current file, you specify the new name.
  10114. +When operating on multiple or marked files, you specify a directory
  10115. +and new symbolic links are made in that directory
  10116. +with the same names that the files currently have.Fdired-do-hardlink
  10117. +Add names (hard links) current file or all marked (or next ARG) files.
  10118. +When operating on just the current file, you specify the new name.
  10119. +When operating on multiple or marked files, you specify a directory
  10120. +and new hard links are made in that directory
  10121. +with the same names that the files currently have.Fdired-do-rename
  10122. +Rename current file or all marked (or next ARG) files.
  10123. +When renaming just the current file, you specify the new name.
  10124. +When renaming multiple or marked files, you specify a directory.Fdired-do-rename-regexp
  10125. +Rename marked files containing REGEXP to NEWNAME.
  10126. +As each match is found, the user must type a character saying
  10127. +  what to do with it.  For directions, type \[help-command] at that time.
  10128. +NEWNAME may contain \=\<n> or \& as in `query-replace-regexp'.
  10129. +REGEXP defaults to the last regexp used.
  10130. +With a zero prefix arg, renaming by regexp affects the complete
  10131. +  pathname - usually only the non-directory part of file names is used
  10132. +  and changed.Fdired-do-copy-regexp
  10133. +Copy all marked files containing REGEXP to NEWNAME.
  10134. +See function `dired-rename-regexp' for more info.Fdired-do-hardlink-regexp
  10135. +Hardlink all marked files containing REGEXP to NEWNAME.
  10136. +See function `dired-rename-regexp' for more info.Fdired-do-symlink-regexp
  10137. +Symlink all marked files containing REGEXP to NEWNAME.
  10138. +See function `dired-rename-regexp' for more info.Fdired-upcase
  10139. +Rename all marked (or next ARG) files to upper case.Fdired-downcase
  10140. +Rename all marked (or next ARG) files to lower case.Fdired-maybe-insert-subdir
  10141. +Insert this subdirectory into the same dired buffer.
  10142. +If it is already present, just move to it (type \[dired-do-redisplay] to refresh),
  10143. +  else inserts it at its natural place (as `ls -lR' would have done).
  10144. +With a prefix arg, you may edit the ls switches used for this listing.
  10145. +  You can add `R' to the switches to expand the whole tree starting at
  10146. +  this subdirectory.
  10147. +This function takes some pains to conform to `ls -lR' output.Fdired-prev-subdir
  10148. +Go to previous subdirectory, regardless of level.
  10149. +When called interactively and not on a subdir line, go to this subdir's line.Fdired-goto-subdir
  10150. +Go to end of header line of DIR in this dired buffer.
  10151. +Return value of point on success, otherwise return nil.
  10152. +The next char is either \n, or \r if DIR is hidden.Fdired-mark-subdir-files
  10153. +Mark all files except `.' and `..'.Fdired-kill-subdir
  10154. +Remove all lines of current subdirectory.
  10155. +Lower levels are unaffected.Fdired-tree-up
  10156. +Go up ARG levels in the dired tree.Fdired-tree-down
  10157. +Go down in the dired tree.Fdired-hide-subdir
  10158. +Hide or unhide the current subdirectory and move to next directory.
  10159. +Optional prefix arg is a repeat factor.
  10160. +Use \[dired-hide-all] to (un)hide all directories.Fdired-hide-all
  10161. +Hide all subdirectories, leaving only their header lines.
  10162. +If there is already something hidden, make everything visible again.
  10163. +Use \[dired-hide-subdir] to (un)hide a particular subdirectory.Fdired-jump
  10164. +Jump to dired buffer corresponding to current buffer.
  10165. +If in a file, dired the current directory and move to file's line.
  10166. +If in dired already, pop up a level and goto old directory's line.
  10167. +In case the proper dired file line cannot be found, refresh the dired
  10168. +buffer and try again.Fdisassemble
  10169. +Print disassembled code for OBJECT in (optional) BUFFER.
  10170. +OBJECT can be a symbol defined as a function, or a function itself
  10171. +(a lambda expression or a compiled-function object).
  10172. +If OBJECT is not already compiled, we compile it, but do not
  10173. +redefine OBJECT if it is a symbol.Fdescribe-current-display-table
  10174. +Describe the display table in use in the selected window and buffer.Fmake-display-table
  10175. +Return a new, empty display table.Fstandard-display-8bit
  10176. +Display characters in the range L to H literally.Fstandard-display-default
  10177. +Display characters in the range L to H using the default notation.Fstandard-display-ascii
  10178. +Display character C using string S.
  10179. +S is usually a terminal-dependent escape sequence.
  10180. +This function is meaningless for an X frame.Fstandard-display-g1
  10181. +Display character C as character SC in the g1 character set.
  10182. +This function assumes that your terminal uses the SO/SI characters;
  10183. +it is meaningless for an X frame.Fstandard-display-graphic
  10184. +Display character C as character GC in graphics character set.
  10185. +This function assumes VT100-compatible escapes; it is meaningless for an
  10186. +X frame.Fstandard-display-underline
  10187. +Display character C as character UC plus underlining.Fstandard-display-european
  10188. +Toggle display of European characters encoded with ISO 8859.
  10189. +When enabled, characters in the range of 160 to 255 display not
  10190. +as octal escapes, but as accented characters.
  10191. +With prefix argument, enable European character display iff arg is positive.Fdissociated-press
  10192. +Dissociate the text of the current buffer.
  10193. +Output goes in buffer named *Dissociation*,
  10194. +which is redisplayed each time text is added to it.
  10195. +Every so often the user must say whether to continue.
  10196. +If ARG is positive, require ARG chars of continuity.
  10197. +If ARG is negative, require -ARG words of continuity.
  10198. +Default is 2.Fdoctor
  10199. +Switch to *doctor* buffer and start giving psychotherapy.Fdouble-mode
  10200. +Toggle double mode.
  10201. +With prefix arg, turn double mode on iff arg is positive.
  10202. +
  10203. +When double mode is on, some keys will insert will insert different
  10204. +strings when pressed twice.  See variable `double-map' for details.Fdunnet
  10205. +Switch to *dungeon* buffer and start game.Feasy-menu-define
  10206. +Define a menu bar submenu in maps MAPS, according to MENU.
  10207. +The arguments SYMBOL and DOC are ignored; they are present for
  10208. +compatibility only.  SYMBOL is not evaluated.  In other Emacs versions
  10209. +these arguments may be used as a variable to hold the menu data, and a
  10210. +doc string for that variable.
  10211. +
  10212. +The first element of MENU must be a string.  It is the menu bar item name.
  10213. +The rest of the elements are menu items.
  10214. +
  10215. +A menu item is usually a vector of three elements:  [NAME CALLBACK ENABLE]
  10216. +
  10217. +NAME is a string--the menu item name.
  10218. +
  10219. +CALLBACK is a command to run when the item is chosen,
  10220. +or a list to evaluate when the item is chosen.
  10221. +
  10222. +ENABLE is a symbol; if its value is non-nil, the item is enabled
  10223. +for selection.
  10224. +
  10225. +A menu item can be a string.  Then that string appears in the menu as
  10226. +unselectable text.  A string consisting solely of hyphens is displayed
  10227. +as a solid horizontal line.
  10228. +
  10229. +A menu item can be a list.  It is treated as a submenu.
  10230. +The first element should be the submenu name.  That's used as the
  10231. +menu item in the top-level menu.  The cdr of the submenu list
  10232. +is a list of menu items, as above.Felectric-buffer-list
  10233. +Pops up a buffer describing the set of Emacs buffers.
  10234. +Vaguely like ITS lunar select buffer; combining typeoutoid buffer
  10235. +listing with menuoid buffer selection.
  10236. +
  10237. +If the very next character typed is a space then the buffer list
  10238. +window disappears.  Otherwise, one may move around in the buffer list
  10239. +window, marking buffers to be selected, saved or deleted.
  10240. +
  10241. +To exit and select a new buffer, type a space when the cursor is on
  10242. +the appropriate line of the buffer-list window.  Other commands are
  10243. +much like those of buffer-menu-mode.
  10244. +
  10245. +Calls value of `electric-buffer-menu-mode-hook' on entry if non-nil.
  10246. +
  10247. +\{electric-buffer-menu-mode-map}FElectric-command-history-redo-expression
  10248. +Edit current history line in minibuffer and execute result.
  10249. +With prefix arg NOCONFIRM, execute current line as-is without editing.Fdef-edebug-spec
  10250. +Set the edebug-form-spec property of SYMBOL according to SPEC.
  10251. +Both SYMBOL and SPEC are unevaluated. The SPEC can be 0, t, a symbol
  10252. +(naming a function), or a list.Fedebug-eval-top-level-form
  10253. +Evaluate a top level form, such as a defun or defmacro.
  10254. +This is like `eval-defun', but the code is always instrumented for Edebug.
  10255. +Print its name in the minibuffer and leave point where it is,
  10256. +or if an error occurs, leave point after it with mark at the original
  10257. +point.Fediff-patch-file
  10258. +Run Ediff by patching FILE-TP-PATCH.Fediff-files
  10259. +Run Ediff on a pair files, FILE-A and FILE-B.Fediff-buffers
  10260. +Run Ediff on a pair of buffers, BUFFER-A and BUFFER-B.Fediff-patch-buffer
  10261. +Run Ediff by patching BUFFER-NAME.Fvc-ediff
  10262. +Run ediff on version REV of the current buffer in another window.
  10263. +If the current buffer is named `F', the version is named `F.~REV~'.
  10264. +If `F.~REV~' already exists, it is used instead of being re-created.Frcs-ediff
  10265. +Run Ediff on the current buffer, comparing it with previous RCS revision.  
  10266. +With prefix argument, prompts for revision name.Vedmacro-eight-bits
  10267. +*Non-nil if edit-kbd-macro should leave 8-bit characters intact.
  10268. +Default nil means to write characters above \177 in octal notation.Fedit-kbd-macro
  10269. +Edit a keyboard macro.
  10270. +At the prompt, type any key sequence which is bound to a keyboard macro.
  10271. +Or, type `C-x e' or RET to edit the last keyboard macro, `C-h l' to edit
  10272. +the last 100 keystrokes as a keyboard macro, or `M-x' to edit a macro by
  10273. +its command name.
  10274. +With a prefix argument, format the macro in a more concise way.Fedit-last-kbd-macro
  10275. +Edit the most recently defined keyboard macro.Fedit-named-kbd-macro
  10276. +Edit a keyboard macro which has been given a name by `name-last-kbd-macro'.Fread-kbd-macro
  10277. +Read the region as a keyboard macro definition.
  10278. +The region is interpreted as spelled-out keystrokes, e.g., "M-x abc RET".
  10279. +See documentation for `edmacro-mode' for details.
  10280. +Leading/trailing "C-x (" and "C-x )" in the text are allowed and ignored.
  10281. +The resulting macro is installed as the "current" keyboard macro.
  10282. +
  10283. +In Lisp, may also be called with a single STRING argument in which case
  10284. +the result is returned rather than being installed as the current macro.
  10285. +The result will be a string if possible, otherwise an event vector.
  10286. +Second argument NEED-VECTOR means to return an event vector always.Fformat-kbd-macro
  10287. +Return the keyboard macro MACRO as a human-readable string.
  10288. +This string is suitable for passing to `read-kbd-macro'.
  10289. +Second argument VERBOSE means to put one command per line with comments.
  10290. +If VERBOSE is `1', put everything on one line.  If VERBOSE is omitted
  10291. +or nil, use a compact 80-column format.Finsert-kbd-macro
  10292. +Insert in buffer the definition of kbd macro NAME, as Lisp code.
  10293. +Optional second arg KEYS means also record the keys it is on
  10294. +(this is the prefix argument, when calling interactively).
  10295. +
  10296. +This Lisp code will, when executed, define the kbd macro with the same
  10297. +definition it has now.  If you say to record the keys, the Lisp code
  10298. +will also rebind those keys to the macro.  Only global key bindings
  10299. +are recorded since executing this Lisp code always makes global
  10300. +bindings.
  10301. +
  10302. +To save a kbd macro, visit a file of Lisp code such as your `~/.emacs',
  10303. +use this command, and then save the file.Fedt-emulation-on
  10304. +Emulate DEC's EDT editor.
  10305. +Note that many keys are rebound; including nearly all keypad keys.
  10306. +Use \[edt-emulation-off] to undo all rebindings except the keypad keys.Freport-emacs-bug
  10307. +Report a bug in GNU Emacs.
  10308. +Prompts for bug subject.  Leaves you in a mail buffer.Femerge-files
  10309. +Run Emerge on two files.Femerge-files-with-ancestor
  10310. +Run Emerge on two files, giving another file as the ancestor.Femerge-buffers
  10311. +Run Emerge on two buffers.Femerge-buffers-with-ancestor
  10312. +Run Emerge on two buffers, giving another buffer as the ancestor.Femerge-revisions
  10313. +Emerge two RCS revisions of a file.Femerge-revisions-with-ancestor
  10314. +Emerge two RCS revisions of a file, with another revision as ancestor.Fsetenv
  10315. +Set the value of the environment variable named VARIABLE to VALUE.
  10316. +VARIABLE should be a string.  VALUE is optional; if not provided or is
  10317. +`nil', the environment variable VARIABLE will be removed.  
  10318. +This function works by modifying `process-environment'.Vtags-file-name
  10319. +*File name of tags table.
  10320. +To switch to a new tags table, setting this variable is sufficient.
  10321. +If you set this variable, do not also set `tags-table-list'.
  10322. +Use the `etags' program to make a tags table file.Vtags-table-list
  10323. +*List of file names of tags tables to search.
  10324. +An element that is a directory means the file "TAGS" in that directory.
  10325. +To switch to a new list of tags tables, setting this variable is sufficient.
  10326. +If you set this variable, do not also set `tags-file-name'.
  10327. +Use the `etags' program to make a tags table file.Vtags-add-tables
  10328. +*Control whether to add a new tags table to the current list.
  10329. +t means do; nil means don't (always start a new list).
  10330. +Any other value means ask the user whether to add a new tags table
  10331. +to the current list (as opposed to starting a new list).Vfind-tag-hook
  10332. +*Hook to be run by \[find-tag] after finding a tag.  See `run-hooks'.
  10333. +The value in the buffer in which \[find-tag] is done is used,
  10334. +not the value in the buffer \[find-tag] goes to.Vfind-tag-default-function
  10335. +*A function of no arguments used by \[find-tag] to pick a default tag.
  10336. +If nil, and the symbol that is the value of `major-mode'
  10337. +has a `find-tag-default-function' property (see `put'), that is used.
  10338. +Otherwise, `find-tag-default' is used.Fvisit-tags-table
  10339. +Tell tags commands to use tags table file FILE.
  10340. +FILE should be the name of a file created with the `etags' program.
  10341. +A directory name is ok too; it means file TAGS in that directory.
  10342. +
  10343. +Normally \[visit-tags-table] sets the global value of `tags-file-name'.
  10344. +With a prefix arg, set the buffer-local value instead.
  10345. +When you find a tag with \[find-tag], the buffer it finds the tag
  10346. +in is given a local value of this variable which is the name of the tags
  10347. +file the tag was in.Ftags-table-files
  10348. +Return a list of files in the current tags table.
  10349. +Assumes the tags table is the current buffer.
  10350. +File names returned are absolute.Ffind-tag-noselect
  10351. +Find tag (in current tags table) whose name contains TAGNAME.
  10352. +Returns the buffer containing the tag's definition and moves its point there,
  10353. +but does not select the buffer.
  10354. +The default for TAGNAME is the expression in the buffer near point.
  10355. +
  10356. +If second arg NEXT-P is t (interactively, with prefix arg), search for
  10357. +another tag that matches the last tagname or regexp used.  When there are
  10358. +multiple matches for a tag, more exact matches are found first.  If NEXT-P
  10359. +is the atom `-' (interactively, with prefix arg that is a negative number
  10360. +or just \[negative-argument]), pop back to the previous tag gone to.
  10361. +
  10362. +If third arg REGEXP-P is non-nil, treat TAGNAME as a regexp.
  10363. +
  10364. +See documentation of variable `tags-file-name'.Ffind-tag
  10365. +Find tag (in current tags table) whose name contains TAGNAME.
  10366. +Select the buffer containing the tag's definition, and move point there.
  10367. +The default for TAGNAME is the expression in the buffer around or before point.
  10368. +
  10369. +If second arg NEXT-P is t (interactively, with prefix arg), search for
  10370. +another tag that matches the last tagname or regexp used.  When there are
  10371. +multiple matches for a tag, more exact matches are found first.  If NEXT-P
  10372. +is the atom `-' (interactively, with prefix arg that is a negative number
  10373. +or just \[negative-argument]), pop back to the previous tag gone to.
  10374. +
  10375. +See documentation of variable `tags-file-name'.Ffind-tag-other-window
  10376. +Find tag (in current tags table) whose name contains TAGNAME.
  10377. +Select the buffer containing the tag's definition in another window, and
  10378. +move point there.  The default for TAGNAME is the expression in the buffer
  10379. +around or before point.
  10380. +
  10381. +If second arg NEXT-P is t (interactively, with prefix arg), search for
  10382. +another tag that matches the last tagname or regexp used.  When there are
  10383. +multiple matches for a tag, more exact matches are found first.  If NEXT-P
  10384. +is negative (interactively, with prefix arg that is a negative number or
  10385. +just \[negative-argument]), pop back to the previous tag gone to.
  10386. +
  10387. +See documentation of variable `tags-file-name'.Ffind-tag-other-frame
  10388. +Find tag (in current tags table) whose name contains TAGNAME.
  10389. +Select the buffer containing the tag's definition in another frame, and
  10390. +move point there.  The default for TAGNAME is the expression in the buffer
  10391. +around or before point.
  10392. +
  10393. +If second arg NEXT-P is t (interactively, with prefix arg), search for
  10394. +another tag that matches the last tagname or regexp used.  When there are
  10395. +multiple matches for a tag, more exact matches are found first.  If NEXT-P
  10396. +is negative (interactively, with prefix arg that is a negative number or
  10397. +just \[negative-argument]), pop back to the previous tag gone to.
  10398. +
  10399. +See documentation of variable `tags-file-name'.Ffind-tag-regexp
  10400. +Find tag (in current tags table) whose name matches REGEXP.
  10401. +Select the buffer containing the tag's definition and move point there.
  10402. +
  10403. +If second arg NEXT-P is t (interactively, with prefix arg), search for
  10404. +another tag that matches the last tagname or regexp used.  When there are
  10405. +multiple matches for a tag, more exact matches are found first.  If NEXT-P
  10406. +is negative (interactively, with prefix arg that is a negative number or
  10407. +just \[negative-argument]), pop back to the previous tag gone to.
  10408. +
  10409. +If third arg OTHER-WINDOW is non-nil, select the buffer in another window.
  10410. +
  10411. +See documentation of variable `tags-file-name'.Fnext-file
  10412. +Select next file among files in current tags table.
  10413. +
  10414. +A first argument of t (prefix arg, if interactive) initializes to the
  10415. +beginning of the list of files in the tags table.  If the argument is
  10416. +neither nil nor t, it is evalled to initialize the list of files.
  10417. +
  10418. +Non-nil second argument NOVISIT means use a temporary buffer
  10419. + to save time and avoid uninteresting warnings.
  10420. +
  10421. +Value is nil if the file was already visited;
  10422. +if the file was newly read in, the value is the filename.Ftags-loop-continue
  10423. +Continue last \[tags-search] or \[tags-query-replace] command.
  10424. +Used noninteractively with non-nil argument to begin such a command (the
  10425. +argument is passed to `next-file', which see).
  10426. +Two variables control the processing we do on each file:
  10427. +the value of `tags-loop-scan' is a form to be executed on each file
  10428. +to see if it is interesting (it returns non-nil if so)
  10429. +and `tags-loop-operate' is a form to execute to operate on an interesting file
  10430. +If the latter returns non-nil, we exit; otherwise we scan the next file.Ftags-search
  10431. +Search through all files listed in tags table for match for REGEXP.
  10432. +Stops when a match is found.
  10433. +To continue searching for next match, use command \[tags-loop-continue].
  10434. +
  10435. +See documentation of variable `tags-file-name'.Ftags-query-replace
  10436. +Query-replace-regexp FROM with TO through all files listed in tags table.
  10437. +Third arg DELIMITED (prefix arg) means replace only word-delimited matches.
  10438. +If you exit (\[keyboard-quit] or ESC), you can resume the query-replace
  10439. +with the command \[tags-loop-continue].
  10440. +
  10441. +See documentation of variable `tags-file-name'.Flist-tags
  10442. +Display list of tags in file FILE.
  10443. +FILE should not contain a directory specification.Ftags-apropos
  10444. +Display list of all tags in tags table REGEXP matches.Fselect-tags-table
  10445. +Select a tags table file from a menu of those you have already used.
  10446. +The list of tags tables to select from is stored in `tags-table-file-list';
  10447. +see the doc of that variable if you want to add names to the list.Fcomplete-tag
  10448. +Perform tags completion on the text around point.
  10449. +Completes to the set of names listed in the current tags table.  
  10450. +The string to complete is chosen in the same way as the default
  10451. +for \[find-tag] (which see).Vfind-ls-option
  10452. +*Option to `find' to produce an `ls -l'-type listing.Vfind-grep-options
  10453. +*Option to grep to be as silent as possible.
  10454. +On Berkeley systems, this is `-s', for others it seems impossible to
  10455. +suppress all output, so `-l' is used to print nothing more than the
  10456. +file name.Ffind-dired
  10457. +Run `find' and go into dired-mode on a buffer of the output.
  10458. +The command run (after changing into DIR) is
  10459. +
  10460. +    find . \( ARGS \) -lsFfind-name-dired
  10461. +Search DIR recursively for files matching the globbing pattern PATTERN,
  10462. +and run dired on those files.
  10463. +PATTERN is a shell wildcard (not an Emacs regexp) and need not be quoted.
  10464. +The command run (after changing into DIR) is
  10465. +
  10466. +    find . -name 'PATTERN' -lsFfind-grep-dired
  10467. +Find files in DIR containing a regexp ARG and start Dired on output.
  10468. +The command run (after changing into DIR) is
  10469. +
  10470. +    find . -exec grep -s ARG {} \; -ls
  10471. +
  10472. +Thus ARG can also contain additional grep options.Fenable-flow-control
  10473. +Toggle flow control handling.
  10474. +When handling is enabled, user can type C-s as C-\, and C-q as C-^.
  10475. +With arg, enable flow control mode if arg is positive, otherwise disable.Fenable-flow-control-on
  10476. +Enable flow control if using one of a specified set of terminal types.
  10477. +Use `(enable-flow-control-on "vt100" "h19")' to enable flow control
  10478. +on VT-100 and H19 terminals.  When flow control is enabled,
  10479. +you must type C-\ to get the effect of a C-s, and type C-^
  10480. +to get the effect of a C-q.Vfont-lock-mode-hook
  10481. +Function or functions to run on entry to Font Lock mode.Ffont-lock-mode
  10482. +Toggle Font Lock mode.
  10483. +With arg, turn Font Lock mode on if and only if arg is positive.
  10484. +
  10485. +When Font Lock mode is enabled, text is fontified as you type it:
  10486. +
  10487. + - comments are displayed in `font-lock-comment-face';
  10488. +     (That is a variable whose value should be a face name.)
  10489. + - strings are displayed in `font-lock-string-face';
  10490. + - documentation strings are displayed in `font-lock-doc-string-face';
  10491. + - function and variable names in their defining forms are displayed
  10492. +   in `font-lock-function-name-face';
  10493. + - and certain other expressions are displayed in other faces
  10494. +   according to the value of the variable `font-lock-keywords'.
  10495. +
  10496. +When you turn Font Lock mode on/off, the buffer is fontified/defontified.
  10497. +To fontify a buffer without having newly typed text become fontified, you
  10498. +can use \[font-lock-fontify-buffer].Fforms-mode
  10499. +Major mode to visit files in a field-structured manner using a form.
  10500. +
  10501. +Commands:                        Equivalent keys in read-only mode:
  10502. + TAB            forms-next-field          TAB
  10503. + \C-c TAB       forms-next-field          
  10504. + \C-c <         forms-first-record         <
  10505. + \C-c >         forms-last-record          >
  10506. + \C-c ?         describe-mode              ?
  10507. + \C-c \C-k      forms-delete-record
  10508. + \C-c \C-q      forms-toggle-read-only     q
  10509. + \C-c \C-o      forms-insert-record
  10510. + \C-c \C-l      forms-jump-record          l
  10511. + \C-c \C-n      forms-next-record          n
  10512. + \C-c \C-p      forms-prev-record          p
  10513. + \C-c \C-s      forms-search               s
  10514. + \C-c \C-x      forms-exit                 x
  10515. +Fforms-find-file
  10516. +Visit a file in Forms mode.Fforms-find-file-other-window
  10517. +Visit a file in Forms mode in other window.Vfortran-tab-mode-default
  10518. +*Default tabbing/carriage control style for empty files in Fortran mode.
  10519. +A value of t specifies tab-digit style of continuation control.
  10520. +A value of nil specifies that continuation lines are marked
  10521. +with a character in column 6.Ffortran-mode
  10522. +Major mode for editing Fortran code.
  10523. +\[fortran-indent-line] indents the current Fortran line correctly. 
  10524. +DO statements must not share a common CONTINUE.
  10525. +
  10526. +Type ;? or ;\[help-command] to display a list of built-in abbrevs for Fortran keywords.
  10527. +
  10528. +Key definitions:
  10529. +\{fortran-mode-map}
  10530. +
  10531. +Variables controlling indentation style and extra features:
  10532. +
  10533. + comment-start
  10534. +    Normally nil in Fortran mode.  If you want to use comments
  10535. +    starting with `!', set this to the string "!".
  10536. + fortran-do-indent
  10537. +    Extra indentation within do blocks.  (default 3)
  10538. + fortran-if-indent
  10539. +    Extra indentation within if blocks.  (default 3)
  10540. + fortran-structure-indent
  10541. +    Extra indentation within structure, union, map and interface blocks.
  10542. +    (default 3)
  10543. + fortran-continuation-indent
  10544. +    Extra indentation applied to continuation statements.  (default 5)
  10545. + fortran-comment-line-extra-indent
  10546. +    Amount of extra indentation for text within full-line comments. (default 0)
  10547. + fortran-comment-indent-style
  10548. +    nil    means don't change indentation of text in full-line comments,
  10549. +    fixed  means indent that text at `fortran-comment-line-extra-indent' beyond
  10550. +           the value of `fortran-minimum-statement-indent-fixed' (for fixed
  10551. +           format continuation style) or `fortran-minimum-statement-indent-tab'
  10552. +           (for TAB format continuation style).
  10553. +    relative  means indent at `fortran-comment-line-extra-indent' beyond the
  10554. +           indentation for a line of code.
  10555. +    (default 'fixed)
  10556. + fortran-comment-indent-char
  10557. +    Single-character string to be inserted instead of space for
  10558. +    full-line comment indentation.  (default " ")
  10559. + fortran-minimum-statement-indent-fixed
  10560. +    Minimum indentation for Fortran statements in fixed format mode. (def.6)
  10561. + fortran-minimum-statement-indent-tab
  10562. +    Minimum indentation for Fortran statements in TAB format mode. (default 9)
  10563. + fortran-line-number-indent
  10564. +    Maximum indentation for line numbers.  A line number will get
  10565. +    less than this much indentation if necessary to avoid reaching
  10566. +    column 5.  (default 1)
  10567. + fortran-check-all-num-for-matching-do
  10568. +    Non-nil causes all numbered lines to be treated as possible "continue"
  10569. +    statements.  (default nil)
  10570. + fortran-blink-matching-if 
  10571. +    From a Fortran ENDIF statement, blink the matching IF statement.
  10572. +    Also, from an ENDDO statement, blink on matching DO [WHILE] statement.
  10573. +    (default nil)
  10574. + fortran-continuation-string
  10575. +    Single-character string to be inserted in column 5 of a continuation
  10576. +    line.  (default "$")
  10577. + fortran-comment-region
  10578. +    String inserted by \[fortran-comment-region] at start of each line in 
  10579. +    region.  (default "c$$$")
  10580. + fortran-electric-line-number
  10581. +    Non-nil causes line number digits to be moved to the correct column 
  10582. +    as typed.  (default t)
  10583. + fortran-break-before-delimiters
  10584. +    Non-nil causes `fortran-do-auto-fill' breaks lines before delimiters.
  10585. +    (default t)
  10586. + fortran-startup-message
  10587. +    Set to nil to inhibit message first time Fortran mode is used.
  10588. +
  10589. +Turning on Fortran mode calls the value of the variable `fortran-mode-hook'
  10590. +with no args, if that value is non-nil.Fgnus
  10591. +Read network news.
  10592. +If optional argument CONFIRM is non-nil, ask NNTP server.Fgnus-post-news
  10593. +Begin editing a new USENET news article to be posted.
  10594. +Type \[describe-mode] once editing the article to get a list of commands.Fgomoku
  10595. +Start a Gomoku game between you and Emacs.
  10596. +If a game is in progress, this command allow you to resume it.
  10597. +If optional arguments N and M are given, an N by M board is used.
  10598. +
  10599. +You and Emacs play in turn by marking a free square.  You mark it with X
  10600. +and Emacs marks it with O. The winner is the first to get five contiguous
  10601. +marks horizontally, vertically or in diagonal.
  10602. +
  10603. +You play by moving the cursor over the square you choose and hitting
  10604. +\<gomoku-mode-map>\[gomoku-human-plays].
  10605. +Use \[describe-mode] for more info.Fgdb
  10606. +Run gdb on program FILE in buffer *gud-FILE*.
  10607. +The directory containing FILE becomes the initial working directory
  10608. +and source-file directory for your debugger.Fsdb
  10609. +Run sdb on program FILE in buffer *gud-FILE*.
  10610. +The directory containing FILE becomes the initial working directory
  10611. +and source-file directory for your debugger.Fdbx
  10612. +Run dbx on program FILE in buffer *gud-FILE*.
  10613. +The directory containing FILE becomes the initial working directory
  10614. +and source-file directory for your debugger.Fxdb
  10615. +Run xdb on program FILE in buffer *gud-FILE*.
  10616. +The directory containing FILE becomes the initial working directory
  10617. +and source-file directory for your debugger.
  10618. +
  10619. +You can set the variable 'gud-xdb-directories' to a list of program source
  10620. +directories if your program contains sources from more than one directory.Fperldb
  10621. +Run perldb on program FILE in buffer *gud-FILE*.
  10622. +The directory containing FILE becomes the initial working directory
  10623. +and source-file directory for your debugger.Fhanoi
  10624. +Towers of Hanoi diversion.  Argument is number of rings.Vthree-step-help
  10625. +*Non-nil means give more info about Help command in three steps.
  10626. +The three steps are simple prompt, prompt with all options,
  10627. +and window listing and describing the options.
  10628. +A value of nil means skip the middle step, so that
  10629. +\[help-command] \[help-command] gives the window that lists the options.FHelper-describe-bindings
  10630. +Describe local key bindings of current mode.FHelper-help
  10631. +Provide help for current mode.Fhexl-mode
  10632. +\<hexl-mode-map>
  10633. +A major mode for editing binary files in hex dump format.
  10634. +
  10635. +This function automatically converts a buffer into the hexl format
  10636. +using the function `hexlify-buffer'.
  10637. +
  10638. +Each line in the buffer has an "address" (displayed in hexadecimal)
  10639. +representing the offset into the file that the characters on this line
  10640. +are at and 16 characters from the file (displayed as hexadecimal
  10641. +values grouped every 16 bits) and as their ASCII values.
  10642. +
  10643. +If any of the characters (displayed as ASCII characters) are
  10644. +unprintable (control or meta characters) they will be replaced as
  10645. +periods.
  10646. +
  10647. +If `hexl-mode' is invoked with an argument the buffer is assumed to be
  10648. +in hexl format.
  10649. +
  10650. +A sample format:
  10651. +
  10652. +  HEX ADDR: 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f     ASCII-TEXT
  10653. +  --------  ---- ---- ---- ---- ---- ---- ---- ----  ----------------
  10654. +  00000000: 5468 6973 2069 7320 6865 786c 2d6d 6f64  This is hexl-mod
  10655. +  00000010: 652e 2020 4561 6368 206c 696e 6520 7265  e.  Each line re
  10656. +  00000020: 7072 6573 656e 7473 2031 3620 6279 7465  presents 16 byte
  10657. +  00000030: 7320 6173 2068 6578 6164 6563 696d 616c  s as hexadecimal
  10658. +  00000040: 2041 5343 4949 0a61 6e64 2070 7269 6e74   ASCII.and print
  10659. +  00000050: 6162 6c65 2041 5343 4949 2063 6861 7261  able ASCII chara
  10660. +  00000060: 6374 6572 732e 2020 416e 7920 636f 6e74  cters.  Any cont
  10661. +  00000070: 726f 6c20 6f72 206e 6f6e 2d41 5343 4949  rol or non-ASCII
  10662. +  00000080: 2063 6861 7261 6374 6572 730a 6172 6520   characters.are 
  10663. +  00000090: 6469 7370 6c61 7965 6420 6173 2070 6572  displayed as per
  10664. +  000000a0: 696f 6473 2069 6e20 7468 6520 7072 696e  iods in the prin
  10665. +  000000b0: 7461 626c 6520 6368 6172 6163 7465 7220  table character 
  10666. +  000000c0: 7265 6769 6f6e 2e0a                      region..
  10667. +
  10668. +Movement is as simple as movement in a normal emacs text buffer.  Most
  10669. +cursor movement bindings are the same (ie. Use \[hexl-backward-char], \[hexl-forward-char], \[hexl-next-line], and \[hexl-previous-line]
  10670. +to move the cursor left, right, down, and up).
  10671. +
  10672. +Advanced cursor movement commands (ala \[hexl-beginning-of-line], \[hexl-end-of-line], \[hexl-beginning-of-buffer], and \[hexl-end-of-buffer]) are
  10673. +also supported.
  10674. +
  10675. +There are several ways to change text in hexl mode:
  10676. +
  10677. +ASCII characters (character between space (0x20) and tilde (0x7E)) are
  10678. +bound to self-insert so you can simply type the character and it will
  10679. +insert itself (actually overstrike) into the buffer.
  10680. +
  10681. +\[hexl-quoted-insert] followed by another keystroke allows you to insert the key even if
  10682. +it isn't bound to self-insert.  An octal number can be supplied in place
  10683. +of another key to insert the octal number's ASCII representation.
  10684. +
  10685. +\[hexl-insert-hex-char] will insert a given hexadecimal value (if it is between 0 and 0xFF)
  10686. +into the buffer at the current point.
  10687. +
  10688. +\[hexl-insert-octal-char] will insert a given octal value (if it is between 0 and 0377)
  10689. +into the buffer at the current point.
  10690. +
  10691. +\[hexl-insert-decimal-char] will insert a given decimal value (if it is between 0 and 255)
  10692. +into the buffer at the current point.
  10693. +
  10694. +\[hexl-mode-exit] will exit hexl-mode.
  10695. +
  10696. +Note: saving the file with any of the usual Emacs commands
  10697. +will actually convert it back to binary format while saving.
  10698. +
  10699. +You can use \[hexl-find-file] to visit a file in hexl-mode.
  10700. +
  10701. +\[describe-bindings] for advanced commands.Fhexl-find-file
  10702. +Edit file FILENAME in hexl-mode.
  10703. +Switch to a buffer visiting file FILENAME, creating one in none exists.Fhexlify-buffer
  10704. +Convert a binary buffer to hexl formatFhide-ifdef-mode
  10705. +Toggle Hide-Ifdef mode.  This is a minor mode, albeit a large one.
  10706. +With ARG, turn Hide-Ifdef mode on iff arg is positive.
  10707. +In Hide-Ifdef mode, code within #ifdef constructs that the C preprocessor
  10708. +would eliminate may be hidden from view.  Several variables affect
  10709. +how the hiding is done:
  10710. +
  10711. +hide-ifdef-env
  10712. +    An association list of defined and undefined symbols for the
  10713. +    current buffer.  Initially, the global value of `hide-ifdef-env'
  10714. +    is used.
  10715. +
  10716. +hide-ifdef-define-alist
  10717. +    An association list of defined symbol lists.  
  10718. +        Use `hide-ifdef-set-define-alist' to save the current `hide-ifdef-env'
  10719. +        and `hide-ifdef-use-define-alist' to set the current `hide-ifdef-env'
  10720. +        from one of the lists in `hide-ifdef-define-alist'.
  10721. +
  10722. +hide-ifdef-lines
  10723. +    Set to non-nil to not show #if, #ifdef, #ifndef, #else, and
  10724. +    #endif lines when hiding.
  10725. +
  10726. +hide-ifdef-initially
  10727. +    Indicates whether `hide-ifdefs' should be called when Hide-Ifdef mode
  10728. +    is activated.
  10729. +
  10730. +hide-ifdef-read-only
  10731. +    Set to non-nil if you want to make buffers read only while hiding.
  10732. +    After `show-ifdefs', read-only status is restored to previous value.
  10733. +
  10734. +\{hide-ifdef-mode-map}Vhide-ifdef-initially
  10735. +*Non-nil if `hide-ifdefs' should be called when Hide-Ifdef mode
  10736. +is first activated.Vhide-ifdef-read-only
  10737. +*Set to non-nil if you want buffer to be read-only while hiding text.Vhide-ifdef-lines
  10738. +*Set to t if you don't want to see the #ifX, #else, and #endif lines.Vhippie-expand-try-functions-list
  10739. +The list of expansion functions tried in order by `hippie-expand'.
  10740. +To change the behavior of `hippie-expand', remove, change the order of,
  10741. +or insert functions in this list.Vhippie-expand-verbose
  10742. +*Non-nil makes `hippie-expand' output which function it is trying.Vhippie-expand-max-buffers
  10743. +*The maximum number of buffers (apart from the current) searched.
  10744. +If nil, all buffers are searched.Vhippie-expand-ignore-buffers
  10745. +*A list specifying which buffers not to search (if not current).
  10746. +Can contain both regexps matching buffer names (as strings) and major modes
  10747. +(as atoms)Fhippie-expand
  10748. +Try to expand text before point, using multiple methods.
  10749. +The expansion functions in `hippie-expand-try-functions-list' are
  10750. +tried in order, until a possible expansion is found.  Repeated
  10751. +application of `hippie-expand' inserts successively possible
  10752. +expansions.  
  10753. +With a positive numeric argument, jumps directly to the ARG next
  10754. +function in this list.  With a negative argument or just \[universal-argument], 
  10755. +undoes the expansion.Fmake-hippie-expand-function
  10756. +Construct a function similar to `hippie-expand'.
  10757. +Make it use the expansion functions in TRY-LIST.  An optional second
  10758. +argument VERBOSE non-nil makes the function verbose.Ficomplete-prime-session
  10759. +Prep emacs v 19 for more finely-grained minibuffer completion-feedback.
  10760. +
  10761. +You can inhibit icomplete after loading by setting icomplete-inhibit
  10762. +non-nil.  Set the var back to nil to re-enable icomplete.Fielm
  10763. +Interactively evaluate Emacs Lisp expressions.
  10764. +Switches to the buffer *ielm*, or creates it if it does not exist.Fimenu
  10765. +Jump to a place in the buffer chosen using a buffer menu or mouse menu.
  10766. +See `imenu-choose-buffer-index' for more information.Vinferior-lisp-filter-regexp
  10767. +*What not to save on inferior Lisp's input history.
  10768. +Input matching this regexp is not saved on the input history in Inferior Lisp
  10769. +mode.  Default is whitespace followed by 0 or 1 single-letter colon-keyword 
  10770. +(as in :a, :c, etc.)Vinferior-lisp-program
  10771. +*Program name for invoking an inferior Lisp with for Inferior Lisp mode.Vinferior-lisp-load-command
  10772. +*Format-string for building a Lisp expression to load a file.
  10773. +This format string should use `%s' to substitute a file name
  10774. +and should result in a Lisp expression that will command the inferior Lisp
  10775. +to load that file.  The default works acceptably on most Lisps.
  10776. +The string "(progn (load \"%s\" :verbose nil :print t) (values))\
  10777. +"
  10778. +produces cosmetically superior output for this application,
  10779. +but it works only in Common Lisp.Vinferior-lisp-prompt
  10780. +Regexp to recognise prompts in the Inferior Lisp mode.
  10781. +Defaults to "^[^> \n]*>+:? *", which works pretty good for Lucid, kcl,
  10782. +and franz.  This variable is used to initialize `comint-prompt-regexp' in the 
  10783. +Inferior Lisp buffer.
  10784. +
  10785. +More precise choices:
  10786. +Lucid Common Lisp: "^\(>\|\(->\)+\) *"
  10787. +franz: "^\(->\|<[0-9]*>:\) *"
  10788. +kcl: "^>+ *"
  10789. +
  10790. +This is a fine thing to set in your .emacs file.Vinferior-lisp-mode-hook
  10791. +*Hook for customising Inferior Lisp mode.Finferior-lisp
  10792. +Run an inferior Lisp process, input and output via buffer `*inferior-lisp*'.
  10793. +If there is a process already running in `*inferior-lisp*', just switch
  10794. +to that buffer.
  10795. +With argument, allows you to edit the command line (default is value
  10796. +of `inferior-lisp-program').  Runs the hooks from
  10797. +`inferior-lisp-mode-hook' (after the `comint-mode-hook' is run).
  10798. +(Type \[describe-mode] in the process buffer for a list of commands.)Finfo
  10799. +Enter Info, the documentation browser.
  10800. +Optional argument FILE specifies the file to examine;
  10801. +the default is the top-level directory of Info.
  10802. +
  10803. +In interactive use, a prefix argument directs this command
  10804. +to read a file name from the minibuffer.Finfo-standalone
  10805. +Run Emacs as a standalone Info reader.
  10806. +Usage:  emacs -f info-standalone [filename]
  10807. +In standalone mode, \<Info-mode-map>\[Info-exit] exits Emacs itself.FInfo-goto-emacs-command-node
  10808. +Go to the Info node in the Emacs manual for command COMMAND.
  10809. +The command is found by looking up in Emacs manual's Command Index.FInfo-goto-emacs-key-command-node
  10810. +Go to the Info node in the Emacs manual the command bound to KEY, a string.
  10811. +Interactively, if the binding is execute-extended-command, a command is read.
  10812. +The command is found by looking up in Emacs manual's Command Index.FInfo-tagify
  10813. +Create or update Info-file tag table in current buffer.FInfo-split
  10814. +Split an info file into an indirect file plus bounded-size subfiles.
  10815. +Each subfile will be up to 50,000 characters plus one node.
  10816. +
  10817. +To use this command, first visit a large Info file that has a tag
  10818. +table.  The buffer is modified into a (small) indirect info file which
  10819. +should be saved in place of the original visited file.
  10820. +
  10821. +The subfiles are written in the same directory the original file is
  10822. +in, with names generated by appending `-' and a number to the original
  10823. +file name.  The indirect file still functions as an Info file, but it
  10824. +contains just the tag table and a directory of subfiles.FInfo-validate
  10825. +Check current buffer for validity as an Info file.
  10826. +Check that every node pointer points to an existing node.Fbatch-info-validate
  10827. +Runs `Info-validate' on the files remaining on the command line.
  10828. +Must be used only with -batch, and kills Emacs on completion.
  10829. +Each file will be processed even if an error occurred previously.
  10830. +For example, invoke "emacs -batch -f batch-info-validate $info/ ~/*.info"Fiso-accents-mode
  10831. +Toggle ISO Accents mode, in which accents modify the following letter.
  10832. +This permits easy insertion of accented characters according to ISO-8859-1.
  10833. +When Iso-accents mode is enabled, accent character keys
  10834. +(`, ', ", ^, / and ~) do not self-insert; instead, they modify the following
  10835. +letter key so that it inserts an ISO accented letter.
  10836. +
  10837. +The variable `iso-accents-enable' specifies the list of characters to
  10838. +enable as accents.  If you don't need all of them, remove the ones you
  10839. +don't need from that list.
  10840. +
  10841. +Special combinations: ~c gives a c with cedilla,
  10842. +~d gives a d with dash.
  10843. +"s gives German sharp s.
  10844. +/a gives a with ring.
  10845. +/e gives an a-e ligature.
  10846. +~< and ~> give guillemets.
  10847. +
  10848. +With an argument, a positive argument enables ISO Accents mode, 
  10849. +and a negative argument disables it.Vispell-dictionary-alist
  10850. +An alist of dictionaries and their associated parameters.
  10851. +
  10852. +Each element of this list is also a list:
  10853. +
  10854. +(DICTIONARY-NAME CASECHARS NOT-CASECHARS OTHERCHARS MANY-OTHERCHARS-P
  10855. +        ISPELL-ARGS EXTENDED-CHARACTER-MODE)
  10856. +
  10857. +DICTIONARY-NAME is a possible value of variable `ispell-dictionary', nil
  10858. +means the default dictionary.
  10859. +
  10860. +CASECHARS is a regular expression of valid characters that comprise a
  10861. +word.
  10862. +
  10863. +NOT-CASECHARS is the opposite regexp of CASECHARS.
  10864. +
  10865. +OTHERCHARS is a regular expression of other characters that are valid
  10866. +in word constructs.  Otherchars cannot be adjacent to each other in a
  10867. +word, nor can they begin or end a word.  This implies we can't check
  10868. +"Stevens'" as a correct possessive and other correct formations.
  10869. +
  10870. +Hint: regexp syntax requires the hyphen to be declared first here.
  10871. +
  10872. +MANY-OTHERCHARS-P is non-nil if many otherchars are to be allowed in a
  10873. +word instead of only one.
  10874. +
  10875. +ISPELL-ARGS is a list of additional arguments passed to the ispell
  10876. +subprocess.
  10877. +
  10878. +EXTENDED-CHARACTER-MODE should be used when dictionaries are used which
  10879. +have been configured in Ispell's parse.y.  (For example, umlauts
  10880. +can be encoded as \"a, a\", "a, ...)  Defaults are ~tex and ~nroff
  10881. +in English.  This has the same effect as the command-line `-T' option.
  10882. +The buffer Major Mode controls Ispell's parsing in tex or nroff mode,
  10883. +but the dictionary can control the extended character mode.
  10884. +Both defaults can be overruled in a buffer-local fashion. See
  10885. +`ispell-parsing-keyword' for details on this.
  10886. +
  10887. +Note that the CASECHARS and OTHERCHARS slots of the alist should
  10888. +contain the same character set as casechars and otherchars in the
  10889. +language.aff file (e.g., english.aff).Fispell-word
  10890. +Check spelling of word under or before the cursor.
  10891. +If the word is not found in dictionary, display possible corrections
  10892. +in a window and so you can choose one.
  10893. +
  10894. +With a prefix argument (or if CONTINUE is non-nil),
  10895. +resume interrupted spell-checking of a buffer or region.
  10896. +
  10897. +If optional argument FOLLOWING is non-nil or if `ispell-following-word'
  10898. +is non-nil when called interactively, then the following word
  10899. +(rather than preceding) is checked when the cursor is not over a word.
  10900. +When the optional argument QUIETLY is non-nil or `ispell-quietly' is non-nil
  10901. +when called interactively, non-corrective messages are suppressed.
  10902. +
  10903. +Word syntax described by `ispell-dictionary-alist' (which see).
  10904. +
  10905. +This will check or reload the dictionary.  Use \[ispell-change-dictionary]
  10906. +or \[ispell-region] to update the Ispell process.Fispell-help
  10907. +Display a list of the options available when a misspelling is encountered.
  10908. +
  10909. +Selections are:
  10910. +
  10911. +DIGIT: Replace the word with a digit offered in the *Choices* buffer.
  10912. +SPC:   Accept word this time.
  10913. +`i':   Accept word and insert into private dictionary.
  10914. +`a':   Accept word for this session.
  10915. +`A':   Accept word and place in `buffer-local dictionary'.
  10916. +`r':   Replace word with typed-in value.  Rechecked.
  10917. +`R':   Replace word with typed-in value. Query-replaced in buffer. Rechecked.
  10918. +`?':   Show these commands.
  10919. +`x':   Exit spelling buffer.  Move cursor to original point.
  10920. +`X':   Exit spelling buffer.  Leaves cursor at the current point, and permits
  10921. +        the aborted check to be completed later.
  10922. +`q':   Quit spelling session (Kills ispell process).
  10923. +`l':   Look up typed-in replacement in alternate dictionary.  Wildcards okay.
  10924. +`u':   Like `i', but the word is lower-cased first.
  10925. +`m':   Like `i', but allows one to include dictionary completion information.
  10926. +`C-l':  redraws screen
  10927. +`C-r':  recursive edit
  10928. +`C-z':  suspend emacs or iconify frameFispell-kill-ispell
  10929. +Kill current Ispell process (so that you may start a fresh one).
  10930. +With NO-ERROR, just return non-nil if there was no Ispell running.Fispell-change-dictionary
  10931. +Change `ispell-dictionary' (q.v.) and kill old Ispell process.
  10932. +A new one will be started as soon as necessary.
  10933. +
  10934. +By just answering RET you can find out what the current dictionary is.
  10935. +
  10936. +With prefix argument, set the default directory.Fispell-region
  10937. +Interactively check a region for spelling errors.Fispell-buffer
  10938. +Check the current buffer for spelling errors interactively.Fispell-complete-word
  10939. +Look up word before or under point in dictionary (see lookup-words command)
  10940. +and try to complete it.  If optional INTERIOR-FRAG is non-nil then the word
  10941. +may be a character sequence inside of a word.
  10942. +
  10943. +Standard ispell choices are then available.Fispell-complete-word-interior-frag
  10944. +Completes word matching character sequence inside a word.Fispell-message
  10945. +Check the spelling of a mail message or news post.
  10946. +Don't check spelling of message headers except the Subject field.
  10947. +Don't check included messages.
  10948. +
  10949. +To abort spell checking of a message REGION and send the message anyway,
  10950. +use the `x' or `q' command.  (Any subsequent regions will be checked.)
  10951. +The `X' command aborts the message send so that you can edit the buffer.
  10952. +
  10953. +To spell-check whenever a message is sent, include the appropriate lines
  10954. +in your .emacs file:
  10955. +   (add-hook 'news-inews-hook 'ispell-message)
  10956. +   (add-hook 'mail-send-hook  'ispell-message)
  10957. +   (add-hook 'mh-before-send-letter-hook 'ispell-message)
  10958. +
  10959. +you can bind this to the key C-c i in GNUS or mail by adding to
  10960. +`news-reply-mode-hook' or `mail-mode-hook' the following lambda expression:
  10961. +   (function (lambda () (local-set-key "\C-ci" 'ispell-message)))Vledit-save-files
  10962. +*Non-nil means Ledit should save files before transferring to Lisp.Vledit-go-to-lisp-string
  10963. +*Shell commands to execute to resume Lisp job.Vledit-go-to-liszt-string
  10964. +*Shell commands to execute to resume Lisp compiler job.Fledit-mode
  10965. +\<ledit-mode-map>Major mode for editing text and stuffing it to a Lisp job.
  10966. +Like Lisp mode, plus these special commands:
  10967. +  \[ledit-save-defun]    -- record defun at or after point
  10968. +       for later transmission to Lisp job.
  10969. +  \[ledit-save-region] -- record region for later transmission to Lisp job.
  10970. +  \[ledit-go-to-lisp] -- transfer to Lisp job and transmit saved text.
  10971. +  \[ledit-go-to-liszt] -- transfer to Liszt (Lisp compiler) job
  10972. +       and transmit saved text.
  10973. +\{ledit-mode-map}
  10974. +To make Lisp mode automatically change to Ledit mode,
  10975. +do (setq lisp-mode-hook 'ledit-from-lisp-mode)Flife
  10976. +Run Conway's Life simulation.
  10977. +The starting pattern is randomly selected.  Prefix arg (optional first
  10978. +arg non-nil from a program) is the number of seconds to sleep between
  10979. +generations (this defaults to 1).Funload-feature
  10980. +Unload the library that provided FEATURE, restoring all its autoloads.
  10981. +If the feature is required by any other loaded code, and optional FORCE
  10982. +is nil, raise an error.Vlpr-switches
  10983. +*List of strings to pass as extra switch args to `lpr' when it is invoked.Vlpr-command
  10984. +*Shell command for printing a fileFlpr-buffer
  10985. +Print buffer contents as with Unix command `lpr'.
  10986. +`lpr-switches' is a list of extra switches (strings) to pass to lpr.Fprint-buffer
  10987. +Print buffer contents as with Unix command `lpr -p'.
  10988. +`lpr-switches' is a list of extra switches (strings) to pass to lpr.Flpr-region
  10989. +Print region contents as with Unix command `lpr'.
  10990. +`lpr-switches' is a list of extra switches (strings) to pass to lpr.Fprint-region
  10991. +Print region contents as with Unix command `lpr -p'.
  10992. +`lpr-switches' is a list of extra switches (strings) to pass to lpr.Fphases-of-moon
  10993. +Display the quarters of the moon for last month, this month, and next month.
  10994. +If called with an optional prefix argument, prompts for month and year.
  10995. +
  10996. +This function is suitable for execution in a .emacs file.Fname-last-kbd-macro
  10997. +Assign a name to the last keyboard macro defined.
  10998. +Argument SYMBOL is the name to define.
  10999. +The symbol's function definition becomes the keyboard macro string.
  11000. +Such a "function" cannot be called from Lisp, but it is a valid editor command.Finsert-kbd-macro
  11001. +Insert in buffer the definition of kbd macro NAME, as Lisp code.
  11002. +Optional second arg KEYS means also record the keys it is on
  11003. +(this is the prefix argument, when calling interactively).
  11004. +
  11005. +This Lisp code will, when executed, define the kbd macro with the same
  11006. +definition it has now.  If you say to record the keys, the Lisp code
  11007. +will also rebind those keys to the macro.  Only global key bindings
  11008. +are recorded since executing this Lisp code always makes global
  11009. +bindings.
  11010. +
  11011. +To save a kbd macro, visit a file of Lisp code such as your `~/.emacs',
  11012. +use this command, and then save the file.Fkbd-macro-query
  11013. +Query user during kbd macro execution.
  11014. +  With prefix argument, enters recursive edit, reading keyboard
  11015. +commands even within a kbd macro.  You can give different commands
  11016. +each time the macro executes.
  11017. +  Without prefix argument, asks whether to continue running the macro.
  11018. +Your options are: \<query-replace-map>
  11019. +\[act]    Finish this iteration normally and continue with the next.
  11020. +\[skip]    Skip the rest of this iteration, and start the next.
  11021. +\[exit]    Stop the macro entirely right now.
  11022. +\[recenter]    Redisplay the screen, then ask again.
  11023. +\[edit]    Enter recursive edit; ask again when you exit from that.Fapply-macro-to-region-lines
  11024. +For each complete line between point and mark, move to the beginning
  11025. +of the line, and run the last keyboard macro.
  11026. +
  11027. +When called from lisp, this function takes two arguments TOP and
  11028. +BOTTOM, describing the current region.  TOP must be before BOTTOM.
  11029. +The optional third argument MACRO specifies a keyboard macro to
  11030. +execute.
  11031. +
  11032. +This is useful for quoting or unquoting included text, adding and
  11033. +removing comments, or producing tables where the entries are regular.
  11034. +
  11035. +For example, in Usenet articles, sections of text quoted from another
  11036. +author are indented, or have each line start with `>'.  To quote a
  11037. +section of text, define a keyboard macro which inserts `>', put point
  11038. +and mark at opposite ends of the quoted section, and use
  11039. +`\[apply-macro-to-region-lines]' to mark the entire section.
  11040. +
  11041. +Suppose you wanted to build a keyword table in C where each entry
  11042. +looked like this:
  11043. +
  11044. +    { "foo", foo_data, foo_function }, 
  11045. +    { "bar", bar_data, bar_function },
  11046. +    { "baz", baz_data, baz_function },
  11047. +
  11048. +You could enter the names in this format:
  11049. +
  11050. +    foo
  11051. +    bar
  11052. +    baz
  11053. +
  11054. +and write a macro to massage a word into a table entry:
  11055. +
  11056. +    \C-x (
  11057. +       \M-d { "\C-y", \C-y_data, \C-y_function },
  11058. +    \C-x )
  11059. +
  11060. +and then select the region of un-tablified names and use
  11061. +`\[apply-macro-to-region-lines]' to build the table from the names.
  11062. +Fmail-extract-address-components
  11063. +Given an RFC-822 ADDRESS, extract full name and canonical address.
  11064. +Returns a list of the form (FULL-NAME CANONICAL-ADDRESS).
  11065. +If no name can be extracted, FULL-NAME will be nil.
  11066. +ADDRESS may be a string or a buffer.  If it is a buffer, the visible 
  11067. + (narrowed) portion of the buffer will be interpreted as the address.
  11068. + (This feature exists so that the clever caller might be able to avoid
  11069. + consing a string.)
  11070. +If ADDRESS contains more than one RFC-822 address, only the first is
  11071. + returned.  Some day this function may be extended to extract multiple
  11072. + addresses, or perhaps return the position at which parsing stopped.Fwhat-domain
  11073. +Convert mail domain to country tit corresponds to.Vmail-use-rfc822
  11074. +*If non-nil, use a full, hairy RFC822 parser on mail addresses.
  11075. +Otherwise, (the default) use a smaller, somewhat faster, and
  11076. +often correct parser.Fmail-fetch-field
  11077. +Return the value of the header field FIELD-NAME.
  11078. +The buffer is expected to be narrowed to just the headers of the message.
  11079. +If second arg LAST is non-nil, use the last such field if there are several.
  11080. +If third arg ALL is non-nil, concatenate all such fields with commas between.Fbuild-mail-abbrevs
  11081. +Read mail aliases from `~/.mailrc' file and set `mail-abbrevs'.Fdefine-mail-abbrev
  11082. +Define NAME as a mail-abbrev that translates to DEFINITION.
  11083. +If DEFINITION contains multiple addresses, separate them with commas.Fdefine-mail-alias
  11084. +Define NAME as a mail alias that translates to DEFINITION.
  11085. +This means that sending a message to NAME will actually send to DEFINITION.
  11086. +DEFINITION can be one or more mail addresses separated by commas.Fmakefile-mode
  11087. +Major mode for editing Makefiles.
  11088. +Calling this function invokes the function(s) "makefile-mode-hook" before
  11089. +doing anything else.
  11090. +
  11091. +\{makefile-mode-map}
  11092. +
  11093. +In the browser, use the following keys:
  11094. +
  11095. +\{makefile-browser-map}
  11096. +
  11097. +makefile-mode can be configured by modifying the following
  11098. +variables:
  11099. +
  11100. +makefile-mode-name:
  11101. +    The "pretty name" of makefile-mode, as it
  11102. +    appears in the modeline.
  11103. +
  11104. +makefile-browser-buffer-name:
  11105. +    Name of the macro- and target browser buffer.
  11106. +
  11107. +makefile-target-colon:
  11108. +    The string that gets appended to all target names
  11109. +    inserted by makefile-insert-target.
  11110. +    ":" or "::" are quite common values.
  11111. +
  11112. +makefile-macro-assign:
  11113. +   The string that gets appended to all macro names
  11114. +   inserted by makefile-insert-macro.
  11115. +   The normal value should be " = ", since this is what
  11116. +   standard make expects. However, newer makes such as dmake
  11117. +   allow a larger variety of different macro assignments, so you
  11118. +   might prefer to use " += " or " := " .
  11119. +
  11120. +makefile-tab-after-target-colon:
  11121. +   If you want a TAB (instead of a space) to be appended after the
  11122. +   target colon, then set this to a non-nil value.
  11123. +
  11124. +makefile-browser-leftmost-column:
  11125. +   Number of blanks to the left of the browser selection mark.
  11126. +
  11127. +makefile-browser-cursor-column:
  11128. +   Column in which the cursor is positioned when it moves
  11129. +   up or down in the browser.
  11130. +
  11131. +makefile-browser-selected-mark:
  11132. +   String used to mark selected entries in the browser.
  11133. +
  11134. +makefile-browser-unselected-mark:
  11135. +   String used to mark unselected entries in the browser.
  11136. +
  11137. +makefile-browser-auto-advance-after-selection-p:
  11138. +   If this variable is set to a non-nil value the cursor
  11139. +   will automagically advance to the next line after an item
  11140. +   has been selected in the browser.
  11141. +
  11142. +makefile-pickup-everything-picks-up-filenames-p:
  11143. +   If this variable is set to a non-nil value then
  11144. +   makefile-pickup-everything also picks up filenames as targets
  11145. +   (i.e. it calls makefile-find-filenames-as-targets), otherwise
  11146. +   filenames are omitted.
  11147. +
  11148. +makefile-cleanup-continuations-p:
  11149. +   If this variable is set to a non-nil value then makefile-mode
  11150. +   will assure that no line in the file ends with a backslash
  11151. +   (the continuation character) followed by any whitespace.
  11152. +   This is done by silently removing the trailing whitespace, leaving
  11153. +   the backslash itself intact.
  11154. +   IMPORTANT: Please note that enabling this option causes makefile-mode
  11155. +   to MODIFY A FILE WITHOUT YOUR CONFIRMATION when 'it seems necessary'.
  11156. +
  11157. +makefile-browser-hook:
  11158. +   A function or list of functions to be called just before the
  11159. +   browser is entered. This is executed in the makefile buffer.
  11160. +
  11161. +makefile-special-targets-list:
  11162. +   List of special targets. You will be offered to complete
  11163. +   on one of those in the minibuffer whenever you enter a "."
  11164. +   at the beginning of a line in makefile-mode.Fmake-command-summary
  11165. +Make a summary of current key bindings in the buffer *Summary*.
  11166. +Previous contents of that buffer are killed first.Fmanual-entry
  11167. +Get a Un*x manual page and put it in a buffer.
  11168. +This command is the top-level command in the man package.  It runs a Un*x
  11169. +command to retrieve and clean a manpage in the background and places the
  11170. +results in a Man mode (manpage browsing) buffer.  See variable
  11171. +`Man-notify' for what happens when the buffer is ready.
  11172. +Normally, if a buffer already exists for this man page, it will display
  11173. +immediately; either a prefix argument or a nil value to `Man-reuse-okay-p'
  11174. +overrides this and forces the man page to be regenerated.Fmap-y-or-n-p
  11175. +Ask a series of boolean questions.
  11176. +Takes args PROMPTER ACTOR LIST, and optional args HELP and ACTION-ALIST.
  11177. +
  11178. +LIST is a list of objects, or a function of no arguments to return the next
  11179. +object or nil.
  11180. +
  11181. +If PROMPTER is a string, the prompt is (format PROMPTER OBJECT).  If not
  11182. +a string, PROMPTER is a function of one arg (an object from LIST), which
  11183. +returns a string to be used as the prompt for that object.  If the return
  11184. +value is not a string, it is eval'd to get the answer; it may be nil to
  11185. +ignore the object, t to act on the object without asking the user, or a
  11186. +form to do a more complex prompt.
  11187. +
  11188. +ACTOR is a function of one arg (an object from LIST),
  11189. +which gets called with each object that the user answers `yes' for.
  11190. +
  11191. +If HELP is given, it is a list (OBJECT OBJECTS ACTION),
  11192. +where OBJECT is a string giving the singular noun for an elt of LIST;
  11193. +OBJECTS is the plural noun for elts of LIST, and ACTION is a transitive
  11194. +verb describing ACTOR.  The default is ("object" "objects" "act on").
  11195. +
  11196. +At the prompts, the user may enter y, Y, or SPC to act on that object;
  11197. +n, N, or DEL to skip that object; ! to act on all following objects;
  11198. +ESC or q to exit (skip all following objects); . (period) to act on the
  11199. +current object and then exit; or \[help-command] to get help.
  11200. +
  11201. +If ACTION-ALIST is given, it is an alist (KEY FUNCTION HELP) of extra keys
  11202. +that will be accepted.  KEY is a character; FUNCTION is a function of one
  11203. +arg (an object from LIST); HELP is a string.  When the user hits KEY,
  11204. +FUNCTION is called.  If it returns non-nil, the object is considered
  11205. +"acted upon", and the next object from LIST is processed.  If it returns
  11206. +nil, the prompt is repeated for the same object.
  11207. +
  11208. +Final optional argument NO-CURSOR-IN-ECHO-AREA non-nil says not to set
  11209. +`cursor-in-echo-area' while prompting.
  11210. +
  11211. +This function uses `query-replace-map' to define the standard responses,
  11212. +but not all of the responses which `query-replace' understands
  11213. +are meaningful here.
  11214. +
  11215. +Returns the number of actions taken.Fmh-smail
  11216. +Compose and send mail with the MH mail system.
  11217. +This function is an entry point to mh-e, the Emacs front end
  11218. +to the MH mail system.Fmh-smail-other-window
  11219. +Compose and send mail in other window with the MH mail system.
  11220. +This function is an entry point to mh-e, the Emacs front end
  11221. +to the MH mail system.Fmh-letter-mode
  11222. +Mode for composing letters in mh-e.\<mh-letter-mode-map>
  11223. +When you have finished composing, type \[mh-send-letter] to send the letter.
  11224. +
  11225. +\{mh-letter-mode-map}
  11226. +
  11227. +Variables controlling this mode (defaults in parentheses):
  11228. +
  11229. + mh-delete-yanked-msg-window (nil)
  11230. +    If non-nil, \[mh-yank-cur-msg] will delete any windows displaying
  11231. +    the yanked message.
  11232. +
  11233. + mh-yank-from-start-of-msg (t)
  11234. +    If non-nil, \[mh-yank-cur-msg] will include the entire message.
  11235. +    If `body', just yank the body (no header).
  11236. +    If nil, only the portion of the message following the point will be yanked.
  11237. +    If there is a region, this variable is ignored.
  11238. +
  11239. + mh-signature-file-name ("~/.signature")
  11240. +    File to be inserted into message by \[mh-insert-signature].
  11241. +
  11242. +Upon invoking mh-letter-mode, text-mode-hook and mh-letter-mode-hook are
  11243. +invoked with no args, if those values are non-nil.Fmh-rmail
  11244. +Inc(orporate) new mail with MH, or, with arg, scan an MH mail folder.
  11245. +This function is an entry point to mh-e, the Emacs front end
  11246. +to the MH mail system.Fconvert-mocklisp-buffer
  11247. +Convert buffer of Mocklisp code to real Lisp that GNU Emacs can run.Fmodula-2-mode
  11248. +This is a mode intended to support program development in Modula-2.
  11249. +All control constructs of Modula-2 can be reached by typing C-c
  11250. +followed by the first character of the construct.
  11251. +\<m2-mode-map>
  11252. +  \[m2-begin] begin         \[m2-case] case
  11253. +  \[m2-definition] definition    \[m2-else] else
  11254. +  \[m2-for] for           \[m2-header] header
  11255. +  \[m2-if] if            \[m2-module] module
  11256. +  \[m2-loop] loop          \[m2-or] or
  11257. +  \[m2-procedure] procedure     Control-c Control-w with
  11258. +  \[m2-record] record        \[m2-stdio] stdio
  11259. +  \[m2-type] type          \[m2-until] until
  11260. +  \[m2-var] var           \[m2-while] while
  11261. +  \[m2-export] export        \[m2-import] import
  11262. +  \[m2-begin-comment] begin-comment \[m2-end-comment] end-comment
  11263. +  \[suspend-emacs] suspend Emacs     \[m2-toggle] toggle
  11264. +  \[m2-compile] compile           \[m2-next-error] next-error
  11265. +  \[m2-link] link
  11266. +
  11267. +   `m2-indent' controls the number of spaces for each indentation.
  11268. +   `m2-compile-command' holds the command to compile a Modula-2 program.
  11269. +   `m2-link-command' holds the command to link a Modula-2 program.Fmpuz
  11270. +Multiplication puzzle with GNU Emacs.Fenable-command
  11271. +Allow COMMAND to be executed without special confirmation from now on.
  11272. +The user's .emacs file is altered so that this will apply
  11273. +to future sessions.Fdisable-command
  11274. +Require special confirmation to execute COMMAND from now on.
  11275. +The user's .emacs file is altered so that this will apply
  11276. +to future sessions.Fnroff-mode
  11277. +Major mode for editing text intended for nroff to format.
  11278. +\{nroff-mode-map}
  11279. +Turning on Nroff mode runs `text-mode-hook', then `nroff-mode-hook'.
  11280. +Also, try `nroff-electric-mode', for automatically inserting
  11281. +closing requests for requests that are used in matched pairs.Flist-options
  11282. +Display a list of Emacs user options, with values and documentation.Fedit-options
  11283. +Edit a list of Emacs user option values.
  11284. +Selects a buffer containing such a list,
  11285. +in which there are commands to set the option values.
  11286. +Type \[describe-mode] in that buffer for a list of commands.Foutline-mode
  11287. +Set major mode for editing outlines with selective display.
  11288. +Headings are lines which start with asterisks: one for major headings,
  11289. +two for subheadings, etc.  Lines not starting with asterisks are body lines. 
  11290. +
  11291. +Body text or subheadings under a heading can be made temporarily
  11292. +invisible, or visible again.  Invisible lines are attached to the end 
  11293. +of the heading, so they move with it, if the line is killed and yanked
  11294. +back.  A heading with text hidden under it is marked with an ellipsis (...).
  11295. +
  11296. +Commands:\<outline-mode-map>
  11297. +\[outline-next-visible-heading]   outline-next-visible-heading      move by visible headings
  11298. +\[outline-previous-visible-heading]   outline-previous-visible-heading
  11299. +\[outline-forward-same-level]   outline-forward-same-level        similar but skip subheadings
  11300. +\[outline-backward-same-level]   outline-backward-same-level
  11301. +\[outline-up-heading]   outline-up-heading            move from subheading to heading
  11302. +
  11303. +\[hide-body]    make all text invisible (not headings).
  11304. +\[show-all]    make everything in buffer visible.
  11305. +
  11306. +The remaining commands are used when point is on a heading line.
  11307. +They apply to some of the body or subheadings of that heading.
  11308. +\[hide-subtree]   hide-subtree    make body and subheadings invisible.
  11309. +\[show-subtree]   show-subtree    make body and subheadings visible.
  11310. +\[show-children]   show-children    make direct subheadings visible.
  11311. +         No effect on body, or subheadings 2 or more levels down.
  11312. +         With arg N, affects subheadings N levels down.
  11313. +\[hide-entry]       make immediately following body invisible.
  11314. +\[show-entry]       make it visible.
  11315. +\[hide-leaves]       make body under heading and under its subheadings invisible.
  11316. +             The subheadings remain visible.
  11317. +\[show-branches]  make all subheadings at all levels visible.
  11318. +
  11319. +The variable `outline-regexp' can be changed to control what is a heading.
  11320. +A line is a heading if `outline-regexp' matches something at the
  11321. +beginning of the line.  The longer the match, the deeper the level.
  11322. +
  11323. +Turning on outline mode calls the value of `text-mode-hook' and then of
  11324. +`outline-mode-hook', if they are non-nil.Foutline-minor-mode
  11325. +Toggle Outline minor mode.
  11326. +With arg, turn Outline minor mode on if arg is positive, off otherwise.
  11327. +See the command `outline-mode' for more information on this mode.Fpascal-mode
  11328. +Major mode for editing Pascal code. \<pascal-mode-map>
  11329. +TAB indents for Pascal code.  Delete converts tabs to spaces as it moves back.
  11330. +
  11331. +\[pascal-complete-word] completes the word around current point with respect to position in code
  11332. +\[pascal-show-completions] shows all possible completions at this point.
  11333. +
  11334. +Other useful functions are:
  11335. +
  11336. +\[pascal-mark-defun]    - Mark function.
  11337. +\[pascal-insert-block]    - insert begin ... end;
  11338. +\[pascal-star-comment]    - insert (* ... *)
  11339. +\[pascal-comment-area]    - Put marked area in a comment, fixing nested comments.
  11340. +\[pascal-uncomment-area]    - Uncomment an area commented with \[pascal-comment-area].
  11341. +\[pascal-beg-of-defun]    - Move to beginning of current function.
  11342. +\[pascal-end-of-defun]    - Move to end of current function.
  11343. +\[pascal-goto-defun]    - Goto function prompted for in the minibuffer.
  11344. +\[pascal-outline]    - Enter pascal-outline-mode (see also pascal-outline).
  11345. +
  11346. +Variables controlling indentation/edit style:
  11347. +
  11348. + pascal-indent-level      (default 3)
  11349. +    Indentation of Pascal statements with respect to containing block.
  11350. + pascal-case-indent       (default 2)
  11351. +    Indentation for case statements.
  11352. + pascal-auto-newline      (default nil)
  11353. +    Non-nil means automatically newline after simcolons and the punctation mark
  11354. +    after an end.
  11355. + pascal-tab-always-indent (defualt t)
  11356. +    Non-nil means TAB in Pascal mode should always reindent the current line,
  11357. +    regardless of where in the line point is when the TAB command is used.
  11358. + pascal-auto-endcomments  (default t)
  11359. +    Non-nil means a comment { ... } is set after the ends which ends cases and
  11360. +    functions. The name of the function or case will be set between the braces.
  11361. +
  11362. +See also the user variables pascal-type-keywords, pascal-start-keywords and
  11363. +pascal-separator-keywords.
  11364. +
  11365. +Turning on Pascal mode calls the value of the variable pascal-mode-hook with
  11366. +no args, if that value is non-nil.Fperl-mode
  11367. +Major mode for editing Perl code.
  11368. +Expression and list commands understand all Perl brackets.
  11369. +Tab indents for Perl code.
  11370. +Comments are delimited with # ... \n.
  11371. +Paragraphs are separated by blank lines only.
  11372. +Delete converts tabs to spaces as it moves back.
  11373. +\{perl-mode-map}
  11374. +Variables controlling indentation style:
  11375. + perl-tab-always-indent
  11376. +    Non-nil means TAB in Perl mode should always indent the current line,
  11377. +    regardless of where in the line point is when the TAB command is used.
  11378. + perl-tab-to-comment
  11379. +    Non-nil means that for lines which don't need indenting, TAB will
  11380. +    either delete an empty comment, indent an existing comment, move 
  11381. +    to end-of-line, or if at end-of-line already, create a new comment.
  11382. + perl-nochange
  11383. +    Lines starting with this regular expression are not auto-indented.
  11384. + perl-indent-level
  11385. +    Indentation of Perl statements within surrounding block.
  11386. +    The surrounding block's indentation is the indentation
  11387. +    of the line on which the open-brace appears.
  11388. + perl-continued-statement-offset
  11389. +    Extra indentation given to a substatement, such as the
  11390. +    then-clause of an if or body of a while.
  11391. + perl-continued-brace-offset
  11392. +    Extra indentation given to a brace that starts a substatement.
  11393. +    This is in addition to `perl-continued-statement-offset'.
  11394. + perl-brace-offset
  11395. +    Extra indentation for line if it starts with an open brace.
  11396. + perl-brace-imaginary-offset
  11397. +    An open brace following other text is treated as if it were
  11398. +    this far to the right of the start of its line.
  11399. + perl-label-offset
  11400. +    Extra indentation for line that is a label.
  11401. +
  11402. +Various indentation styles:       K&R  BSD  BLK  GNU  LW
  11403. +  perl-indent-level                5    8    0    2    4
  11404. +  perl-continued-statement-offset  5    8    4    2    4
  11405. +  perl-continued-brace-offset      0    0    0    0   -4
  11406. +  perl-brace-offset               -5   -8    0    0    0
  11407. +  perl-brace-imaginary-offset      0    0    4    0    0
  11408. +  perl-label-offset               -5   -8   -2   -2   -2
  11409. +
  11410. +Turning on Perl mode runs the normal hook `perl-mode-hook'.Fpicture-mode
  11411. +Switch to Picture mode, in which a quarter-plane screen model is used.
  11412. +Printing characters replace instead of inserting themselves with motion
  11413. +afterwards settable by these commands:
  11414. +  C-c <      Move left after insertion.
  11415. +  C-c >      Move right after insertion.
  11416. +  C-c ^      Move up after insertion.
  11417. +  C-c .      Move down after insertion.
  11418. +  C-c `      Move northwest (nw) after insertion.
  11419. +  C-c '      Move northeast (ne) after insertion.
  11420. +  C-c /      Move southwest (sw) after insertion.
  11421. +  C-c \   Move southeast (se) after insertion.
  11422. +The current direction is displayed in the mode line.  The initial
  11423. +direction is right.  Whitespace is inserted and tabs are changed to
  11424. +spaces when required by movement.  You can move around in the buffer
  11425. +with these commands:
  11426. +  \[picture-move-down]      Move vertically to SAME column in previous line.
  11427. +  \[picture-move-up]      Move vertically to SAME column in next line.
  11428. +  \[picture-end-of-line]      Move to column following last non-whitespace character.
  11429. +  \[picture-forward-column]      Move right inserting spaces if required.
  11430. +  \[picture-backward-column]      Move left changing tabs to spaces if required.
  11431. +  C-c C-f Move in direction of current picture motion.
  11432. +  C-c C-b Move in opposite direction of current picture motion.
  11433. +  Return  Move to beginning of next line.
  11434. +You can edit tabular text with these commands:
  11435. +  M-Tab      Move to column beneath (or at) next interesting character.
  11436. +        `Indents' relative to a previous line.
  11437. +  Tab      Move to next stop in tab stop list.
  11438. +  C-c Tab Set tab stops according to context of this line.
  11439. +        With ARG resets tab stops to default (global) value.
  11440. +        See also documentation of variable    picture-tab-chars
  11441. +        which defines "interesting character".  You can manually
  11442. +        change the tab stop list with command \[edit-tab-stops].
  11443. +You can manipulate text with these commands:
  11444. +  C-d      Clear (replace) ARG columns after point without moving.
  11445. +  C-c C-d Delete char at point - the command normally assigned to C-d.
  11446. +  \[picture-backward-clear-column]  Clear (replace) ARG columns before point, moving back over them.
  11447. +  \[picture-clear-line]      Clear ARG lines, advancing over them.     The cleared
  11448. +        text is saved in the kill ring.
  11449. +  \[picture-open-line]      Open blank line(s) beneath current line.
  11450. +You can manipulate rectangles with these commands:
  11451. +  C-c C-k Clear (or kill) a rectangle and save it.
  11452. +  C-c C-w Like C-c C-k except rectangle is saved in named register.
  11453. +  C-c C-y Overlay (or insert) currently saved rectangle at point.
  11454. +  C-c C-x Like C-c C-y except rectangle is taken from named register.
  11455. +  \[copy-rectangle-to-register]   Copies a rectangle to a register.
  11456. +  \[advertised-undo]   Can undo effects of rectangle overlay commands
  11457. +        commands if invoked soon enough.
  11458. +You can return to the previous mode with:
  11459. +  C-c C-c Which also strips trailing whitespace from every line.
  11460. +        Stripping is suppressed by supplying an argument.
  11461. +
  11462. +Entry to this mode calls the value of  picture-mode-hook  if non-nil.
  11463. +
  11464. +Note that Picture mode commands will work outside of Picture mode, but
  11465. +they are not defaultly assigned to keys.Fprolog-mode
  11466. +Major mode for editing Prolog code for Prologs.
  11467. +Blank lines and `%%...' separate paragraphs.  `%'s start comments.
  11468. +Commands:
  11469. +\{prolog-mode-map}
  11470. +Entry to this mode calls the value of `prolog-mode-hook'
  11471. +if that value is non-nil.Frun-prolog
  11472. +Run an inferior Prolog process, input and output via buffer *prolog*.Fremote-compile
  11473. +Compile the the current buffer's directory on HOST.  Log in as USER.
  11474. +See \[compile].Fdelete-rectangle
  11475. +Delete (don't save) text in rectangle with point and mark as corners.
  11476. +The same range of columns is deleted in each line starting with the line
  11477. +where the region begins and ending with the line where the region ends.Fdelete-extract-rectangle
  11478. +Delete contents of rectangle and return it as a list of strings.
  11479. +Arguments START and END are the corners of the rectangle.
  11480. +The value is list of strings, one for each line of the rectangle.Fextract-rectangle
  11481. +Return contents of rectangle with corners at START and END.
  11482. +Value is list of strings, one for each line of the rectangle.Fkill-rectangle
  11483. +Delete rectangle with corners at point and mark; save as last killed one.
  11484. +Calling from program, supply two args START and END, buffer positions.
  11485. +But in programs you might prefer to use `delete-extract-rectangle'.Fyank-rectangle
  11486. +Yank the last killed rectangle with upper left corner at point.Finsert-rectangle
  11487. +Insert text of RECTANGLE with upper left corner at point.
  11488. +RECTANGLE's first line is inserted at point, its second
  11489. +line is inserted at a point vertically under point, etc.
  11490. +RECTANGLE should be a list of strings.
  11491. +After this command, the mark is at the upper left corner
  11492. +and point is at the lower right corner.Fopen-rectangle
  11493. +Blank out rectangle with corners at point and mark, shifting text right.
  11494. +The text previously in the region is not overwritten by the blanks,
  11495. +but instead winds up to the right of the rectangle.Fstring-rectangle
  11496. +Insert STRING on each line of the region-rectangle, shifting text right.
  11497. +The left edge of the rectangle specifies the column for insertion.
  11498. +This command does not delete or overwrite any existing text.
  11499. +
  11500. +Called from a program, takes three args; START, END and STRING.Fclear-rectangle
  11501. +Blank out rectangle with corners at point and mark.
  11502. +The text previously in the region is overwritten by the blanks.
  11503. +When called from a program, requires two args which specify the corners.Freposition-window
  11504. +Make the current definition and/or comment visible.
  11505. +Further invocations move it to the top of the window or toggle the
  11506. +visibility of comments that precede it.
  11507. +  Point is left unchanged unless prefix ARG is supplied.
  11508. +  If the definition is fully onscreen, it is moved to the top of the
  11509. +window.  If it is partly offscreen, the window is scrolled to get the
  11510. +definition (or as much as will fit) onscreen, unless point is in a comment
  11511. +which is also partly offscreen, in which case the scrolling attempts to get
  11512. +as much of the comment onscreen as possible.
  11513. +  Initially `reposition-window' attempts to make both the definition and
  11514. +preceding comments visible.  Further invocations toggle the visibility of
  11515. +the comment lines.
  11516. +  If ARG is non-nil, point may move in order to make the whole defun
  11517. +visible (if only part could otherwise be made so), to make the defun line
  11518. +visible (if point is in code and it could not be made so, or if only
  11519. +comments, including the first comment line, are visible), or to make the
  11520. +first comment line visible (if point is in a comment).Fresume-suspend-hook
  11521. +Clear out the file used for transmitting args when Emacs resumes.Fring-p
  11522. +Returns t if X is a ring; nil otherwise.Fmake-ring
  11523. +Make a ring that can contain SIZE elements.Vrlogin-program
  11524. +*Name of program to invoke rloginVrlogin-explicit-args
  11525. +*List of arguments to pass to rlogin on the command line.Vrlogin-mode-hook
  11526. +*Hooks to run after setting current buffer to rlogin-mode.Vrlogin-process-connection-type
  11527. +*If non-`nil', use a pty for the local rlogin process.  
  11528. +If `nil', use a pipe (if pipes are supported on the local system).  
  11529. +
  11530. +Generally it is better not to waste ptys on systems which have a static
  11531. +number of them.  On the other hand, some implementations of `rlogin' assume
  11532. +a pty is being used, and errors will result from using a pipe instead.Vrlogin-initially-track-cwd
  11533. +*If non-`nil', do remote directory tracking via ange-ftp right away.
  11534. +If `nil', you can still enable directory tracking by doing 
  11535. +`M-x dirtrack-toggle'.Vrlogin-password-paranoia
  11536. +*If non-`nil', query user for a password in the minibuffer when a Password: prompt appears.
  11537. +It's also possible to selectively enter passwords without echoing them in
  11538. +the minibuffer using the command `rlogin-password' explicitly.Frlogin
  11539. +Open a network login connection to HOST via the `rlogin' program.
  11540. +Input is sent line-at-a-time to the remote connection.
  11541. +
  11542. +Communication with the remote host is recorded in a buffer *rlogin-HOST*,
  11543. +where HOST is the first word in the string ARGS.  If a prefix argument is
  11544. +given and the buffer *rlogin-HOST* already exists, a new buffer with a
  11545. +different connection will be made.
  11546. +
  11547. +The variable `rlogin-program' contains the name of the actual program to
  11548. +run.  It can be a relative or absolute path. 
  11549. +
  11550. +The variable `rlogin-explicit-args' is a list of arguments to give to
  11551. +the rlogin when starting.  They are added after any arguments given in ARGS.Vrmail-dont-reply-to-names
  11552. +*A regexp specifying names to prune of reply to messages.
  11553. +A value of nil means exclude your own name only.Vrmail-default-dont-reply-to-names
  11554. +A regular expression specifying part of the value of the default value of
  11555. +the variable `rmail-dont-reply-to-names', for when the user does not set
  11556. +`rmail-dont-reply-to-names' explicitly.  (The other part of the default
  11557. +value is the user's name.)
  11558. +It is useful to set this variable in the site customization file.Vrmail-ignored-headers
  11559. +*Regexp to match Header fields that Rmail should normally hide.Vrmail-highlighted-headers
  11560. +*Regexp to match Header fields that Rmail should normally highlight.
  11561. +A value of nil means don't highlight.
  11562. +See also `rmail-highlight-face'.Vrmail-highlight-face
  11563. +*Face used by Rmail for highlighting headers.Vrmail-delete-after-output
  11564. +*Non-nil means automatically delete a message that is copied to a file.Vrmail-primary-inbox-list
  11565. +*List of files which are inboxes for user's primary mail file `~/RMAIL'.
  11566. +`nil' means the default, which is ("/usr/spool/mail/$USER")
  11567. +(the name varies depending on the operating system,
  11568. +and the value of the environment variable MAIL overrides it).Vrmail-mail-new-frame
  11569. +*Non-nil means Rmail makes a new frame for composing outgoing mail.Vrmail-retry-setup-hook
  11570. +Hook that `rmail-retry-failure' uses in place of `mail-setup-hook'.Vrmail-secondary-file-directory
  11571. +*Directory for additional secondary Rmail files.Vrmail-secondary-file-regexp
  11572. +*Regexp for which files are secondary Rmail files.Frmail
  11573. +Read and edit incoming mail.
  11574. +Moves messages into file named by `rmail-file-name' (a babyl format file)
  11575. + and edits that file in RMAIL Mode.
  11576. +Type \[describe-mode] once editing that file, for a list of RMAIL commands.
  11577. +
  11578. +May be called with file name as argument; then performs rmail editing on
  11579. +that file, but does not copy any new mail into the file.
  11580. +Interactively, if you supply a prefix argument, then you
  11581. +have a chance to specify a file name with the minibuffer.
  11582. +
  11583. +If `rmail-display-summary' is non-nil, make a summary for this RMAIL file.Frmail-mode
  11584. +Rmail Mode is used by \<rmail-mode-map>\[rmail] for editing Rmail files.
  11585. +All normal editing commands are turned off.
  11586. +Instead, these commands are available:
  11587. +
  11588. +\[rmail-beginning-of-message]    Move point to front of this message (same as \[beginning-of-buffer]).
  11589. +\[scroll-up]    Scroll to next screen of this message.
  11590. +\[scroll-down]    Scroll to previous screen of this message.
  11591. +\[rmail-next-undeleted-message]    Move to Next non-deleted message.
  11592. +\[rmail-previous-undeleted-message]    Move to Previous non-deleted message.
  11593. +\[rmail-next-message]    Move to Next message whether deleted or not.
  11594. +\[rmail-previous-message]    Move to Previous message whether deleted or not.
  11595. +\[rmail-first-message]    Move to the first message in Rmail file.
  11596. +\[rmail-last-message]    Move to the last message in Rmail file.
  11597. +\[rmail-show-message]    Jump to message specified by numeric position in file.
  11598. +\[rmail-search]    Search for string and show message it is found in.
  11599. +\[rmail-delete-forward]    Delete this message, move to next nondeleted.
  11600. +\[rmail-delete-backward]    Delete this message, move to previous nondeleted.
  11601. +\[rmail-undelete-previous-message]    Undelete message.  Tries current message, then earlier messages
  11602. +    till a deleted message is found.
  11603. +\[rmail-edit-current-message]    Edit the current message.  \[rmail-cease-edit] to return to Rmail.
  11604. +\[rmail-expunge]    Expunge deleted messages.
  11605. +\[rmail-expunge-and-save]    Expunge and save the file.
  11606. +\[rmail-quit]       Quit Rmail: expunge, save, then switch to another buffer.
  11607. +\[save-buffer] Save without expunging.
  11608. +\[rmail-get-new-mail]    Move new mail from system spool directory into this file.
  11609. +\[rmail-mail]    Mail a message (same as \[mail-other-window]).
  11610. +\[rmail-continue]    Continue composing outgoing message started before.
  11611. +\[rmail-reply]    Reply to this message.  Like \[rmail-mail] but initializes some fields.
  11612. +\[rmail-retry-failure]    Send this message again.  Used on a mailer failure message.
  11613. +\[rmail-forward]    Forward this message to another user.
  11614. +\[rmail-output-to-rmail-file]       Output this message to an Rmail file (append it).
  11615. +\[rmail-output]    Output this message to a Unix-format mail file (append it).
  11616. +\[rmail-input]    Input Rmail file.  Run Rmail on that file.
  11617. +\[rmail-add-label]    Add label to message.  It will be displayed in the mode line.
  11618. +\[rmail-kill-label]    Kill label.  Remove a label from current message.
  11619. +\[rmail-next-labeled-message]   Move to Next message with specified label
  11620. +          (label defaults to last one specified).
  11621. +          Standard labels: filed, unseen, answered, forwarded, deleted.
  11622. +          Any other label is present only if you add it with \[rmail-add-label].
  11623. +\[rmail-previous-labeled-message]   Move to Previous message with specified label
  11624. +\[rmail-summary]    Show headers buffer, with a one line summary of each message.
  11625. +\[rmail-summary-by-labels]    Summarize only messages with particular label(s).
  11626. +\[rmail-summary-by-recipients]   Summarize only messages with particular recipient(s).
  11627. +\[rmail-summary-by-regexp]   Summarize only messages with particular regexp(s).
  11628. +\[rmail-summary-by-topic]   Summarize only messages with subject line regexp(s).
  11629. +\[rmail-toggle-header]    Toggle display of complete header.Frmail-input
  11630. +Run Rmail on file FILENAME.Frot13-other-window
  11631. +Display current buffer in rot 13 in another window.
  11632. +To terminate the rot13 display, delete that window.Ftoggle-rot13-mode
  11633. +Toggle the use of rot 13 encoding for the current window.Vresize-minibuffer-mode
  11634. +*If non-`nil', resize the minibuffer so its entire contents are visible.Vresize-minibuffer-window-max-height
  11635. +*Maximum size the minibuffer window is allowed to become.
  11636. +If less than 1 or not a number, the limit is the height of the frame in
  11637. +which the active minibuffer window resides.Vresize-minibuffer-window-exactly
  11638. +*Allow making minibuffer exactly the size to display all its contents.
  11639. +If `nil', the minibuffer window can temporarily increase in size but
  11640. +never get smaller while it is active.  Any other value allows exact
  11641. +resizing.Vresize-minibuffer-frame
  11642. +*Allow changing the frame height of minibuffer frames.
  11643. +If non-`nil' and the active minibuffer is the sole window in its frame,
  11644. +allow changing the frame height.Vresize-minibuffer-frame-max-height
  11645. +*Maximum size the minibuffer frame is allowed to become.
  11646. +If less than 1 or not a number, there is no limit.Vresize-minibuffer-frame-exactly
  11647. +*Allow making minibuffer frame exactly the size to display all its contents.
  11648. +If `nil', the minibuffer frame can temporarily increase in size but
  11649. +never get smaller while it is active.  Any other value allows exact
  11650. +resizing.Fresize-minibuffer-mode
  11651. +Enable or disable resize-minibuffer mode.
  11652. +A negative prefix argument disables this mode.  A positive argument or
  11653. +argument of 0 enables it.
  11654. +
  11655. +When this minor mode is enabled, the minibuffer is dynamically resized to
  11656. +contain the entire region of text put in it as you type.
  11657. +
  11658. +The variable `resize-minibuffer-mode' is set to t or nil depending on
  11659. +whether this mode is active or not.
  11660. +
  11661. +The maximum height to which the minibuffer can grow is controlled by the
  11662. +variable `resize-minibuffer-window-max-height'.
  11663. +
  11664. +The variable `resize-minibuffer-window-exactly' determines whether the
  11665. +minibuffer window should ever be shrunk to make it no larger than needed to
  11666. +display its contents.
  11667. +
  11668. +When using a window system, it is possible for a minibuffer to be the sole
  11669. +window in a frame.  Since that window is already its maximum size, the only
  11670. +way to make more text visible at once is to increase the size of the frame.
  11671. +The variable `resize-minibuffer-frame' controls whether this should be
  11672. +done.  The variables `resize-minibuffer-frame-max-height' and
  11673. +`resize-minibuffer-frame-exactly' are analogous to their window
  11674. +counterparts.Fscheme-mode
  11675. +Major mode for editing Scheme code.
  11676. +Editing commands are similar to those of lisp-mode.
  11677. +
  11678. +In addition, if an inferior Scheme process is running, some additional
  11679. +commands will be defined, for evaluating expressions and controlling
  11680. +the interpreter, and the state of the process will be displayed in the
  11681. +modeline of all Scheme buffers.  The names of commands that interact
  11682. +with the Scheme process start with "xscheme-".  For more information
  11683. +see the documentation for xscheme-interaction-mode.
  11684. +
  11685. +Commands:
  11686. +Delete converts tabs to spaces as it moves back.
  11687. +Blank lines separate paragraphs.  Semicolons start comments.
  11688. +\{scheme-mode-map}
  11689. +Entry to this mode calls the value of scheme-mode-hook
  11690. +if that value is non-nil.Fscribe-mode
  11691. +Major mode for editing files of Scribe (a text formatter) source.
  11692. +Scribe-mode is similar text-mode, with a few extra commands added.
  11693. +\{scribe-mode-map}
  11694. +
  11695. +Interesting variables:
  11696. +
  11697. +scribe-fancy-paragraphs
  11698. +  Non-nil makes Scribe mode use a different style of paragraph separation.
  11699. +
  11700. +scribe-electric-quote
  11701. +  Non-nil makes insert of double quote use `` or '' depending on context.
  11702. +
  11703. +scribe-electric-parenthesis
  11704. +  Non-nil makes an open-parenthesis char (one of `([<{')
  11705. +  automatically insert its close if typed after an @Command form.Vmail-self-blind
  11706. +Non-nil means insert BCC to self in messages to be sent.
  11707. +This is done when the message is initialized,
  11708. +so you can remove or alter the BCC field to override the default.Vmail-interactive
  11709. +Non-nil means when sending a message wait for and display errors.
  11710. +nil means let mailer mail back a message to report errors.Vmail-yank-ignored-headers
  11711. +Delete these headers from old message when it's inserted in a reply.Vsend-mail-function
  11712. +Function to call to send the current buffer as mail.
  11713. +The headers are be delimited by a line which is `mail-header-separator'.Vmail-header-separator
  11714. +*Line used to separate headers from text in messages being composed.Vmail-archive-file-name
  11715. +*Name of file to write all outgoing messages in, or nil for none.
  11716. +Do not use an rmail file here!  Instead, use its inbox file.Vmail-default-reply-to
  11717. +*Address to insert as default Reply-to field of outgoing messages.Vmail-alias-file
  11718. +*If non-nil, the name of a file to use instead of `/usr/lib/aliases'.
  11719. +This file defines aliases to be expanded by the mailer; this is a different
  11720. +feature from that of defining aliases in `.mailrc' to be expanded in Emacs.
  11721. +This variable has no effect unless your system uses sendmail as its mailer.Vmail-signature
  11722. +*Text inserted at end of mail buffer when a message is initialized.
  11723. +If t, it means to insert the contents of the file `~/.signature'.Fmail-mode
  11724. +Major mode for editing mail to be sent.
  11725. +Like Text Mode but with these additional commands:
  11726. +C-c C-s  mail-send (send the message)    C-c C-c  mail-send-and-exit
  11727. +C-c C-f  move to a header field (and create it if there isn't):
  11728. +     C-c C-f C-t  move to To:    C-c C-f C-s  move to Subj:
  11729. +     C-c C-f C-b  move to BCC:    C-c C-f C-c  move to CC:
  11730. +     C-c C-f C-f  move to FCC:
  11731. +C-c C-t  move to message text.
  11732. +C-c C-y  mail-yank-original (insert current message, in Rmail).
  11733. +C-c C-q  mail-fill-yanked-message (fill what was yanked).
  11734. +C-c C-v  mail-sent-via (add a sent-via field for each To or CC).Fmail
  11735. +Edit a message to be sent.  Prefix arg means resume editing (don't erase).
  11736. +When this function returns, the buffer `*mail*' is selected.
  11737. +The value is t if the message was newly initialized; otherwise, nil.
  11738. +
  11739. +By default, the signature file `~/.signature' is inserted at the end;
  11740. +see the variable `mail-signature'.
  11741. +
  11742. +\<mail-mode-map>
  11743. +While editing message, type \[mail-send-and-exit] to send the message and exit.
  11744. +
  11745. +Various special commands starting with C-c are available in sendmail mode
  11746. +to move to message header fields:
  11747. +\{mail-mode-map}
  11748. +
  11749. +If `mail-self-blind' is non-nil, a BCC to yourself is inserted
  11750. +when the message is initialized.
  11751. +
  11752. +If `mail-default-reply-to' is non-nil, it should be an address (a string);
  11753. +a Reply-to: field with that address is inserted.
  11754. +
  11755. +If `mail-archive-file-name' is non-nil, an FCC field with that file name
  11756. +is inserted.
  11757. +
  11758. +If `mail-setup-hook' is bound, its value is called with no arguments
  11759. +after the message is initialized.  It can add more default fields.
  11760. +
  11761. +When calling from a program, the second through fifth arguments
  11762. + TO, SUBJECT, IN-REPLY-TO and CC specify if non-nil
  11763. + the initial contents of those header fields.
  11764. + These arguments should not have final newlines.
  11765. +The sixth argument REPLYBUFFER is a buffer whose contents
  11766. + should be yanked if the user types C-c C-y.
  11767. +The seventh argument ACTIONS is a list of actions to take
  11768. + if/when the message is sent.  Each action looks like (FUNCTION . ARGS);
  11769. + when the message is sent, we apply FUNCTION to ARGS.
  11770. + This is how Rmail arranges to mark messages `answered'.Fmail-other-window
  11771. +Like `mail' command, but display mail buffer in another window.Fmail-other-frame
  11772. +Like `mail' command, but display mail buffer in another frame.Fserver-start
  11773. +Allow this Emacs process to be a server for client processes.
  11774. +This starts a server communications subprocess through which
  11775. +client "editors" can send your editing commands to this Emacs job.
  11776. +To use the server, set up the program `etc/emacsclient' in the
  11777. +Emacs distribution as your standard "editor".
  11778. +
  11779. +Prefix arg means just kill any existing server communications subprocess.Fsgml-mode
  11780. +Major mode for editing SGML.
  11781. +Makes > display the matching <.  Makes / display matching /.
  11782. +Use \[sgml-validate] to validate your document with an SGML parser.Vshell-prompt-pattern
  11783. +Regexp to match prompts in the inferior shell.
  11784. +Defaults to "^[^#$%>\n]*[#$%>] *", which works pretty well.
  11785. +This variable is used to initialise `comint-prompt-regexp' in the 
  11786. +shell buffer.
  11787. +
  11788. +The pattern should probably not match more than one line.  If it does,
  11789. +shell-mode may become confused trying to distinguish prompt from input
  11790. +on lines which don't start with a prompt.
  11791. +
  11792. +This is a fine thing to set in your `.emacs' file.Fshell
  11793. +Run an inferior shell, with I/O through buffer *shell*.
  11794. +If buffer exists but shell process is not running, make new shell.
  11795. +If buffer exists and shell process is running, just switch to buffer `*shell*'.
  11796. +Program used comes from variable `explicit-shell-file-name',
  11797. + or (if that is nil) from the ESHELL environment variable,
  11798. + or else from SHELL if there is no ESHELL.
  11799. +If a file `~/.emacs_SHELLNAME' exists, it is given as initial input
  11800. + (Note that this may lose due to a timing error if the shell
  11801. +  discards input when it starts up.)
  11802. +The buffer is put in Shell mode, giving commands for sending input
  11803. +and controlling the subjobs of the shell.  See `shell-mode'.
  11804. +See also the variable `shell-prompt-pattern'.
  11805. +
  11806. +The shell file name (sans directories) is used to make a symbol name
  11807. +such as `explicit-csh-args'.  If that symbol is a variable,
  11808. +its value is used as a list of arguments when invoking the shell.
  11809. +Otherwise, one argument `-i' is passed to the shell.
  11810. +
  11811. +(Type \[describe-mode] in the shell buffer for a list of commands.)Fdefine-skeleton
  11812. +Define a user-configurable COMMAND that enters a statement skeleton.
  11813. +DOCUMENTATION is that of the command, while the variable of the same name,
  11814. +which contains the definition, has a documentation to that effect.
  11815. +PROMPT and ELEMENT ... are as defined under `skeleton-insert'.Fskeleton-insert
  11816. +Insert the complex statement skeleton DEFINITION describes very concisely.
  11817. +If optional NO-NEWLINE is nil the skeleton will end on a line of its own.
  11818. +
  11819. +DEFINITION is made up as (PROMPT ELEMENT ...).  PROMPT may be nil if not
  11820. +needed, a prompt-string or an expression for complex read functions.
  11821. +
  11822. +If ELEMENT is a string or a character it gets inserted (see also
  11823. +`skeleton-transformation').  Other possibilities are:
  11824. +
  11825. +    \n    go to next line and align cursor
  11826. +    >    indent according to major mode
  11827. +    <    undent tab-width spaces but not beyond beginning of line
  11828. +    _    cursor after termination
  11829. +    &    skip next ELEMENT if previous didn't move point
  11830. +    |    skip next ELEMENT if previous moved point
  11831. +    -num    delete num preceding characters
  11832. +    resume:    skipped, continue here if quit is signaled
  11833. +    nil    skipped
  11834. +
  11835. +ELEMENT may itself be DEFINITION with a PROMPT.  The user is prompted
  11836. +repeatedly for different inputs.  The DEFINITION is processed as often
  11837. +as the user enters a non-empty string.  \[keyboard-quit] terminates
  11838. +skeleton insertion, but continues after `resume:' and positions at `_'
  11839. +if any.  If PROMPT in such a sub-definition contains a ".. %s .." it
  11840. +is replaced by `skeleton-subprompt'.
  11841. +
  11842. +Other lisp-expressions are evaluated and the value treated as above.
  11843. +The following local variables are available:
  11844. +
  11845. +    str    first time: read a string prompting with PROMPT and insert it
  11846. +                if PROMPT is not a string it is evaluated instead
  11847. +        then: insert previously read string once more
  11848. +    quit    non-nil when resume: section is entered by keyboard quit
  11849. +    v1, v2    local variables for memorising anything you wantFpair-insert-maybe
  11850. +Insert the character you type ARG times.
  11851. +
  11852. +With no ARG, if `pair' is non-nil, and if
  11853. +`pair-on-word' is non-nil or we are not before or inside a
  11854. +word, and if `pair-filter' returns nil, pairing is performed.
  11855. +
  11856. +If a match is found in `pair-alist', that is inserted, else
  11857. +the defaults are used.  These are (), [], {}, <> and `' for the
  11858. +symmetrical ones, and the same character twice for the others.Fdefine-skeleton
  11859. +Define a user-configurable COMMAND that enters a statement skeleton.
  11860. +DOCUMENTATION is that of the command, while the variable of the same name,
  11861. +which contains the definition, has a documentation to that effect.
  11862. +PROMPT and ELEMENT ... are as defined under `skeleton-insert'.Fskeleton-insert
  11863. +Insert the complex statement skeleton DEFINITION describes very concisely.
  11864. +If optional NO-NEWLINE is nil the skeleton will end on a line of its own.
  11865. +
  11866. +DEFINITION is made up as (PROMPT ELEMENT ...).  PROMPT may be nil if not
  11867. +needed, a prompt-string or an expression for complex read functions.
  11868. +
  11869. +If ELEMENT is a string or a character it gets inserted (see also
  11870. +`skeleton-transformation').  Other possibilities are:
  11871. +
  11872. +    \n    go to next line and align cursor
  11873. +    >    indent according to major mode
  11874. +    <    undent tab-width spaces but not beyond beginning of line
  11875. +    _    cursor after termination
  11876. +    &    skip next ELEMENT if previous didn't move point
  11877. +    |    skip next ELEMENT if previous moved point
  11878. +    -num    delete num preceding characters
  11879. +    resume:    skipped, continue here if quit is signaled
  11880. +    nil    skipped
  11881. +
  11882. +ELEMENT may itself be DEFINITION with a PROMPT.  The user is prompted
  11883. +repeatedly for different inputs.  The DEFINITION is processed as often
  11884. +as the user enters a non-empty string.  \[keyboard-quit] terminates
  11885. +skeleton insertion, but continues after `resume:' and positions at `_'
  11886. +if any.  If PROMPT in such a sub-definition contains a ".. %s .." it
  11887. +is replaced by `skeleton-subprompt'.
  11888. +
  11889. +Other lisp-expressions are evaluated and the value treated as above.
  11890. +The following local variables are available:
  11891. +
  11892. +    str    first time: read a string prompting with PROMPT and insert it
  11893. +                if PROMPT is not a string it is evaluated instead
  11894. +        then: insert previously read string once more
  11895. +    quit    non-nil when resume: section is entered by keyboard quit
  11896. +    v1, v2    local variables for memorising anything you wantFpair-insert-maybe
  11897. +Insert the character you type ARG times.
  11898. +
  11899. +With no ARG, if `pair' is non-nil, and if
  11900. +`pair-on-word' is non-nil or we are not before or inside a
  11901. +word, and if `pair-filter' returns nil, pairing is performed.
  11902. +
  11903. +If a match is found in `pair-alist', that is inserted, else
  11904. +the defaults are used.  These are (), [], {}, <> and `' for the
  11905. +symmetrical ones, and the same character twice for the others.Vcalendar-time-display-form
  11906. +*The pseudo-pattern that governs the way a time of day is formatted.
  11907. +
  11908. +A pseudo-pattern is a list of expressions that can involve the keywords
  11909. +`12-hours', `24-hours', and `minutes',  all numbers in string form,
  11910. +and `am-pm' and `time-zone',  both alphabetic strings.
  11911. +
  11912. +For example, the form
  11913. +
  11914. +  '(24-hours ":" minutes
  11915. +    (if time-zone " (") time-zone (if time-zone ")"))
  11916. +
  11917. +would give military-style times like `21:07 (UTC)'.Vcalendar-latitude
  11918. +*Latitude of `calendar-location-name' in degrees, + north, - south.
  11919. +For example, 40.7 for New York City.
  11920. +It may not be a good idea to set this in advance for your site;
  11921. +if there may be users running Emacs at your site
  11922. +who are physically located elsewhere, they would get the wrong
  11923. +value and might not know how to override it.Vcalendar-longitude
  11924. +*Longitude of `calendar-location-name' in degrees, + east, - west.
  11925. +For example, -74.0 for New York City.
  11926. +It may not be a good idea to set this in advance for your site;
  11927. +if there may be users running Emacs at your site
  11928. +who are physically located elsewhere, they would get the wrong
  11929. +value and might not know how to override it.Vcalendar-location-name
  11930. +*Expression evaluating to name of `calendar-longitude', calendar-latitude'.
  11931. +Default value is just the latitude, longitude pair.Fsunrise-sunset
  11932. +Local time of sunrise and sunset for today.  Accurate to +/- 2 minutes.
  11933. +If called with an optional prefix argument, prompt for date.
  11934. +
  11935. +If called with an optional double prefix argument, prompt for longitude,
  11936. +latitude, time zone, and date, and always use standard time.
  11937. +
  11938. +This function is suitable for execution in a .emacs file.Fsolar-equinoxes-solstices
  11939. +Date and time of equinoxes and solstices, if visible in the calendar window.
  11940. +Requires floating point.Fsort-subr
  11941. +General text sorting routine to divide buffer into records and sort them.
  11942. +Arguments are REVERSE NEXTRECFUN ENDRECFUN &optional STARTKEYFUN ENDKEYFUN.
  11943. +
  11944. +We divide the accessible portion of the buffer into disjoint pieces
  11945. +called sort records.  A portion of each sort record (perhaps all of
  11946. +it) is designated as the sort key.  The records are rearranged in the
  11947. +buffer in order by their sort keys.  The records may or may not be
  11948. +contiguous.
  11949. +
  11950. +Usually the records are rearranged in order of ascending sort key.
  11951. +If REVERSE is non-nil, they are rearranged in order of descending sort key.
  11952. +
  11953. +The next four arguments are functions to be called to move point
  11954. +across a sort record.  They will be called many times from within sort-subr.
  11955. +
  11956. +NEXTRECFUN is called with point at the end of the previous record.
  11957. +It moves point to the start of the next record.
  11958. +It should move point to the end of the buffer if there are no more records.
  11959. +The first record is assumed to start at the position of point when sort-subr
  11960. +is called.
  11961. +
  11962. +ENDRECFUN is called with point within the record.
  11963. +It should move point to the end of the record.
  11964. +
  11965. +STARTKEYFUN moves from the start of the record to the start of the key.
  11966. +It may return either a non-nil value to be used as the key, or
  11967. +else the key is the substring between the values of point after
  11968. +STARTKEYFUN and ENDKEYFUN are called.  If STARTKEYFUN is nil, the key
  11969. +starts at the beginning of the record.
  11970. +
  11971. +ENDKEYFUN moves from the start of the sort key to the end of the sort key.
  11972. +ENDKEYFUN may be nil if STARTKEYFUN returns a value or if it would be the
  11973. +same as ENDRECFUN.Fsort-lines
  11974. +Sort lines in region alphabetically; argument means descending order.
  11975. +Called from a program, there are three arguments:
  11976. +REVERSE (non-nil means reverse order), BEG and END (region to sort).Fsort-paragraphs
  11977. +Sort paragraphs in region alphabetically; argument means descending order.
  11978. +Called from a program, there are three arguments:
  11979. +REVERSE (non-nil means reverse order), BEG and END (region to sort).Fsort-pages
  11980. +Sort pages in region alphabetically; argument means descending order.
  11981. +Called from a program, there are three arguments:
  11982. +REVERSE (non-nil means reverse order), BEG and END (region to sort).Fsort-numeric-fields
  11983. +Sort lines in region numerically by the ARGth field of each line.
  11984. +Fields are separated by whitespace and numbered from 1 up.
  11985. +Specified field must contain a number in each line of the region.
  11986. +With a negative arg, sorts by the ARGth field counted from the right.
  11987. +Called from a program, there are three arguments:
  11988. +FIELD, BEG and END.  BEG and END specify region to sort.Fsort-fields
  11989. +Sort lines in region lexicographically by the ARGth field of each line.
  11990. +Fields are separated by whitespace and numbered from 1 up.
  11991. +With a negative arg, sorts by the ARGth field counted from the right.
  11992. +Called from a program, there are three arguments:
  11993. +FIELD, BEG and END.  BEG and END specify region to sort.Fsort-regexp-fields
  11994. +Sort the region lexicographically as specified by RECORD-REGEXP and KEY.
  11995. +RECORD-REGEXP specifies the textual units which should be sorted.
  11996. +  For example, to sort lines RECORD-REGEXP would be "^.*$"
  11997. +KEY specifies the part of each record (ie each match for RECORD-REGEXP)
  11998. +  is to be used for sorting.
  11999. +  If it is "\digit" then the digit'th "\(...\)" match field from
  12000. +  RECORD-REGEXP is used.
  12001. +  If it is "\&" then the whole record is used.
  12002. +  Otherwise, it is a regular-expression for which to search within the record.
  12003. +If a match for KEY is not found within a record then that record is ignored.
  12004. +
  12005. +With a negative prefix arg sorts in reverse order.
  12006. +
  12007. +For example: to sort lines in the region by the first word on each line
  12008. + starting with the letter "f",
  12009. + RECORD-REGEXP would be "^.*$" and KEY would be "\=\<f\w*\>"Fsort-columns
  12010. +Sort lines in region alphabetically by a certain range of columns.
  12011. +For the purpose of this command, the region includes
  12012. +the entire line that point is in and the entire line the mark is in.
  12013. +The column positions of point and mark bound the range of columns to sort on.
  12014. +A prefix argument means sort into reverse order.
  12015. +
  12016. +Note that `sort-columns' rejects text that contains tabs,
  12017. +because tabs could be split across the specified columns
  12018. +and it doesn't know how to handle that.  Also, when possible,
  12019. +it uses the `sort' utility program, which doesn't understand tabs.
  12020. +Use \[untabify] to convert tabs to spaces before sorting.Freverse-region
  12021. +Reverse the order of lines in a region.
  12022. +From a program takes two point or marker arguments, BEG and END.Fspell-buffer
  12023. +Check spelling of every word in the buffer.
  12024. +For each incorrect word, you are asked for the correct spelling
  12025. +and then put into a query-replace to fix some or all occurrences.
  12026. +If you do not want to change a word, just give the same word
  12027. +as its "correct" spelling; then the query replace is skipped.Fspell-word
  12028. +Check spelling of word at or before point.
  12029. +If it is not correct, ask user for the correct spelling
  12030. +and `query-replace' the entire buffer to substitute it.Fspell-region
  12031. +Like `spell-buffer' but applies only to region.
  12032. +Used in a program, applies from START to END.
  12033. +DESCRIPTION is an optional string naming the unit being checked:
  12034. +for example, "word".Fspell-string
  12035. +Check spelling of string supplied as argument.Fspook
  12036. +Adds that special touch of class to your outgoing mail.Fsnarf-spooks
  12037. +Return a vector containing the lines from `spook-phrases-file'.Fsc-cite-original
  12038. +Workhorse citing function which performs the initial citation.
  12039. +This is callable from the various mail and news readers' reply
  12040. +function according to the agreed upon standard.  See `\[sc-describe]'
  12041. +for more details.  `sc-cite-original' does not do any yanking of the
  12042. +original message but it does require a few things:
  12043. +
  12044. +     1) The reply buffer is the current buffer.
  12045. +
  12046. +     2) The original message has been yanked and inserted into the
  12047. +        reply buffer.
  12048. +
  12049. +     3) Verbose mail headers from the original message have been
  12050. +        inserted into the reply buffer directly before the text of the
  12051. +        original message.
  12052. +
  12053. +     4) Point is at the beginning of the verbose headers.
  12054. +
  12055. +     5) Mark is at the end of the body of text to be cited.
  12056. +
  12057. +For Emacs 19's, the region need not be active (and typically isn't
  12058. +when this function is called.  Also, the hook `sc-pre-hook' is run
  12059. +before, and `sc-post-hook' is run after the guts of this function.Funtabify
  12060. +Convert all tabs in region to multiple spaces, preserving columns.
  12061. +Called non-interactively, the region is specified by arguments
  12062. +START and END, rather than by the position of point and mark.
  12063. +The variable `tab-width' controls the spacing of tab stops.Ftabify
  12064. +Convert multiple spaces in region to tabs when possible.
  12065. +A group of spaces is partially replaced by tabs
  12066. +when this can be done without changing the column they end at.
  12067. +Called non-interactively, the region is specified by arguments
  12068. +START and END, rather than by the position of point and mark.
  12069. +The variable `tab-width' controls the spacing of tab stops.Ftar-mode
  12070. +Major mode for viewing a tar file as a dired-like listing of its contents.
  12071. +You can move around using the usual cursor motion commands. 
  12072. +Letters no longer insert themselves.
  12073. +Type `e' to pull a file out of the tar file and into its own buffer;
  12074. +or click mouse-2 on the file's line in the Tar mode buffer.
  12075. +Type `c' to copy an entry from the tar file into another file on disk.
  12076. +
  12077. +If you edit a sub-file of this archive (as with the `e' command) and 
  12078. +save it with Control-x Control-s, the contents of that buffer will be 
  12079. +saved back into the tar-file buffer; in this way you can edit a file 
  12080. +inside of a tar archive without extracting it and re-archiving it.
  12081. +
  12082. +See also: variables `tar-update-datestamp' and `tar-anal-blocksize'.
  12083. +\{tar-mode-map}Ftcl-mode
  12084. +Major mode for editing tcl scripts.
  12085. +The following keys are bound:
  12086. +\{tcl-mode-map}
  12087. +Ftelnet
  12088. +Open a network login connection to host named HOST (a string).
  12089. +Communication with HOST is recorded in a buffer *HOST-telnet*.
  12090. +Normally input is edited in Emacs and sent a line at a time.Frsh
  12091. +Open a network login connection to host named HOST (a string).
  12092. +Communication with HOST is recorded in a buffer *HOST-rsh*.
  12093. +Normally input is edited in Emacs and sent a line at a time.Fterminal-emulator
  12094. +Under a display-terminal emulator in BUFFER, run PROGRAM on arguments ARGS.
  12095. +ARGS is a list of argument-strings.  Remaining arguments are WIDTH and HEIGHT.
  12096. +BUFFER's contents are made an image of the display generated by that program,
  12097. +and any input typed when BUFFER is the current Emacs buffer is sent to that
  12098. +program an keyboard input.
  12099. +
  12100. +Interactively, BUFFER defaults to "*terminal*" and PROGRAM and ARGS
  12101. +are parsed from an input-string using your usual shell.
  12102. +WIDTH and HEIGHT are determined from the size of the current window
  12103. +-- WIDTH will be one less than the window's width, HEIGHT will be its height.
  12104. +
  12105. +To switch buffers and leave the emulator, or to give commands
  12106. +to the emulator itself (as opposed to the program running under it),
  12107. +type Control-^.  The following character is an emulator command.
  12108. +Type Control-^ twice to send it to the subprogram.
  12109. +This escape character may be changed using the variable `terminal-escape-char'.
  12110. +
  12111. +`Meta' characters may not currently be sent through the terminal emulator.
  12112. +
  12113. +Here is a list of some of the variables which control the behaviour
  12114. +of the emulator -- see their documentation for more information:
  12115. +terminal-escape-char, terminal-scrolling, terminal-more-processing,
  12116. +terminal-redisplay-interval.
  12117. +
  12118. +This function calls the value of terminal-mode-hook if that exists
  12119. +and is non-nil after the terminal buffer has been set up and the
  12120. +subprocess started.
  12121. +
  12122. +Presently with `termcap' only; if somebody sends us code to make this
  12123. +work with `terminfo' we will try to use it.Vtex-shell-file-name
  12124. +*If non-nil, the shell file name to run in the subshell used to run TeX.Vtex-directory
  12125. +*Directory in which temporary files are left.
  12126. +You can make this `/tmp' if your TEXINPUTS has no relative directories in it
  12127. +and you don't try to apply \[tex-region] or \[tex-buffer] when there are
  12128. +`\input' commands with relative directories.Vtex-offer-save
  12129. +*If non-nil, ask about saving modified buffers before \[tex-file] is run.Vtex-run-command
  12130. +*Command used to run TeX subjob.
  12131. +If this string contains an asterisk (`*'), that is replaced by the file name;
  12132. +otherwise, the file name, preceded by blank, is added at the end.Vlatex-run-command
  12133. +*Command used to run LaTeX subjob.
  12134. +If this string contains an asterisk (`*'), that is replaced by the file name;
  12135. +otherwise, the file name, preceded by blank, is added at the end.Vlatex-block-names
  12136. +*User defined LaTeX block names.
  12137. +Combined with `standard-latex-block-names' for minibuffer completion.Vslitex-run-command
  12138. +*Command used to run SliTeX subjob.
  12139. +If this string contains an asterisk (`*'), that is replaced by the file name;
  12140. +otherwise, the file name, preceded by blank, is added at the end.Vtex-bibtex-command
  12141. +*Command used by `tex-bibtex-file' to gather bibliographic data.
  12142. +If this string contains an asterisk (`*'), that is replaced by the file name;
  12143. +otherwise, the file name, preceded by blank, is added at the end.Vtex-dvi-print-command
  12144. +*Command used by \[tex-print] to print a .dvi file.
  12145. +If this string contains an asterisk (`*'), that is replaced by the file name;
  12146. +otherwise, the file name, preceded by blank, is added at the end.Vtex-alt-dvi-print-command
  12147. +*Command used by \[tex-print] with a prefix arg to print a .dvi file.
  12148. +If this string contains an asterisk (`*'), that is replaced by the file name;
  12149. +otherwise, the file name, preceded by blank, is added at the end.
  12150. +
  12151. +If two printers are not enough of a choice, you can set the variable
  12152. +`tex-alt-dvi-print-command' to an expression that asks what you want;
  12153. +for example,
  12154. +
  12155. +    (setq tex-alt-dvi-print-command
  12156. +         '(format "lpr -P%s" (read-string "Use printer: ")))
  12157. +
  12158. +would tell \[tex-print] with a prefix argument to ask you which printer to
  12159. +use.Vtex-dvi-view-command
  12160. +*Command used by \[tex-view] to display a `.dvi' file.
  12161. +If this string contains an asterisk (`*'), that is replaced by the file name;
  12162. +otherwise, the file name, preceded by blank, is added at the end.
  12163. +
  12164. +This can be set conditionally so that the previewer used is suitable for the
  12165. +window system being used.  For example,
  12166. +
  12167. +    (setq tex-dvi-view-command
  12168. +          (if (eq window-system 'x) "xdvi" "dvi2tty * | cat -s"))
  12169. +
  12170. +would tell \[tex-view] to use xdvi under X windows and to use dvi2tty
  12171. +otherwise.Vtex-show-queue-command
  12172. +*Command used by \[tex-show-print-queue] to show the print queue.
  12173. +Should show the queue(s) that \[tex-print] puts jobs on.Vtex-default-mode
  12174. +*Mode to enter for a new file that might be either TeX or LaTeX.
  12175. +This variable is used when it can't be determined whether the file
  12176. +is plain TeX or LaTeX or what because the file contains no commands.
  12177. +Normally set to either `plain-tex-mode' or `latex-mode'.Vtex-open-quote
  12178. +*String inserted by typing \[tex-insert-quote] to open a quotation.Vtex-close-quote
  12179. +*String inserted by typing \[tex-insert-quote] to close a quotation.Ftex-mode
  12180. +Major mode for editing files of input for TeX, LaTeX, or SliTeX.
  12181. +Tries to determine (by looking at the beginning of the file) whether
  12182. +this file is for plain TeX, LaTeX, or SliTeX and calls `plain-tex-mode',
  12183. +`latex-mode', or `slitex-mode', respectively.  If it cannot be determined,
  12184. +such as if there are no commands in the file, the value of `tex-default-mode'
  12185. +says which mode to use.Fplain-tex-mode
  12186. +Major mode for editing files of input for plain TeX.
  12187. +Makes $ and } display the characters they match.
  12188. +Makes " insert `` when it seems to be the beginning of a quotation,
  12189. +and '' when it appears to be the end; it inserts " only after a \.
  12190. +
  12191. +Use \[tex-region] to run TeX on the current region, plus a "header"
  12192. +copied from the top of the file (containing macro definitions, etc.),
  12193. +running TeX under a special subshell.  \[tex-buffer] does the whole buffer.
  12194. +\[tex-file] saves the buffer and then processes the file.
  12195. +\[tex-print] prints the .dvi file made by any of these.
  12196. +\[tex-view] previews the .dvi file made by any of these.
  12197. +\[tex-bibtex-file] runs bibtex on the file of the current buffer.
  12198. +
  12199. +Use \[validate-tex-buffer] to check buffer for paragraphs containing
  12200. +mismatched $'s or braces.
  12201. +
  12202. +Special commands:
  12203. +\{tex-mode-map}
  12204. +
  12205. +Mode variables:
  12206. +tex-run-command
  12207. +    Command string used by \[tex-region] or \[tex-buffer].
  12208. +tex-directory
  12209. +    Directory in which to create temporary files for TeX jobs
  12210. +    run by \[tex-region] or \[tex-buffer].
  12211. +tex-dvi-print-command
  12212. +    Command string used by \[tex-print] to print a .dvi file.
  12213. +tex-alt-dvi-print-command
  12214. +    Alternative command string used by \[tex-print] (when given a prefix
  12215. +    argument) to print a .dvi file.
  12216. +tex-dvi-view-command
  12217. +    Command string used by \[tex-view] to preview a .dvi file.
  12218. +tex-show-queue-command
  12219. +    Command string used by \[tex-show-print-queue] to show the print
  12220. +    queue that \[tex-print] put your job on.
  12221. +
  12222. +Entering Plain-tex mode runs the hook `text-mode-hook', then the hook
  12223. +`tex-mode-hook', and finally the hook `plain-tex-mode-hook'.  When the
  12224. +special subshell is initiated, the hook `tex-shell-hook' is run.Flatex-mode
  12225. +Major mode for editing files of input for LaTeX.
  12226. +Makes $ and } display the characters they match.
  12227. +Makes " insert `` when it seems to be the beginning of a quotation,
  12228. +and '' when it appears to be the end; it inserts " only after a \.
  12229. +
  12230. +Use \[tex-region] to run LaTeX on the current region, plus the preamble
  12231. +copied from the top of the file (containing \documentstyle, etc.),
  12232. +running LaTeX under a special subshell.  \[tex-buffer] does the whole buffer.
  12233. +\[tex-file] saves the buffer and then processes the file.
  12234. +\[tex-print] prints the .dvi file made by any of these.
  12235. +\[tex-view] previews the .dvi file made by any of these.
  12236. +\[tex-bibtex-file] runs bibtex on the file of the current buffer.
  12237. +
  12238. +Use \[validate-tex-buffer] to check buffer for paragraphs containing
  12239. +mismatched $'s or braces.
  12240. +
  12241. +Special commands:
  12242. +\{tex-mode-map}
  12243. +
  12244. +Mode variables:
  12245. +latex-run-command
  12246. +    Command string used by \[tex-region] or \[tex-buffer].
  12247. +tex-directory
  12248. +    Directory in which to create temporary files for LaTeX jobs
  12249. +    run by \[tex-region] or \[tex-buffer].
  12250. +tex-dvi-print-command
  12251. +    Command string used by \[tex-print] to print a .dvi file.
  12252. +tex-alt-dvi-print-command
  12253. +    Alternative command string used by \[tex-print] (when given a prefix
  12254. +    argument) to print a .dvi file.
  12255. +tex-dvi-view-command
  12256. +    Command string used by \[tex-view] to preview a .dvi file.
  12257. +tex-show-queue-command
  12258. +    Command string used by \[tex-show-print-queue] to show the print
  12259. +    queue that \[tex-print] put your job on.
  12260. +
  12261. +Entering Latex mode runs the hook `text-mode-hook', then 
  12262. +`tex-mode-hook', and finally `latex-mode-hook'.  When the special
  12263. +subshell is initiated, `tex-shell-hook' is run.Fslitex-mode
  12264. +Major mode for editing files of input for SliTeX.
  12265. +Makes $ and } display the characters they match.
  12266. +Makes " insert `` when it seems to be the beginning of a quotation,
  12267. +and '' when it appears to be the end; it inserts " only after a \.
  12268. +
  12269. +Use \[tex-region] to run SliTeX on the current region, plus the preamble
  12270. +copied from the top of the file (containing \documentstyle, etc.),
  12271. +running SliTeX under a special subshell.  \[tex-buffer] does the whole buffer.
  12272. +\[tex-file] saves the buffer and then processes the file.
  12273. +\[tex-print] prints the .dvi file made by any of these.
  12274. +\[tex-view] previews the .dvi file made by any of these.
  12275. +\[tex-bibtex-file] runs bibtex on the file of the current buffer.
  12276. +
  12277. +Use \[validate-tex-buffer] to check buffer for paragraphs containing
  12278. +mismatched $'s or braces.
  12279. +
  12280. +Special commands:
  12281. +\{tex-mode-map}
  12282. +
  12283. +Mode variables:
  12284. +slitex-run-command
  12285. +    Command string used by \[tex-region] or \[tex-buffer].
  12286. +tex-directory
  12287. +    Directory in which to create temporary files for SliTeX jobs
  12288. +    run by \[tex-region] or \[tex-buffer].
  12289. +tex-dvi-print-command
  12290. +    Command string used by \[tex-print] to print a .dvi file.
  12291. +tex-alt-dvi-print-command
  12292. +    Alternative command string used by \[tex-print] (when given a prefix
  12293. +    argument) to print a .dvi file.
  12294. +tex-dvi-view-command
  12295. +    Command string used by \[tex-view] to preview a .dvi file.
  12296. +tex-show-queue-command
  12297. +    Command string used by \[tex-show-print-queue] to show the print
  12298. +    queue that \[tex-print] put your job on.
  12299. +
  12300. +Entering SliTeX mode runs the hook `text-mode-hook', then the hook
  12301. +`tex-mode-hook', then the hook `latex-mode-hook', and finally the hook
  12302. +`slitex-mode-hook'.  When the special subshell is initiated, the hook
  12303. +`tex-shell-hook' is run.Ftexinfo-format-buffer
  12304. +Process the current buffer as texinfo code, into an Info file.
  12305. +The Info file output is generated in a buffer visiting the Info file
  12306. +names specified in the @setfilename command.
  12307. +
  12308. +Non-nil argument (prefix, if interactive) means don't make tag table
  12309. +and don't split the file if large.  You can use Info-tagify and
  12310. +Info-split to do these manually.Ftexinfo-format-region
  12311. +Convert the current region of the Texinfo file to Info format.
  12312. +This lets you see what that part of the file will look like in Info.
  12313. +The command is bound to \[texinfo-format-region].  The text that is
  12314. +converted to Info is stored in a temporary buffer.Ftexinfo-mode
  12315. +Major mode for editing Texinfo files.
  12316. +
  12317. +  It has these extra commands:
  12318. +\{texinfo-mode-map}
  12319. +
  12320. +  These are files that are used as input for TeX to make printed manuals
  12321. +and also to be turned into Info files with \[makeinfo-buffer] or
  12322. +the `makeinfo' program.  These files must be written in a very restricted and
  12323. +modified version of TeX input format.
  12324. +
  12325. +  Editing commands are like text-mode except that the syntax table is
  12326. +set up so expression commands skip Texinfo bracket groups.  To see
  12327. +what the Info version of a region of the Texinfo file will look like,
  12328. +use \[makeinfo-region], which runs `makeinfo' on the current region.
  12329. +
  12330. +  You can show the structure of a Texinfo file with \[texinfo-show-structure].
  12331. +This command shows the structure of a Texinfo file by listing the
  12332. +lines with the @-sign commands for @chapter, @section, and the like.
  12333. +These lines are displayed in another window called the *Occur* window.
  12334. +In that window, you can position the cursor over one of the lines and
  12335. +use \[occur-mode-goto-occurrence], to jump to the corresponding spot
  12336. +in the Texinfo file.
  12337. +
  12338. +  In addition, Texinfo mode provides commands that insert various
  12339. +frequently used @-sign commands into the buffer.  You can use these
  12340. +commands to save keystrokes.  And you can insert balanced braces with
  12341. +\[texinfo-insert-braces] and later use the command \[up-list] to
  12342. +move forward past the closing brace.
  12343. +
  12344. +Also, Texinfo mode provides functions for automatically creating or
  12345. +updating menus and node pointers.  These functions
  12346. +
  12347. +  * insert the `Next', `Previous' and `Up' pointers of a node,
  12348. +  * insert or update the menu for a section, and
  12349. +  * create a master menu for a Texinfo source file.
  12350. +
  12351. +Here are the functions:
  12352. +
  12353. +    texinfo-update-node                \[texinfo-update-node]
  12354. +    texinfo-every-node-update          \[texinfo-every-node-update]
  12355. +    texinfo-sequential-node-update 
  12356. +
  12357. +    texinfo-make-menu                  \[texinfo-make-menu]
  12358. +    texinfo-all-menus-update           \[texinfo-all-menus-update]
  12359. +    texinfo-master-menu
  12360. +
  12361. +    texinfo-indent-menu-description (column &optional region-p)
  12362. +
  12363. +The `texinfo-column-for-description' variable specifies the column to
  12364. +which menu descriptions are indented. 
  12365. +
  12366. +Passed an argument (a prefix argument, if interactive), the
  12367. +`texinfo-update-node' and `texinfo-make-menu' functions do their jobs
  12368. +in the region.
  12369. +
  12370. +To use the updating commands, you must structure your Texinfo file
  12371. +hierarchically, such that each `@node' line, with the exception of the
  12372. +Top node, is accompanied by some kind of section line, such as an
  12373. +`@chapter' or `@section' line.
  12374. +
  12375. +If the file has a `top' node, it must be called `top' or `Top' and
  12376. +be the first node in the file.
  12377. +
  12378. +Entering Texinfo mode calls the value of text-mode-hook, and then the
  12379. +value of texinfo-mode-hook.Ftexinfo-update-node
  12380. +Without any prefix argument, update the node in which point is located.
  12381. +Non-nil argument (prefix, if interactive) means update the nodes in the
  12382. +marked region.
  12383. +
  12384. +The functions for creating or updating nodes and menus, and their
  12385. +keybindings, are:
  12386. +
  12387. +    texinfo-update-node (&optional region-p)    \[texinfo-update-node]
  12388. +    texinfo-every-node-update ()                \[texinfo-every-node-update]
  12389. +    texinfo-sequential-node-update (&optional region-p)
  12390. +
  12391. +    texinfo-make-menu (&optional region-p)      \[texinfo-make-menu]
  12392. +    texinfo-all-menus-update ()                 \[texinfo-all-menus-update]
  12393. +    texinfo-master-menu ()
  12394. +
  12395. +    texinfo-indent-menu-description (column &optional region-p)
  12396. +
  12397. +The `texinfo-column-for-description' variable specifies the column to
  12398. +which menu descriptions are indented. Its default value is 32.Ftexinfo-every-node-update
  12399. +Update every node in a Texinfo file.Ftexinfo-sequential-node-update
  12400. +Update one node (or many) in a Texinfo file with sequential pointers.
  12401. +
  12402. +This function causes the `Next' or `Previous' pointer to point to the
  12403. +immediately preceding or following node, even if it is at a higher or
  12404. +lower hierarchical level in the document.  Continually pressing `n' or
  12405. +`p' takes you straight through the file.
  12406. +
  12407. +Without any prefix argument, update the node in which point is located.
  12408. +Non-nil argument (prefix, if interactive) means update the nodes in the
  12409. +marked region.
  12410. +
  12411. +This command makes it awkward to navigate among sections and
  12412. +subsections; it should be used only for those documents that are meant
  12413. +to be read like a novel rather than a reference, and for which the
  12414. +Info `g*' command is inadequate.Fforward-thing
  12415. +Move forward to the end of the next THING.Fbounds-of-thing-at-point
  12416. +Determine the start and end buffer locations for the THING at point,
  12417. +where THING is an entity for which there is a either a corresponding
  12418. +forward-THING operation, or corresponding beginning-of-THING and
  12419. +end-of-THING operations, eg. 'word, 'sentence, 'defun.
  12420. +  Return a cons cell '(start . end) giving the start and end positions.Fthing-at-point
  12421. +Return the THING at point, where THING is an entity defined by
  12422. +bounds-of-thing-at-point.Vdisplay-time-day-and-date
  12423. +*Non-nil means \[display-time] should display day and date as well as time.Fdisplay-time
  12424. +Display current time, load level, and mail flag in mode line of each buffer.
  12425. +Updates automatically every minute.
  12426. +If `display-time-day-and-date' is non-nil, the current day and date
  12427. +are displayed as well.
  12428. +After each update, `display-time-hook' is run with `run-hooks'.Ftime-stamp
  12429. +Update the time stamp string in the buffer.
  12430. +If you put a time stamp template anywhere in the first 8 lines of a file,
  12431. +it can be updated every time you save the file.  See the top of
  12432. +`time-stamp.el' for a sample.  The template looks like one of the following:
  12433. +    Time-stamp: <>
  12434. +    Time-stamp: " "
  12435. +The time stamp is written between the brackets or quotes, resulting in
  12436. +    Time-stamp: <93/06/18 10:26:51 gildea>
  12437. +Only does its thing if the variable  time-stamp-active  is non-nil.
  12438. +Typically used on  write-file-hooks  for automatic time-stamping.
  12439. +The format of the time stamp is determined by the variable  time-stamp-format.
  12440. +The variables time-stamp-line-limit, time-stamp-start, and time-stamp-end
  12441. +control finding the template.Frun-at-time
  12442. +Run a function at a time, and optionally on a regular interval.
  12443. +Arguments are TIME, REPEAT, FUNCTION &rest ARGS.
  12444. +TIME, a string, can be specified absolutely or relative to now.
  12445. +TIME can also be an integer, a number of seconds.
  12446. +REPEAT, an integer number of seconds, is the interval on which to repeat
  12447. +the call to the function.  If REPEAT is nil, call it just once.
  12448. +
  12449. +Absolute times may be specified in a wide variety of formats;
  12450. +Something of the form `HOUR:MIN:SEC TIMEZONE MONTH/DAY/YEAR', where
  12451. +all fields are numbers, works; the format used by the Unix `date'
  12452. +command works too.
  12453. +
  12454. +Relative times may be specified as a series of numbers followed by units:
  12455. +  1 min             denotes one minute from now.
  12456. +  min            does too.
  12457. +  1 min 5 sec        denotes 65 seconds from now.
  12458. +  1 min 2 sec 3 hour 4 day 5 week 6 fortnight 7 month 8 year
  12459. +            denotes the sum of all the given durations from now.Ftpu-edt-on
  12460. +Turn on TPU/edt emulation.Ftpu-set-scroll-margins
  12461. +Set scroll margins.Ftpu-set-cursor-free
  12462. +Allow the cursor to move freely about the screen.Ftpu-set-cursor-bound
  12463. +Constrain the cursor to the flow of the text.Ftq-create
  12464. +Create and return a transaction queue communicating with PROCESS.
  12465. +PROCESS should be a subprocess capable of sending and receiving
  12466. +streams of bytes.  It may be a local process, or it may be connected
  12467. +to a tcp server on another machine.Vtrace-buffer
  12468. +*Trace output will by default go to that buffer.Ftrace-function
  12469. +Traces FUNCTION with trace output going to BUFFER.
  12470. +For every call of FUNCTION Lisp-style trace messages that display argument
  12471. +and return values will be inserted into BUFFER. This function generates the
  12472. +trace advice for FUNCTION and activates it together with any other advice
  12473. +there might be!! The trace BUFFER will popup whenever FUNCTION is called.
  12474. +Do not use this to trace functions that switch buffers or do any other
  12475. +display oriented stuff, use `trace-function-background' instead.Ftrace-function-background
  12476. +Traces FUNCTION with trace output going quietly to BUFFER.
  12477. +For every call of FUNCTION Lisp-style trace messages that display argument
  12478. +and return values will be inserted into BUFFER. This function generates the
  12479. +trace advice for FUNCTION and activates it together with any other advice
  12480. +there might be!! Trace output will quietly go to BUFFER without changing
  12481. +the window or buffer configuration at all.Vtc-mode-map
  12482. +Keymap for commands for two-column mode.Ftc-two-columns
  12483. +Split current window vertically for two-column editing.
  12484. +
  12485. +When called the first time, associates a buffer with the current
  12486. +buffer.  Both buffers are put in two-column minor mode and
  12487. +tc-mode-hook gets called on both.  These buffers remember
  12488. +about one another, even when renamed.
  12489. +
  12490. +When called again, restores the screen layout with the current buffer
  12491. +first and the associated buffer to it's right.
  12492. +
  12493. +If you include long lines, i.e which will span both columns (eg.
  12494. +source code), they should be in what will be the first column, with
  12495. +the associated buffer having empty lines next to them.
  12496. +
  12497. +You have the following commands at your disposal:
  12498. +
  12499. +\[tc-two-columns]   Rearrange screen
  12500. +\[tc-associate-buffer]   Reassociate buffer after changing major mode
  12501. +\[tc-scroll-up]   Scroll both buffers up by a screenfull
  12502. +\[tc-scroll-down]   Scroll both buffers down by a screenful
  12503. +\[tc-scroll-line]   Scroll both buffers up by one or more lines
  12504. +\[tc-recenter]   Recenter and realign other buffer
  12505. +\[shrink-window-horizontally], \[enlarge-window-horizontally]   Shrink, enlarge current column
  12506. +\[tc-associated-buffer]   Switch to associated buffer
  12507. +\[tc-merge]   Merge both buffers
  12508. +
  12509. +These keybindings can be customized in your ~/.emacs by `tc-prefix'
  12510. +and `tc-mode-map'.
  12511. +
  12512. +The appearance of the screen can be customized by the variables
  12513. +`tc-window-width', `tc-beyond-fill-column',
  12514. +`tc-mode-line-format' and `truncate-partial-width-windows'.Ftc-associate-buffer
  12515. +Associate another buffer with this one in two-column minor mode.
  12516. +Can also be used to associate a just previously visited file, by
  12517. +accepting the proposed default buffer.
  12518. +
  12519. +See  \[tc-two-columns]  and  `two-column.el'  for further details.Ftc-split
  12520. +Unmerge a two-column text into two buffers in two-column minor mode.
  12521. +The text is unmerged at the cursor's column which becomes the local
  12522. +value of `tc-window-width'.  Only lines that have the ARG same
  12523. +preceding characters at that column get split.  The ARG preceding
  12524. +characters without any leading whitespace become the local value for
  12525. +`tc-separator'.  This way lines that continue across both
  12526. +columns remain untouched in the first buffer.
  12527. +
  12528. +This function can be used with a prototype line, to set up things as
  12529. +you like them.  You write the first line of each column with the
  12530. +separator you like and then unmerge that line.  E.g.:
  12531. +
  12532. +First column's text    sSs  Second columns text
  12533. +               \___/\
  12534. +            /    \
  12535. +   5 character Separator      You type  M-5 \[tc-split]  with the point here
  12536. +
  12537. +See  \[tc-two-columns]  and  `two-column.el'  for further details.Ftc-dissociate
  12538. +Turn off two-column minor mode in current and associated buffer.
  12539. +If the associated buffer is unmodified and empty, it is killed.Ftc-merge
  12540. +Merges the associated buffer with the current buffer.
  12541. +They get merged at the column, which is the value of
  12542. +`tc-window-width', i.e. usually at the vertical window
  12543. +separator.  This separator gets replaced with white space.  Beyond
  12544. +that the value of gets inserted on merged lines.  The two columns are
  12545. +thus pasted side by side, in a single text.  If the other buffer is
  12546. +not displayed to the left of this one, then this one becomes the left
  12547. +column.
  12548. +
  12549. +If you want `tc-separator' on empty lines in the second column,
  12550. +you should put just one space in them.  In the final result, you can strip
  12551. +off trailing spaces with \[beginning-of-buffer] \[replace-regexp] [ SPC TAB ] + $ RET RETFtc-associated-buffer
  12552. +Switch to associated buffer.Ftc-scroll-line
  12553. +Scroll current window upward by ARG lines.
  12554. +The associated window gets scrolled to the same line.Ftc-scroll-up
  12555. +Scroll current window upward by ARG screens.
  12556. +The associated window gets scrolled to the same line.Ftc-scroll-down
  12557. +Scroll current window downward by ARG screens.
  12558. +The associated window gets scrolled to the same line.Ftc-recenter
  12559. +Center point in window.  With ARG, put point on line ARG.
  12560. +This counts from bottom if ARG is negative.  The associated window
  12561. +gets scrolled to the same line.Funderline-region
  12562. +Underline all nonblank characters in the region.
  12563. +Works by overstriking underscores.
  12564. +Called from program, takes two arguments START and END
  12565. +which specify the range to operate on.Fununderline-region
  12566. +Remove all underlining (overstruck underscores) in the region.
  12567. +Called from program, takes two arguments START and END
  12568. +which specify the range to operate on.Fbatch-unrmail
  12569. +Convert Rmail files to system inbox format.
  12570. +Specify the input Rmail file names as command line arguments.
  12571. +For each Rmail file, the corresponding output file name
  12572. +is made by adding `.mail' at the end.
  12573. +For example, invoke `emacs -batch -f batch-unrmail RMAIL'.Funrmail
  12574. +Convert Rmail file FILE to system inbox format file TO-FILE.Vreplace-copying-with
  12575. +*If non-nil, replace copying notices with this file.Fupdate-copyright
  12576. +Update the copyright notice at the beginning of the buffer
  12577. +to indicate the current year.  If optional arg REPLACE is given
  12578. +(interactively, with prefix arg) replace the years in the notice
  12579. +rather than adding the current year after them.
  12580. +If `replace-copying-with' is set, the copying permissions following the
  12581. +copyright are replaced as well.
  12582. +
  12583. +If optional third argument ASK is non-nil, the user is prompted for whether
  12584. +or not to update the copyright.  If optional fourth argument ASK-YEAR is
  12585. +non-nil, the user is prompted for whether or not to replace the year rather
  12586. +than adding to it.Fask-to-update-copyright
  12587. +If the current buffer contains a copyright notice that is out of date,
  12588. +ask the user if it should be updated with `update-copyright' (which see).
  12589. +Put this on write-file-hooks.Fask-user-about-lock
  12590. +Ask user what to do when he wants to edit FILE but it is locked by USER.
  12591. +This function has a choice of three things to do:
  12592. +  do (signal 'buffer-file-locked (list FILE USER))
  12593. +    to refrain from editing the file
  12594. +  return t (grab the lock on the file)
  12595. +  return nil (edit the file even though it is locked).
  12596. +You can rewrite it to use any criterion you like to choose which one to do.Fask-user-about-supersession-threat
  12597. +Ask a user who is about to modify an obsolete buffer what to do.
  12598. +This function has two choices: it can return, in which case the modification
  12599. +of the buffer will proceed, or it can (signal 'file-supersession (file)),
  12600. +in which case the proposed buffer modification will not be made.
  12601. +
  12602. +You can rewrite this to use any criterion you like to choose which one to do.
  12603. +The buffer in question is current when this function is called.Vvc-checkin-hook
  12604. +*List of functions called after a checkin is done.  See `run-hooks'.Fvc-next-action
  12605. +Do the next logical checkin or checkout operation on the current file.
  12606. +   If the file is not already registered, this registers it for version
  12607. +control and then retrieves a writable, locked copy for editing.
  12608. +   If the file is registered and not locked by anyone, this checks out
  12609. +a writable and locked file ready for editing.
  12610. +   If the file is checked out and locked by the calling user, this
  12611. +first checks to see if the file has changed since checkout.  If not,
  12612. +it performs a revert.
  12613. +   If the file has been changed, this pops up a buffer for entry
  12614. +of a log message; when the message has been entered, it checks in the
  12615. +resulting changes along with the log message as change commentary.  If
  12616. +the variable `vc-keep-workfiles' is non-nil (which is its default), a
  12617. +read-only copy of the changed file is left in place afterwards.
  12618. +   If the file is registered and locked by someone else, you are given
  12619. +the option to steal the lock.
  12620. +   If you call this from within a VC dired buffer with no files marked,
  12621. +it will operate on the file in the current line.
  12622. +   If you call this from within a VC dired buffer, and one or more
  12623. +files are marked, it will accept a log message and then operate on
  12624. +each one.  The log message will be used as a comment for any register
  12625. +or checkin operations, but ignored when doing checkouts.  Attempted
  12626. +lock steals will raise an error.
  12627. +
  12628. +   For checkin, a prefix argument lets you specify the version number to use.Fvc-register
  12629. +Register the current file into your version-control system.Fvc-diff
  12630. +Display diffs between file versions.
  12631. +Normally this compares the current file and buffer with the most recent 
  12632. +checked in version of that file.  This uses no arguments.
  12633. +With a prefix argument, it reads the file name to use
  12634. +and two version designators specifying which versions to compare.Fvc-version-other-window
  12635. +Visit version REV of the current buffer in another window.
  12636. +If the current buffer is named `F', the version is named `F.~REV~'.
  12637. +If `F.~REV~' already exists, it is used instead of being re-created.Fvc-insert-headers
  12638. +Insert headers in a file for use with your version-control system.
  12639. +Headers desired are inserted at the start of the buffer, and are pulled from
  12640. +the variable `vc-header-alist'.Fvc-directory
  12641. +Show version-control status of all files under the current directory.Fvc-create-snapshot
  12642. +Make a snapshot called NAME.
  12643. +The snapshot is made from all registered files at or below the current
  12644. +directory.  For each file, the version level of its latest
  12645. +version becomes part of the named configuration.Fvc-retrieve-snapshot
  12646. +Retrieve the snapshot called NAME.
  12647. +This function fails if any files are locked at or below the current directory
  12648. +Otherwise, all registered files are checked out (unlocked) at their version
  12649. +levels in the snapshot.Fvc-print-log
  12650. +List the change log of the current buffer in a window.Fvc-revert-buffer
  12651. +Revert the current buffer's file back to the latest checked-in version.
  12652. +This asks for confirmation if the buffer contents are not identical
  12653. +to that version.Fvc-cancel-version
  12654. +Get rid of most recently checked in version of this file.
  12655. +A prefix argument means do not revert the buffer afterwards.Fvc-update-change-log
  12656. +Find change log file and add entries from recent RCS logs.
  12657. +The mark is left at the end of the text prepended to the change log.
  12658. +With prefix arg of C-u, only find log entries for the current buffer's file.
  12659. +With any numeric prefix arg, find log entries for all files currently visited.
  12660. +Otherwise, find log entries for all registered files in the default directory.
  12661. +From a program, any arguments are passed to the `rcs2log' script.Fvi-mode
  12662. +Major mode that acts like the `vi' editor.
  12663. +The purpose of this mode is to provide you the combined power of vi (namely,
  12664. +the "cross product" effect of commands and repeat last changes) and Emacs.
  12665. +
  12666. +This command redefines nearly all keys to look like vi commands.
  12667. +It records the previous major mode, and any vi command for input
  12668. +(`i', `a', `s', etc.) switches back to that mode.
  12669. +Thus, ordinary Emacs (in whatever major mode you had been using)
  12670. +is "input" mode as far as vi is concerned.
  12671. +
  12672. +To get back into vi from "input" mode, you must issue this command again.
  12673. +Therefore, it is recommended that you assign it to a key.
  12674. +
  12675. +Major differences between this mode and real vi :
  12676. +
  12677. +* Limitations and unsupported features
  12678. +  - Search patterns with line offset (e.g. /pat/+3 or /pat/z.) are
  12679. +    not supported.
  12680. +  - Ex commands are not implemented; try ':' to get some hints.
  12681. +  - No line undo (i.e. the 'U' command), but multi-undo is a standard feature.
  12682. +
  12683. +* Modifications
  12684. +  - The stopping positions for some point motion commands (word boundary,
  12685. +    pattern search) are slightly different from standard 'vi'.
  12686. +    Also, no automatic wrap around at end of buffer for pattern searching.
  12687. +  - Since changes are done in two steps (deletion then insertion), you need
  12688. +    to undo twice to completely undo a change command.  But this is not needed
  12689. +    for undoing a repeated change command.
  12690. +  - No need to set/unset 'magic', to search for a string with regular expr
  12691. +    in it just put a prefix arg for the search commands.  Replace cmds too.
  12692. +  - ^R is bound to incremental backward search, so use ^L to redraw screen.
  12693. +
  12694. +* Extensions
  12695. +  - Some standard (or modified) Emacs commands were integrated, such as
  12696. +    incremental search, query replace, transpose objects, and keyboard macros.
  12697. +  - In command state, ^X links to the 'ctl-x-map', and ESC can be linked to
  12698. +    esc-map or set undefined.  These can give you the full power of Emacs.
  12699. +  - See vi-com-map for those keys that are extensions to standard vi, e.g.
  12700. +    `vi-name-last-change-or-macro', `vi-verify-spelling', `vi-locate-def',
  12701. +    `vi-mark-region', and 'vi-quote-words'.  Some of them are quite handy.
  12702. +  - Use \[vi-switch-mode] to switch among different modes quickly.
  12703. +  
  12704. +Syntax table and abbrevs while in vi mode remain as they were in Emacs.Fview-file
  12705. +View FILE in View mode, returning to previous buffer when done.
  12706. +The usual Emacs commands are not available; instead,
  12707. +a special set of commands (mostly letters and punctuation)
  12708. +are defined for moving around in the buffer.
  12709. +Space scrolls forward, Delete scrolls backward.
  12710. +For list of all View commands, type ? or h while viewing.
  12711. +
  12712. +This command runs the normal hook `view-mode-hook'.Fview-file-other-window
  12713. +View FILE in View mode in other window.
  12714. +Return to previous buffer when done.
  12715. +The usual Emacs commands are not available; instead,
  12716. +a special set of commands (mostly letters and punctuation)
  12717. +are defined for moving around in the buffer.
  12718. +Space scrolls forward, Delete scrolls backward.
  12719. +For list of all View commands, type ? or h while viewing.
  12720. +
  12721. +This command runs the normal hook `view-mode-hook'.Fview-buffer
  12722. +View BUFFER in View mode, returning to previous buffer when done.
  12723. +The usual Emacs commands are not available; instead,
  12724. +a special set of commands (mostly letters and punctuation)
  12725. +are defined for moving around in the buffer.
  12726. +Space scrolls forward, Delete scrolls backward.
  12727. +For list of all View commands, type ? or h while viewing.
  12728. +
  12729. +This command runs the normal hook `view-mode-hook'.Fview-buffer-other-window
  12730. +View BUFFER in View mode in another window,
  12731. +returning to original buffer when done *only* if 
  12732. +prefix argument NOT-RETURN is nil (which is the default).
  12733. +
  12734. +The usual Emacs commands are not available in View mode; instead,
  12735. +a special set of commands (mostly letters and punctuation)
  12736. +are defined for moving around in the buffer.
  12737. +Space scrolls forward, Delete scrolls backward.
  12738. +For list of all View commands, type ? or h while viewing.
  12739. +
  12740. +This command runs the normal hook `view-mode-hook'.Fview-mode
  12741. +Major mode for viewing text but not editing it.
  12742. +Letters do not insert themselves.  Instead these commands are provided.
  12743. +Most commands take prefix arguments.  Commands dealing with lines
  12744. +default to "scroll size" lines (initially size of window).
  12745. +Search commands default to a repeat count of one.
  12746. +M-< or <    move to beginning of buffer.
  12747. +M-> or >    move to end of buffer.
  12748. +C-v or Space    scroll forward lines.
  12749. +M-v or DEL    scroll backward lines.
  12750. +CR or LF    scroll forward one line (backward with prefix argument).
  12751. +z        like Space except set number of lines for further
  12752. +           scrolling commands to scroll by.
  12753. +C-u and Digits    provide prefix arguments.  `-' denotes negative argument.
  12754. +=        prints the current line number.
  12755. +g        goes to line given by prefix argument.
  12756. +/ or M-C-s    searches forward for regular expression
  12757. +\ or M-C-r    searches backward for regular expression.
  12758. +n        searches forward for last regular expression.
  12759. +p        searches backward for last regular expression.
  12760. +C-@ or .    set the mark.
  12761. +x        exchanges point and mark.
  12762. +C-s or s    do forward incremental search.
  12763. +C-r or r    do reverse incremental search.
  12764. +@ or '        return to mark and pops mark ring.
  12765. +          Mark ring is pushed at start of every
  12766. +          successful search and when jump to line to occurs.
  12767. +          The mark is set on jump to buffer start or end.
  12768. +? or h        provide help message (list of commands).
  12769. +\[Helper-help]        provides help (list of commands or description of a command).
  12770. +C-n        moves down lines vertically.
  12771. +C-p        moves upward lines vertically.
  12772. +C-l        recenters the screen.
  12773. +q or C-c    exit view-mode and return to previous buffer.
  12774. +
  12775. +Entry to this mode runs the normal hook `view-mode-hook'.
  12776. +
  12777. +\{view-mode-map}Fvip-mode
  12778. +Turn on VIP emulation of VI.Fwordstar-mode
  12779. +Major mode with WordStar-like key bindings.
  12780. +
  12781. +BUGS:
  12782. + - Help menus with WordStar commands (C-j just calls help-for-help)
  12783. +   are not implemented
  12784. + - Options for search and replace
  12785. + - Show markers (C-k h) is somewhat strange
  12786. + - Search and replace (C-q a) is only available in forward direction
  12787. +
  12788. +No key bindings beginning with ESC are installed, they will work
  12789. +Emacs-like.
  12790. +
  12791. +The key bindings are:
  12792. +
  12793. +  C-a        backward-word
  12794. +  C-b        fill-paragraph
  12795. +  C-c        scroll-up-line
  12796. +  C-d        forward-char
  12797. +  C-e        previous-line
  12798. +  C-f        forward-word
  12799. +  C-g        delete-char
  12800. +  C-h        backward-char
  12801. +  C-i        indent-for-tab-command
  12802. +  C-j        help-for-help
  12803. +  C-k        ordstar-C-k-map
  12804. +  C-l        ws-repeat-search
  12805. +  C-n        open-line
  12806. +  C-p        quoted-insert
  12807. +  C-r        scroll-down-line
  12808. +  C-s        backward-char
  12809. +  C-t        kill-word
  12810. +  C-u        keyboard-quit
  12811. +  C-v        overwrite-mode
  12812. +  C-w        scroll-down
  12813. +  C-x        next-line
  12814. +  C-y        kill-complete-line
  12815. +  C-z        scroll-up
  12816. +
  12817. +  C-k 0        ws-set-marker-0
  12818. +  C-k 1        ws-set-marker-1
  12819. +  C-k 2        ws-set-marker-2
  12820. +  C-k 3        ws-set-marker-3
  12821. +  C-k 4        ws-set-marker-4
  12822. +  C-k 5        ws-set-marker-5
  12823. +  C-k 6        ws-set-marker-6
  12824. +  C-k 7        ws-set-marker-7
  12825. +  C-k 8        ws-set-marker-8
  12826. +  C-k 9        ws-set-marker-9
  12827. +  C-k b        ws-begin-block
  12828. +  C-k c        ws-copy-block
  12829. +  C-k d        save-buffers-kill-emacs
  12830. +  C-k f        find-file
  12831. +  C-k h        ws-show-markers
  12832. +  C-k i        ws-indent-block
  12833. +  C-k k        ws-end-block
  12834. +  C-k p        ws-print-block
  12835. +  C-k q        kill-emacs
  12836. +  C-k r        insert-file
  12837. +  C-k s        save-some-buffers
  12838. +  C-k t        ws-mark-word
  12839. +  C-k u        ws-exdent-block
  12840. +  C-k C-u    keyboard-quit
  12841. +  C-k v        ws-move-block
  12842. +  C-k w        ws-write-block
  12843. +  C-k x        kill-emacs
  12844. +  C-k y        ws-delete-block
  12845. +
  12846. +  C-o c        center-line
  12847. +  C-o b        switch-to-buffer
  12848. +  C-o j        justify-current-line
  12849. +  C-o k        kill-buffer
  12850. +  C-o l        list-buffers
  12851. +  C-o m        auto-fill-mode
  12852. +  C-o r        set-fill-column
  12853. +  C-o C-u    keyboard-quit
  12854. +  C-o wd    delete-other-windows
  12855. +  C-o wh    split-window-horizontally
  12856. +  C-o wo    other-window
  12857. +  C-o wv    split-window-vertically
  12858. +
  12859. +  C-q 0        ws-find-marker-0
  12860. +  C-q 1        ws-find-marker-1
  12861. +  C-q 2        ws-find-marker-2
  12862. +  C-q 3        ws-find-marker-3
  12863. +  C-q 4        ws-find-marker-4
  12864. +  C-q 5        ws-find-marker-5
  12865. +  C-q 6        ws-find-marker-6
  12866. +  C-q 7        ws-find-marker-7
  12867. +  C-q 8        ws-find-marker-8
  12868. +  C-q 9        ws-find-marker-9
  12869. +  C-q a        ws-query-replace
  12870. +  C-q b        ws-to-block-begin
  12871. +  C-q c        end-of-buffer
  12872. +  C-q d        end-of-line
  12873. +  C-q f        ws-search
  12874. +  C-q k        ws-to-block-end
  12875. +  C-q l        ws-undo
  12876. +  C-q p        ws-last-cursorp
  12877. +  C-q r        beginning-of-buffer
  12878. +  C-q C-u    keyboard-quit
  12879. +  C-q w        ws-last-error
  12880. +  C-q y        ws-kill-eol
  12881. +  C-q DEL    ws-kill-bol
  12882. +Frun-scheme
  12883. +Run an inferior Scheme process.
  12884. +Output goes to the buffer `*scheme*'.
  12885. +With argument, asks for a command line.Fyow
  12886. +Return or display a random Zippy quotation.  With prefix arg, insert it.Finsert-zippyism
  12887. +Prompt with completion for a known Zippy quotation, and insert it at point.Fpsychoanalyze-pinhead
  12888. +Zippy goes to the analyst.Fmap-y-or-n-p
  12889. +Ask a series of boolean questions.
  12890. +Takes args PROMPTER ACTOR LIST, and optional args HELP and ACTION-ALIST.
  12891. +
  12892. +LIST is a list of objects, or a function of no arguments to return the next
  12893. +object or nil.
  12894. +
  12895. +If PROMPTER is a string, the prompt is (format PROMPTER OBJECT).  If not
  12896. +a string, PROMPTER is a function of one arg (an object from LIST), which
  12897. +returns a string to be used as the prompt for that object.  If the return
  12898. +value is not a string, it is eval'd to get the answer; it may be nil to
  12899. +ignore the object, t to act on the object without asking the user, or a
  12900. +form to do a more complex prompt.
  12901. +
  12902. +ACTOR is a function of one arg (an object from LIST),
  12903. +which gets called with each object that the user answers `yes' for.
  12904. +
  12905. +If HELP is given, it is a list (OBJECT OBJECTS ACTION),
  12906. +where OBJECT is a string giving the singular noun for an elt of LIST;
  12907. +OBJECTS is the plural noun for elts of LIST, and ACTION is a transitive
  12908. +verb describing ACTOR.  The default is ("object" "objects" "act on").
  12909. +
  12910. +At the prompts, the user may enter y, Y, or SPC to act on that object;
  12911. +n, N, or DEL to skip that object; ! to act on all following objects;
  12912. +ESC or q to exit (skip all following objects); . (period) to act on the
  12913. +current object and then exit; or \[help-command] to get help.
  12914. +
  12915. +If ACTION-ALIST is given, it is an alist (KEY FUNCTION HELP) of extra keys
  12916. +that will be accepted.  KEY is a character; FUNCTION is a function of one
  12917. +arg (an object from LIST); HELP is a string.  When the user hits KEY,
  12918. +FUNCTION is called.  If it returns non-nil, the object is considered
  12919. +"acted upon", and the next object from LIST is processed.  If it returns
  12920. +nil, the prompt is repeated for the same object.
  12921. +
  12922. +Final optional argument NO-CURSOR-IN-ECHO-AREA non-nil says not to set
  12923. +`cursor-in-echo-area' while prompting.
  12924. +
  12925. +This function uses `query-replace-map' to define the standard responses,
  12926. +but not all of the responses which `query-replace' understands
  12927. +are meaningful here.
  12928. +
  12929. +Returns the number of actions taken.Fforward-page
  12930. +Move forward to page boundary.  With arg, repeat, or go back if negative.
  12931. +A page boundary is any line whose beginning matches the regexp
  12932. +`page-delimiter'.Fbackward-page
  12933. +Move backward to page boundary.  With arg, repeat, or go fwd if negative.
  12934. +A page boundary is any line whose beginning matches the regexp
  12935. +`page-delimiter'.Fmark-page
  12936. +Put mark at end of page, point at beginning.
  12937. +A numeric arg specifies to move forward or backward by that many pages,
  12938. +thus marking a page other than the one point was originally in.Fnarrow-to-page
  12939. +Make text outside current page invisible.
  12940. +A numeric arg specifies to move forward or backward by that many pages,
  12941. +thus showing a page other than the one point was originally in.Fcount-lines-page
  12942. +Report number of lines on current page, and how many are before or after point.Fwhat-page
  12943. +Print page and line number of point.Vparagraph-start
  12944. +*Regexp for beginning of a line that starts OR separates paragraphs.
  12945. +This regexp should match lines that separate paragraphs
  12946. +and should also match lines that start a paragraph
  12947. +(and are part of that paragraph).
  12948. +The variable `paragraph-separate' specifies how to distinguish
  12949. +lines that start paragraphs from lines that separate them.Vparagraph-separate
  12950. +*Regexp for beginning of a line that separates paragraphs.
  12951. +If you change this, you may have to change paragraph-start also.Vsentence-end
  12952. +*Regexp describing the end of a sentence.
  12953. +All paragraph boundaries also end sentences, regardless.
  12954. +
  12955. +In order to be recognized as the end of a sentence, the ending period,
  12956. +question mark, or exclamation point must be followed by two spaces,
  12957. +unless it's inside some sort of quotes or parenthesis.Vpage-delimiter
  12958. +*Regexp describing line-beginnings that separate pages.Vparagraph-ignore-fill-prefix
  12959. +Non-nil means the paragraph commands are not affected by `fill-prefix'.
  12960. +This is desirable in modes where blank lines are the paragraph delimiters.Fforward-paragraph
  12961. +Move forward to end of paragraph.
  12962. +With arg N, do it N times; negative arg -N means move backward N paragraphs.
  12963. +
  12964. +A line which `paragraph-start' matches either separates paragraphs
  12965. +(if `paragraph-separate' matches it also) or is the first line of a paragraph.
  12966. +A paragraph end is the beginning of a line which is not part of the paragraph
  12967. +to which the end of the previous line belongs, or the end of the buffer.Fbackward-paragraph
  12968. +Move backward to start of paragraph.
  12969. +With arg N, do it N times; negative arg -N means move forward N paragraphs.
  12970. +
  12971. +A paragraph start is the beginning of a line which is a
  12972. +`first-line-of-paragraph' or which is ordinary text and follows a
  12973. +paragraph-separating line; except: if the first real line of a
  12974. +paragraph is preceded by a blank line, the paragraph starts at that
  12975. +blank line.
  12976. +
  12977. +See `forward-paragraph' for more information.Fmark-paragraph
  12978. +Put point at beginning of this paragraph, mark at end.
  12979. +The paragraph marked is the one that contains point or follows point.Fkill-paragraph
  12980. +Kill forward to end of paragraph.
  12981. +With arg N, kill forward to Nth end of paragraph;
  12982. +negative arg -N means kill backward to Nth start of paragraph.Fbackward-kill-paragraph
  12983. +Kill back to start of paragraph.
  12984. +With arg N, kill back to Nth start of paragraph;
  12985. +negative arg -N means kill forward to Nth end of paragraph.Ftranspose-paragraphs
  12986. +Interchange this (or next) paragraph with previous one.Fforward-sentence
  12987. +Move forward to next `sentence-end'.  With argument, repeat.
  12988. +With negative argument, move backward repeatedly to `sentence-beginning'.
  12989. +
  12990. +The variable `sentence-end' is a regular expression that matches ends of
  12991. +sentences.  Also, every paragraph boundary terminates sentences as well.Fbackward-sentence
  12992. +Move backward to start of sentence.  With arg, do it arg times.
  12993. +See `forward-sentence' for more information.Fkill-sentence
  12994. +Kill from point to end of sentence.
  12995. +With arg, repeat; negative arg -N means kill back to Nth start of sentence.Fbackward-kill-sentence
  12996. +Kill back from point to start of sentence.
  12997. +With arg, repeat, or kill forward to Nth end of sentence if negative arg -N.Fmark-end-of-sentence
  12998. +Put mark at end of sentence.  Arg works as in `forward-sentence'.Ftranspose-sentences
  12999. +Interchange this (next) and previous sentence.Vregister-alist
  13000. +Alist of elements (NAME . CONTENTS), one for each Emacs register.
  13001. +NAME is a character (a number).  CONTENTS is a string, number,
  13002. +frame configuration, mark or list.
  13003. +A list of strings represents a rectangle.
  13004. +A list of the form (file . NAME) represents the file named NAME.Fget-register
  13005. +Return contents of Emacs register named CHAR, or nil if none.Fset-register
  13006. +Set contents of Emacs register named CHAR to VALUE.  Returns VALUE.
  13007. +See the documentation of the variable `register-alist' for possible VALUE.Fpoint-to-register
  13008. +Store current location of point in register REGISTER.
  13009. +With prefix argument, store current frame configuration.
  13010. +Use \[jump-to-register] to go to that location or restore that configuration.
  13011. +Argument is a character, naming the register.Fwindow-configuration-to-register
  13012. +Store the window configuration of the selected frame in register REGISTER.
  13013. +Use \[jump-to-register] to restore the configuration.
  13014. +Argument is a character, naming the register.Fframe-configuration-to-register
  13015. +Store the window configuration of all frames in register REGISTER.
  13016. +Use \[jump-to-register] to restore the configuration.
  13017. +Argument is a character, naming the register.Fjump-to-register
  13018. +Move point to location stored in a register.
  13019. +If the register contains a file name, find that file.
  13020. + (To put a file name in a register, you must use `set-register'.)
  13021. +If the register contains a window configuration (one frame) or a frame
  13022. +configuration (all frames), restore that frame or all frames accordingly.
  13023. +First argument is a character, naming the register.
  13024. +Optional second arg non-nil (interactively, prefix argument) says to
  13025. +delete any existing frames that the frame configuration doesn't mention.
  13026. +(Otherwise, these frames are iconified.)Fview-register
  13027. +Display what is contained in register named REGISTER.
  13028. +REGISTER is a character.Finsert-register
  13029. +Insert contents of register REG.  REG is a character.
  13030. +Normally puts point before and mark after the inserted text.
  13031. +If optional second arg is non-nil, puts mark before and point after.
  13032. +Interactively, second arg is non-nil if prefix arg is supplied.Fcopy-to-register
  13033. +Copy region into register REG.  With prefix arg, delete as well.
  13034. +Called from program, takes four args: REG, START, END and DELETE-FLAG.
  13035. +START and END are buffer positions indicating what to copy.Fappend-to-register
  13036. +Append region to text in register REG.  With prefix arg, delete as well.
  13037. +Called from program, takes four args: REG, START, END and DELETE-FLAG.
  13038. +START and END are buffer positions indicating what to append.Fprepend-to-register
  13039. +Prepend region to text in register REG.  With prefix arg, delete as well.
  13040. +Called from program, takes four args: REG, START, END and DELETE-FLAG.
  13041. +START and END are buffer positions indicating what to prepend.Fcopy-rectangle-to-register
  13042. +Copy rectangular region into register REG.  With prefix arg, delete as well.
  13043. +Called from program, takes four args: REG, START, END and DELETE-FLAG.
  13044. +START and END are buffer positions giving two corners of rectangle.Vcase-replace
  13045. +*Non-nil means query-replace should preserve case in replacements.Fquery-replace
  13046. +Replace some occurrences of FROM-STRING with TO-STRING.
  13047. +As each match is found, the user must type a character saying
  13048. +what to do with it.  For directions, type \[help-command] at that time.
  13049. +
  13050. +Preserves case in each replacement if `case-replace' and `case-fold-search'
  13051. +are non-nil and FROM-STRING has no uppercase letters.
  13052. +Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace
  13053. +only matches surrounded by word boundaries.
  13054. +
  13055. +To customize possible responses, change the "bindings" in `query-replace-map'.Fquery-replace-regexp
  13056. +Replace some things after point matching REGEXP with TO-STRING.
  13057. +As each match is found, the user must type a character saying
  13058. +what to do with it.  For directions, type \[help-command] at that time.
  13059. +
  13060. +Preserves case in each replacement if `case-replace' and `case-fold-search'
  13061. +are non-nil and REGEXP has no uppercase letters.
  13062. +Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace
  13063. +only matches surrounded by word boundaries.
  13064. +In TO-STRING, `\&' stands for whatever matched the whole of REGEXP,
  13065. +and `\=\N' (where N is a digit) stands for
  13066. + whatever what matched the Nth `\(...\)' in REGEXP.Fmap-query-replace-regexp
  13067. +Replace some matches for REGEXP with various strings, in rotation.
  13068. +The second argument TO-STRINGS contains the replacement strings, separated
  13069. +by spaces.  This command works like `query-replace-regexp' except
  13070. +that each successive replacement uses the next successive replacement string,
  13071. +wrapping around from the last such string to the first.
  13072. +
  13073. +Non-interactively, TO-STRINGS may be a list of replacement strings.
  13074. +
  13075. +A prefix argument N says to use each replacement string N times
  13076. +before rotating to the next.Freplace-string
  13077. +Replace occurrences of FROM-STRING with TO-STRING.
  13078. +Preserve case in each match if `case-replace' and `case-fold-search'
  13079. +are non-nil and FROM-STRING has no uppercase letters.
  13080. +Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace
  13081. +only matches surrounded by word boundaries.
  13082. +
  13083. +This function is usually the wrong thing to use in a Lisp program.
  13084. +What you probably want is a loop like this:
  13085. +  (while (search-forward FROM-STRING nil t)
  13086. +    (replace-match TO-STRING nil t))
  13087. +which will run faster and will not set the mark or print anything.Freplace-regexp
  13088. +Replace things after point matching REGEXP with TO-STRING.
  13089. +Preserve case in each match if `case-replace' and `case-fold-search'
  13090. +are non-nil and REGEXP has no uppercase letters.
  13091. +Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace
  13092. +only matches surrounded by word boundaries.
  13093. +In TO-STRING, `\&' stands for whatever matched the whole of REGEXP,
  13094. +and `\=\N' (where N is a digit) stands for
  13095. + whatever what matched the Nth `\(...\)' in REGEXP.
  13096. +
  13097. +This function is usually the wrong thing to use in a Lisp program.
  13098. +What you probably want is a loop like this:
  13099. +  (while (re-search-forward REGEXP nil t)
  13100. +    (replace-match TO-STRING nil nil))
  13101. +which will run faster and will not set the mark or print anything.Vregexp-history
  13102. +History list for some commands that read regular expressions.Fkeep-lines
  13103. +Delete all lines except those containing matches for REGEXP.
  13104. +A match split across lines preserves all the lines it lies in.
  13105. +Applies to all lines after point.Fflush-lines
  13106. +Delete lines containing matches for REGEXP.
  13107. +If a match is split across lines, all the lines it lies in are deleted.
  13108. +Applies to lines after point.Fhow-many
  13109. +Print number of matches for REGEXP following point.Foccur-mode
  13110. +Major mode for output from \[occur].
  13111. +Move point to one of the occurrences in this buffer,
  13112. +then use \[occur-mode-goto-occurrence] to go to the same occurrence
  13113. +in the buffer that the occurrences were found in.
  13114. +Or click \<occur-mode-map>\[occur-mode-mouse-goto] on an occurrence line.
  13115. +\{occur-mode-map}Foccur-mode-mouse-goto
  13116. +In Occur mode, go to the occurrence whose line you click on.Foccur-mode-goto-occurrence
  13117. +Go to the occurrence the current line describes.Vlist-matching-lines-default-context-lines
  13118. +*Default number of context lines to include around a `list-matching-lines'
  13119. +match.  A negative number means to include that many lines before the match.
  13120. +A positive number means to include that many lines both before and after.Foccur
  13121. +Show all lines in the current buffer containing a match for REGEXP.
  13122. +
  13123. +If a match spreads across multiple lines, all those lines are shown.
  13124. +
  13125. +Each line is displayed with NLINES lines before and after, or -NLINES
  13126. +before if NLINES is negative.
  13127. +NLINES defaults to `list-matching-lines-default-context-lines'.
  13128. +Interactively it is the prefix arg.
  13129. +
  13130. +The lines are shown in a buffer named `*Occur*'.
  13131. +It serves as a menu to find any of the occurrences in this buffer.
  13132. +\[describe-mode] in that buffer will explain how.Vquery-replace-help
  13133. +Help message while in query-replaceVquery-replace-map
  13134. +Keymap that defines the responses to questions in `query-replace'.
  13135. +The "bindings" in this map are not commands; they are answers.
  13136. +The valid answers include `act', `skip', `act-and-show',
  13137. +`exit', `act-and-exit', `edit', `delete-and-edit', `recenter',
  13138. +`automatic', `backup', and `help'.Fperform-replace
  13139. +Subroutine of `query-replace'.  Its complexity handles interactive queries.
  13140. +Don't use this in your own program unless you want to query and set the mark
  13141. +just as `query-replace' does.  Instead, write a simple loop like this:
  13142. +  (while (re-search-forward "foo[     ]+bar" nil t)
  13143. +    (replace-match "foobar" nil nil))
  13144. +which will run faster and probably do exactly what you want.Vquery-replace-highlight
  13145. +*Non-nil means to highlight words during query replacement.Fopen-line
  13146. +Insert a newline and leave point before it.
  13147. +If there is a fill prefix, insert the fill prefix on the new line
  13148. +if the line would have been empty.
  13149. +With arg N, insert N newlines.Fsplit-line
  13150. +Split current line, moving portion beyond point vertically down.Fquoted-insert
  13151. +Read next input character and insert it.
  13152. +This is useful for inserting control characters.
  13153. +You may also type up to 3 octal digits, to insert a character with that code.
  13154. +
  13155. +In overwrite mode, this function inserts the character anyway, and
  13156. +does not handle octal digits specially.  This means that if you use
  13157. +overwrite as your normal editing mode, you can use this function to
  13158. +insert characters when necessary.
  13159. +
  13160. +In binary overwrite mode, this function does overwrite, and octal
  13161. +digits are interpreted as a character code.  This is supposed to make
  13162. +this function useful in editing binary files.Fdelete-indentation
  13163. +Join this line to previous and fix up whitespace at join.
  13164. +If there is a fill prefix, delete it from the beginning of this line.
  13165. +With argument, join this line to following line.Ffixup-whitespace
  13166. +Fixup white space between objects around point.
  13167. +Leave one space or none, according to the context.Fdelete-horizontal-space
  13168. +Delete all spaces and tabs around point.Fjust-one-space
  13169. +Delete all spaces and tabs around point, leaving one space.Fdelete-blank-lines
  13170. +On blank line, delete all surrounding blank lines, leaving just one.
  13171. +On isolated blank line, delete that one.
  13172. +On nonblank line, delete any immediately following blank lines.Fback-to-indentation
  13173. +Move point to the first non-whitespace character on this line.Fnewline-and-indent
  13174. +Insert a newline, then indent according to major mode.
  13175. +Indentation is done using the value of `indent-line-function'.
  13176. +In programming language modes, this is the same as TAB.
  13177. +In some text modes, where TAB inserts a tab, this command indents to the
  13178. +column specified by the variable `left-margin'.Freindent-then-newline-and-indent
  13179. +Reindent current line, insert newline, then indent the new line.
  13180. +Indentation of both lines is done according to the current major mode,
  13181. +which means calling the current value of `indent-line-function'.
  13182. +In programming language modes, this is the same as TAB.
  13183. +In some text modes, where TAB inserts a tab, this indents to the
  13184. +column specified by the variable `left-margin'.Fbackward-delete-char-untabify
  13185. +Delete characters backward, changing tabs into spaces.
  13186. +Delete ARG chars, and kill (save in kill ring) if KILLP is non-nil.
  13187. +Interactively, ARG is the prefix arg (default 1)
  13188. +and KILLP is t if a prefix arg was specified.Fzap-to-char
  13189. +Kill up to and including ARG'th occurrence of CHAR.
  13190. +Goes backward if ARG is negative; error if CHAR not found.Fbeginning-of-buffer
  13191. +Move point to the beginning of the buffer; leave mark at previous position.
  13192. +With arg N, put point N/10 of the way from the true beginning.
  13193. +
  13194. +Don't use this command in Lisp programs!
  13195. +(goto-char (point-min)) is faster and avoids clobbering the mark.Fend-of-buffer
  13196. +Move point to the end of the buffer; leave mark at previous position.
  13197. +With arg N, put point N/10 of the way from the true end.
  13198. +
  13199. +Don't use this command in Lisp programs!
  13200. +(goto-char (point-max)) is faster and avoids clobbering the mark.Fmark-whole-buffer
  13201. +Put point at beginning and mark at end of buffer.
  13202. +You probably should not use this function in Lisp programs;
  13203. +it is usually a mistake for a Lisp function to use any subroutine
  13204. +that uses or sets the mark.Fcount-lines-region
  13205. +Print number of lines and characters in the region.Fwhat-line
  13206. +Print the current line number (in the buffer) of point.Fcount-lines
  13207. +Return number of lines between START and END.
  13208. +This is usually the number of newlines between them,
  13209. +but can be one more if START is not equal to END
  13210. +and the greater of them is not at the start of a line.Fwhat-cursor-position
  13211. +Print info on cursor position (on screen and within buffer).Ffundamental-mode
  13212. +Major mode not specialized for anything in particular.
  13213. +Other major modes are defined by comparison with this one.Vread-expression-map
  13214. +Minibuffer keymap used for reading Lisp expressions.Feval-expression
  13215. +Evaluate EXPRESSION and print value in minibuffer.
  13216. +Value is also consed on to front of the variable `values'.Fedit-and-eval-command
  13217. +Prompting with PROMPT, let user edit COMMAND and eval result.
  13218. +COMMAND is a Lisp expression.  Let user edit that expression in
  13219. +the minibuffer, then read and evaluate the result.Frepeat-complex-command
  13220. +Edit and re-evaluate last complex command, or ARGth from last.
  13221. +A complex command is one which used the minibuffer.
  13222. +The command is placed in the minibuffer as a Lisp form for editing.
  13223. +The result is executed, repeating the command as changed.
  13224. +If the command has been changed or is not the most recent previous command
  13225. +it is added to the front of the command history.
  13226. +You can use the minibuffer history commands \<minibuffer-local-map>\[next-history-element] and \[previous-history-element]
  13227. +to get different commands to edit and resubmit.Vminibuffer-history
  13228. +Default minibuffer history list.
  13229. +This is used for all minibuffer input
  13230. +except when an alternate history list is specified.Vminibuffer-history-sexp-flag
  13231. +Non-nil when doing history operations on `command-history'.
  13232. +More generally, indicates that the history list being acted on
  13233. +contains expressions rather than strings.Fprevious-matching-history-element
  13234. +Find the previous history element that matches REGEXP.
  13235. +(Previous history elements refer to earlier actions.)
  13236. +With prefix argument N, search for Nth previous match.
  13237. +If N is negative, find the next or Nth next match.Fnext-matching-history-element
  13238. +Find the next history element that matches REGEXP.
  13239. +(The next history element refers to a more recent action.)
  13240. +With prefix argument N, search for Nth next match.
  13241. +If N is negative, find the previous or Nth previous match.Fnext-history-element
  13242. +Insert the next element of the minibuffer history into the minibuffer.Fprevious-history-element
  13243. +Inserts the previous element of the minibuffer history into the minibuffer.Fnext-complete-history-element
  13244. +Get next element of history which is a completion of minibuffer contents.Fprevious-complete-history-element
  13245. +Get previous element of history which is a completion of minibuffer contents.Fgoto-line
  13246. +Goto line ARG, counting from line 1 at beginning of buffer.Fundo
  13247. +Undo some previous changes.
  13248. +Repeat this command to undo more changes.
  13249. +A numeric argument serves as a repeat count.Vpending-undo-list
  13250. +Within a run of consecutive undo commands, list remaining to be undone.Fundo-start
  13251. +Set `pending-undo-list' to the front of the undo list.
  13252. +The next call to `undo-more' will undo the most recently made change.Fundo-more
  13253. +Undo back N undo-boundaries beyond what was already undone recently.
  13254. +Call `undo-start' to get ready to undo recent changes,
  13255. +then call `undo-more' one or more times to undo them.Vshell-command-history
  13256. +History list for some commands that read shell commands.Fshell-command
  13257. +Execute string COMMAND in inferior shell; display output, if any.
  13258. +If COMMAND ends in ampersand, execute it asynchronously.
  13259. +Optional second arg non-nil (prefix arg, if interactive)
  13260. +means insert output in current buffer after point (leave mark after it).
  13261. +This cannot be done asynchronously.Fshell-command-on-region
  13262. +Execute string COMMAND in inferior shell with region as input.
  13263. +Normally display output (if any) in temp buffer `*Shell Command Output*';
  13264. +Prefix arg means replace the region with it.
  13265. +Noninteractive args are START, END, COMMAND, FLAG.
  13266. +Noninteractively FLAG means insert output in place of text from START to END,
  13267. +and put point at the end, but don't alter the mark.
  13268. +
  13269. +If the output is one line, it is displayed in the echo area,
  13270. +but it is nonetheless available in buffer `*Shell Command Output*'
  13271. +even though that buffer is not automatically displayed.  If there is no output
  13272. +or output is inserted in the current buffer then `*Shell Command Output*' is
  13273. +deleted.Funiversal-argument
  13274. +Begin a numeric argument for the following command.
  13275. +Digits or minus sign following \[universal-argument] make up the numeric argument.
  13276. +\[universal-argument] following the digits or minus sign ends the argument.
  13277. +\[universal-argument] without digits or minus sign provides 4 as argument.
  13278. +Repeating \[universal-argument] without digits or minus sign
  13279. + multiplies the argument by 4 each time.Fdigit-argument
  13280. +Part of the numeric argument for the next command.
  13281. +\[universal-argument] following digits or minus sign ends the argument.Fnegative-argument
  13282. +Begin a negative numeric argument for the next command.
  13283. +\[universal-argument] following digits or minus sign ends the argument.Fforward-to-indentation
  13284. +Move forward ARG lines and position at first nonblank character.Fbackward-to-indentation
  13285. +Move backward ARG lines and position at first nonblank character.Vkill-whole-line
  13286. +*If non-nil, `kill-line' with no arg at beg of line kills the whole line.Fkill-line
  13287. +Kill the rest of the current line; if no nonblanks there, kill thru newline.
  13288. +With prefix argument, kill that many lines from point.
  13289. +Negative arguments kill lines backward.
  13290. +
  13291. +When calling from a program, nil means "no arg",
  13292. +a number counts as a prefix arg.
  13293. +
  13294. +If `kill-whole-line' is non-nil, then kill the whole line
  13295. +when given no argument at the beginning of a line.Vinterprogram-cut-function
  13296. +Function to call to make a killed region available to other programs.
  13297. +
  13298. +Most window systems provide some sort of facility for cutting and
  13299. +pasting text between the windows of different programs.
  13300. +This variable holds a function that Emacs calls whenever text
  13301. +is put in the kill ring, to make the new kill available to other
  13302. +programs.
  13303. +
  13304. +The function takes one or two arguments.
  13305. +The first argument, TEXT, is a string containing
  13306. +the text which should be made available.
  13307. +The second, PUSH, if non-nil means this is a "new" kill;
  13308. +nil means appending to an "old" kill.Vinterprogram-paste-function
  13309. +Function to call to get text cut from other programs.
  13310. +
  13311. +Most window systems provide some sort of facility for cutting and
  13312. +pasting text between the windows of different programs.
  13313. +This variable holds a function that Emacs calls to obtain
  13314. +text that other programs have provided for pasting.
  13315. +
  13316. +The function should be called with no arguments.  If the function
  13317. +returns nil, then no other program has provided such text, and the top
  13318. +of the Emacs kill ring should be used.  If the function returns a
  13319. +string, that string should be put in the kill ring as the latest kill.
  13320. +
  13321. +Note that the function should return a string only if a program other
  13322. +than Emacs has provided a string for pasting; if Emacs provided the
  13323. +most recent string, the function should return nil.  If it is
  13324. +difficult to tell whether Emacs or some other program provided the
  13325. +current string, it is probably good enough to return nil if the string
  13326. +is equal (according to `string=') to the last text Emacs provided.Vkill-ring
  13327. +List of killed text sequences.
  13328. +Since the kill ring is supposed to interact nicely with cut-and-paste
  13329. +facilities offered by window systems, use of this variable should
  13330. +interact nicely with `interprogram-cut-function' and
  13331. +`interprogram-paste-function'.  The functions `kill-new',
  13332. +`kill-append', and `current-kill' are supposed to implement this
  13333. +interaction; you may want to use them instead of manipulating the kill
  13334. +ring directly.Vkill-ring-max
  13335. +*Maximum length of kill ring before oldest elements are thrown away.Vkill-ring-yank-pointer
  13336. +The tail of the kill ring whose car is the last thing yanked.Fkill-new
  13337. +Make STRING the latest kill in the kill ring.
  13338. +Set the kill-ring-yank pointer to point to it.
  13339. +If `interprogram-cut-function' is non-nil, apply it to STRING.Fkill-append
  13340. +Append STRING to the end of the latest kill in the kill ring.
  13341. +If BEFORE-P is non-nil, prepend STRING to the kill.
  13342. +If `interprogram-cut-function' is set, pass the resulting kill to
  13343. +it.Fcurrent-kill
  13344. +Rotate the yanking point by N places, and then return that kill.
  13345. +If N is zero, `interprogram-paste-function' is set, and calling it
  13346. +returns a string, then that string is added to the front of the
  13347. +kill ring and returned as the latest kill.
  13348. +If optional arg DO-NOT-MOVE is non-nil, then don't actually move the 
  13349. +yanking point; just return the Nth kill forward.Vkill-read-only-ok
  13350. +*Non-nil means don't signal an error for killing read-only text.Fkill-region
  13351. +Kill between point and mark.
  13352. +The text is deleted but saved in the kill ring.
  13353. +The command \[yank] can retrieve it from there.
  13354. +(If you want to kill and then yank immediately, use \[copy-region-as-kill].)
  13355. +If the buffer is read-only, Emacs will beep and refrain from deleting
  13356. +the text, but put the text in the kill ring anyway.  This means that
  13357. +you can use the killing commands to copy text from a read-only buffer.
  13358. +
  13359. +This is the primitive for programs to kill text (as opposed to deleting it).
  13360. +Supply two arguments, character numbers indicating the stretch of text
  13361. + to be killed.
  13362. +Any command that calls this function is a "kill command".
  13363. +If the previous command was also a kill command,
  13364. +the text killed this time appends to the text killed last time
  13365. +to make one entry in the kill ring.Fcopy-region-as-kill
  13366. +Save the region as if killed, but don't kill it.
  13367. +If `interprogram-cut-function' is non-nil, also save the text for a window
  13368. +system cut and paste.Fkill-ring-save
  13369. +Save the region as if killed, but don't kill it.
  13370. +This command is similar to `copy-region-as-kill', except that it gives
  13371. +visual feedback indicating the extent of the region being copied.
  13372. +If `interprogram-cut-function' is non-nil, also save the text for a window
  13373. +system cut and paste.Fappend-next-kill
  13374. +Cause following command, if it kills, to append to previous kill.Fyank-pop
  13375. +Replace just-yanked stretch of killed text with a different stretch.
  13376. +This command is allowed only immediately after a `yank' or a `yank-pop'.
  13377. +At such a time, the region contains a stretch of reinserted
  13378. +previously-killed text.  `yank-pop' deletes that text and inserts in its
  13379. +place a different stretch of killed text.
  13380. +
  13381. +With no argument, the previous kill is inserted.
  13382. +With argument N, insert the Nth previous kill.
  13383. +If N is negative, this is a more recent kill.
  13384. +
  13385. +The sequence of kills wraps around, so that after the oldest one
  13386. +comes the newest one.Fyank
  13387. +Reinsert the last stretch of killed text.
  13388. +More precisely, reinsert the stretch of killed text most recently
  13389. +killed OR yanked.  Put point at end, and set mark at beginning.
  13390. +With just C-u as argument, same but put point at beginning (and mark at end).
  13391. +With argument N, reinsert the Nth most recently killed stretch of killed
  13392. +text.
  13393. +See also the command \[yank-pop].Frotate-yank-pointer
  13394. +Rotate the yanking point in the kill ring.
  13395. +With argument, rotate that many kills forward (or backward, if negative).Finsert-buffer
  13396. +Insert after point the contents of BUFFER.
  13397. +Puts mark after the inserted text.
  13398. +BUFFER may be a buffer or a buffer name.Fappend-to-buffer
  13399. +Append to specified buffer the text of the region.
  13400. +It is inserted into that buffer before its point.
  13401. +
  13402. +When calling from a program, give three arguments:
  13403. +BUFFER (or buffer name), START and END.
  13404. +START and END specify the portion of the current buffer to be copied.Fprepend-to-buffer
  13405. +Prepend to specified buffer the text of the region.
  13406. +It is inserted into that buffer after its point.
  13407. +
  13408. +When calling from a program, give three arguments:
  13409. +BUFFER (or buffer name), START and END.
  13410. +START and END specify the portion of the current buffer to be copied.Fcopy-to-buffer
  13411. +Copy to specified buffer the text of the region.
  13412. +It is inserted into that buffer, replacing existing text there.
  13413. +
  13414. +When calling from a program, give three arguments:
  13415. +BUFFER (or buffer name), START and END.
  13416. +START and END specify the portion of the current buffer to be copied.Vmark-even-if-inactive
  13417. +*Non-nil means you can use the mark even when inactive.
  13418. +This option makes a difference in Transient Mark mode.
  13419. +When the option is non-nil, deactivation of the mark
  13420. +turns off region highlighting, but commands that use the mark
  13421. +behave as if the mark were still active.Fmark
  13422. +Return this buffer's mark value as integer; error if mark inactive.
  13423. +If optional argument FORCE is non-nil, access the mark value
  13424. +even if the mark is not currently active, and return nil
  13425. +if there is no mark at all.
  13426. +
  13427. +If you are using this in an editing command, you are most likely making
  13428. +a mistake; see the documentation of `set-mark'.Fdeactivate-mark
  13429. +Deactivate the mark by setting `mark-active' to nil.
  13430. +(That makes a difference only in Transient Mark mode.)
  13431. +Also runs the hook `deactivate-mark-hook'.Fset-mark
  13432. +Set this buffer's mark to POS.  Don't use this function!
  13433. +That is to say, don't use this function unless you want
  13434. +the user to see that the mark has moved, and you want the previous
  13435. +mark position to be lost.
  13436. +
  13437. +Normally, when a new mark is set, the old one should go on the stack.
  13438. +This is why most applications should use push-mark, not set-mark.
  13439. +
  13440. +Novice Emacs Lisp programmers often try to use the mark for the wrong
  13441. +purposes.  The mark saves a location for the user's convenience.
  13442. +Most editing commands should not alter the mark.
  13443. +To remember a location for internal use in the Lisp program,
  13444. +store it in a Lisp variable.  Example:
  13445. +
  13446. +   (let ((beg (point))) (forward-line 1) (delete-region beg (point))).Vmark-ring
  13447. +The list of former marks of the current buffer, most recent first.Vmark-ring-max
  13448. +*Maximum size of mark ring.  Start discarding off end if gets this big.Vglobal-mark-ring
  13449. +The list of saved global marks, most recent first.Vglobal-mark-ring-max
  13450. +*Maximum size of global mark ring.  Start discarding off end if gets this big.Fset-mark-command
  13451. +Set mark at where point is, or jump to mark.
  13452. +With no prefix argument, set mark, push old mark position on local mark
  13453. +ring, and push mark on global mark ring.
  13454. +With argument, jump to mark, and pop a new position for mark off the ring
  13455. +(does not affect global mark ring).
  13456. +
  13457. +Novice Emacs Lisp programmers often try to use the mark for the wrong
  13458. +purposes.  See the documentation of `set-mark' for more information.Fpush-mark
  13459. +Set mark at LOCATION (point, by default) and push old mark on mark ring.
  13460. +If the last global mark pushed was not in the current buffer,
  13461. +also push LOCATION on the global mark ring.
  13462. +Display `Mark set' unless the optional second arg NOMSG is non-nil.
  13463. +In Transient Mark mode, activate mark if optional third arg ACTIVATE non-nil.
  13464. +
  13465. +Novice Emacs Lisp programmers often try to use the mark for the wrong
  13466. +purposes.  See the documentation of `set-mark' for more information.
  13467. +
  13468. +In Transient Mark mode, this does not activate the mark.Fpop-mark
  13469. +Pop off mark ring into the buffer's actual mark.
  13470. +Does not set point.  Does nothing if mark ring is empty.Fexchange-point-and-mark
  13471. +Put the mark where point is now, and point where the mark is now.
  13472. +This command works even when the mark is not active,
  13473. +and it reactivates the mark.Ftransient-mark-mode
  13474. +Toggle Transient Mark mode.
  13475. +With arg, turn Transient Mark mode on if arg is positive, off otherwise.
  13476. +
  13477. +In Transient Mark mode, when the mark is active, the region is highlighted.
  13478. +Changing the buffer "deactivates" the mark.
  13479. +So do certain other operations that set the mark
  13480. +but whose main purpose is something else--for example,
  13481. +incremental search, \[beginning-of-buffer], and \[end-of-buffer].Fpop-global-mark
  13482. +Pop off global mark ring and jump to the top location.Vnext-line-add-newlines
  13483. +*If non-nil, `next-line' inserts newline to avoid `end of buffer' error.Fnext-line
  13484. +Move cursor vertically down ARG lines.
  13485. +If there is no character in the target line exactly under the current column,
  13486. +the cursor is positioned after the character in that line which spans this
  13487. +column, or at the end of the line if it is not long enough.
  13488. +If there is no line in the buffer after this one, behavior depends on the
  13489. +value of next-line-add-newlines.  If non-nil, a newline character is inserted
  13490. +to create a line and the cursor moves to that line, otherwise the cursor is
  13491. +moved to the end of the buffer (if already at the end of the buffer, an error
  13492. +is signaled).
  13493. +
  13494. +The command \[set-goal-column] can be used to create
  13495. +a semipermanent goal column to which this command always moves.
  13496. +Then it does not try to move vertically.  This goal column is stored
  13497. +in `goal-column', which is nil when there is none.
  13498. +
  13499. +If you are thinking of using this in a Lisp program, consider
  13500. +using `forward-line' instead.  It is usually easier to use
  13501. +and more reliable (no dependence on goal column, etc.).Fprevious-line
  13502. +Move cursor vertically up ARG lines.
  13503. +If there is no character in the target line exactly over the current column,
  13504. +the cursor is positioned after the character in that line which spans this
  13505. +column, or at the end of the line if it is not long enough.
  13506. +
  13507. +The command \[set-goal-column] can be used to create
  13508. +a semipermanent goal column to which this command always moves.
  13509. +Then it does not try to move vertically.
  13510. +
  13511. +If you are thinking of using this in a Lisp program, consider using
  13512. +`forward-line' with a negative argument instead.  It is usually easier
  13513. +to use and more reliable (no dependence on goal column, etc.).Vtrack-eol
  13514. +*Non-nil means vertical motion starting at end of line keeps to ends of lines.
  13515. +This means moving to the end of each line moved onto.
  13516. +The beginning of a blank line does not count as the end of a line.Vgoal-column
  13517. +*Semipermanent goal column for vertical motion, as set by \[set-goal-column], or nil.Vtemporary-goal-column
  13518. +Current goal column for vertical motion.
  13519. +It is the column where point was
  13520. +at the start of current run of vertical motion commands.
  13521. +When the `track-eol' feature is doing its job, the value is 9999.Fset-goal-column
  13522. +Set the current horizontal position as a goal for \[next-line] and \[previous-line].
  13523. +Those commands will move to this position in the line moved to
  13524. +rather than trying to keep the same horizontal position.
  13525. +With a non-nil argument, clears out the goal column
  13526. +so that \[next-line] and \[previous-line] resume vertical motion.
  13527. +The goal column is stored in the variable `goal-column'.Vhscroll-step
  13528. +*The number of columns to try scrolling a window by when point moves out.
  13529. +If that fails to bring point back on frame, point is centered instead.
  13530. +If this is zero, point is always centered after it moves off frame.Fhscroll-point-visible
  13531. +Scrolls the selected window horizontally to make point visible.Fscroll-other-window-down
  13532. +Scroll the "other window" down.Fbeginning-of-buffer-other-window
  13533. +Move point to the beginning of the buffer in the other window.
  13534. +Leave mark at previous position.
  13535. +With arg N, put point N/10 of the way from the true beginning.Fend-of-buffer-other-window
  13536. +Move point to the end of the buffer in the other window.
  13537. +Leave mark at previous position.
  13538. +With arg N, put point N/10 of the way from the true end.Ftranspose-chars
  13539. +Interchange characters around point, moving forward one character.
  13540. +With prefix arg ARG, effect is to take character before point
  13541. +and drag it forward past ARG other characters (backward if ARG negative).
  13542. +If no argument and at end of line, the previous two chars are exchanged.Ftranspose-words
  13543. +Interchange words around point, leaving point at end of them.
  13544. +With prefix arg ARG, effect is to take word before or around point
  13545. +and drag it forward past ARG other words (backward if ARG negative).
  13546. +If ARG is zero, the words around or after point and around or after mark
  13547. +are interchanged.Ftranspose-sexps
  13548. +Like \[transpose-words] but applies to sexps.
  13549. +Does not work on a sexp that point is in the middle of
  13550. +if it is a list or string.Ftranspose-lines
  13551. +Exchange current line and previous line, leaving point after both.
  13552. +With argument ARG, takes previous line and moves it past ARG lines.
  13553. +With argument 0, interchanges line point is in with line mark is in.Vcomment-column
  13554. +*Column to indent right-margin comments to.
  13555. +Setting this variable automatically makes it local to the current buffer.
  13556. +Each mode establishes a different default value for this variable; you
  13557. +can set the value for a particular mode using that mode's hook.Vcomment-start
  13558. +*String to insert to start a new comment, or nil if no comment syntax defined.Vcomment-start-skip
  13559. +*Regexp to match the start of a comment plus everything up to its body.
  13560. +If there are any \(...\) pairs, the comment delimiter text is held to begin
  13561. +at the place matched by the close of the first pair.Vcomment-end
  13562. +*String to insert to end a new comment.
  13563. +Should be an empty string if comments are terminated by end-of-line.Vcomment-indent-hook
  13564. +Obsolete variable for function to compute desired indentation for a comment.
  13565. +This function is called with no args with point at the beginning of
  13566. +the comment's starting delimiter.Vcomment-indent-function
  13567. +Function to compute desired indentation for a comment.
  13568. +This function is called with no args with point at the beginning of
  13569. +the comment's starting delimiter.Findent-for-comment
  13570. +Indent this line's comment to comment column, or insert an empty comment.Fset-comment-column
  13571. +Set the comment column based on point.
  13572. +With no arg, set the comment column to the current column.
  13573. +With just minus as arg, kill any comment on this line.
  13574. +With any other arg, set comment column to indentation of the previous comment
  13575. + and then align or create a comment on this line at that column.Fkill-comment
  13576. +Kill the comment on this line, if any.
  13577. +With argument, kill comments on that many lines starting with this one.Fcomment-region
  13578. +Comment or uncomment each line in the region.
  13579. +With just C-u prefix arg, uncomment each line in region.
  13580. +Numeric prefix arg ARG means use ARG comment characters.
  13581. +If ARG is negative, delete that many comment characters instead.
  13582. +Comments are terminated on each line, even for syntax in which newline does
  13583. +not end the comment.  Blank lines do not get comments.Fbackward-word
  13584. +Move backward until encountering the end of a word.
  13585. +With argument, do this that many times.
  13586. +In programs, it is faster to call `forward-word' with negative arg.Fmark-word
  13587. +Set mark arg words away from point.Fkill-word
  13588. +Kill characters forward until encountering the end of a word.
  13589. +With argument, do this that many times.Fbackward-kill-word
  13590. +Kill characters backward until encountering the end of a word.
  13591. +With argument, do this that many times.Fcurrent-word
  13592. +Return the word point is on (or a nearby word) as a string.
  13593. +If optional arg STRICT is non-nil, return nil unless point is within
  13594. +or adjacent to a word.Vfill-prefix
  13595. +*String for filling to insert at front of new line, or nil for none.
  13596. +Setting this variable automatically makes it local to the current buffer.Vauto-fill-inhibit-regexp
  13597. +*Regexp to match lines which should not be auto-filled.Fauto-fill-mode
  13598. +Toggle auto-fill mode.
  13599. +With arg, turn Auto-Fill mode on if and only if arg is positive.
  13600. +In Auto-Fill mode, inserting a space at a column beyond `fill-column'
  13601. +automatically breaks the line at a previous space.Fauto-fill-function
  13602. +Automatically break line at a previous space, in insertion of text.Fturn-on-auto-fill
  13603. +Unconditionally turn on Auto Fill mode.Fset-fill-column
  13604. +Set `fill-column' to current column, or to argument if given.
  13605. +The variable `fill-column' has a separate value for each buffer.Vcomment-multi-line
  13606. +*Non-nil means \[indent-new-comment-line] should continue same comment
  13607. +on new line, with no new terminator or starter.
  13608. +This is obsolete because you might as well use \[newline-and-indent].Findent-new-comment-line
  13609. +Break line at point and indent, continuing comment if within one.
  13610. +This indents the body of the continued comment
  13611. +under the previous comment line.
  13612. +
  13613. +This command is intended for styles where you write a comment per line,
  13614. +starting a new comment (and terminating it if necessary) on each line.
  13615. +If you want to continue one comment across several lines, use \[newline-and-indent].Fset-selective-display
  13616. +Set `selective-display' to ARG; clear it if no arg.
  13617. +When the value of `selective-display' is a number > 0,
  13618. +lines whose indentation is >= that value are not displayed.
  13619. +The variable `selective-display' has a separate value for each buffer.Voverwrite-mode-textual
  13620. +The string displayed in the mode line when in overwrite mode.Voverwrite-mode-binary
  13621. +The string displayed in the mode line when in binary overwrite mode.Foverwrite-mode
  13622. +Toggle overwrite mode.
  13623. +With arg, turn overwrite mode on iff arg is positive.
  13624. +In overwrite mode, printing characters typed in replace existing text
  13625. +on a one-for-one basis, rather than pushing it to the right.  At the
  13626. +end of a line, such characters extend the line.  Before a tab,
  13627. +such characters insert until the tab is filled in.
  13628. +\[quoted-insert] still inserts characters in overwrite mode; this
  13629. +is supposed to make it easier to insert characters when necessary.Fbinary-overwrite-mode
  13630. +Toggle binary overwrite mode.
  13631. +With arg, turn binary overwrite mode on iff arg is positive.
  13632. +In binary overwrite mode, printing characters typed in replace
  13633. +existing text.  Newlines are not treated specially, so typing at the
  13634. +end of a line joins the line to the next, with the typed character
  13635. +between them.  Typing before a tab character simply replaces the tab
  13636. +with the character typed.
  13637. +\[quoted-insert] replaces the text at the cursor, just as ordinary
  13638. +typing characters do.
  13639. +
  13640. +Note that binary overwrite mode is not its own minor mode; it is a
  13641. +specialization of overwrite-mode, entered by setting the
  13642. +`overwrite-mode' variable to `overwrite-mode-binary'.Vline-number-mode
  13643. +*Non-nil means display line number in mode line.Fline-number-mode
  13644. +Toggle Line Number mode.
  13645. +With arg, turn Line Number mode on iff arg is positive.
  13646. +When Line Number mode is enabled, the line number appears
  13647. +in the mode line.Vblink-matching-paren
  13648. +*Non-nil means show matching open-paren when close-paren is inserted.Vblink-matching-paren-distance
  13649. +*If non-nil, is maximum distance to search for matching open-paren.Fblink-matching-open
  13650. +Move cursor momentarily to the beginning of the sexp before point.Fkeyboard-quit
  13651. +Signal a  quit  condition.
  13652. +During execution of Lisp code, this character causes a quit directly.
  13653. +At top-level, as an editor command, this simply beeps.Fset-variable
  13654. +Set VARIABLE to VALUE.  VALUE is a Lisp object.
  13655. +When using this interactively, supply a Lisp expression for VALUE.
  13656. +If you want VALUE to be a string, you must surround it with doublequotes.
  13657. +
  13658. +If VARIABLE has a `variable-interactive' property, that is used as if
  13659. +it were the arg to `interactive' (which see) to interactively read the value.Fchoose-completion
  13660. +Choose the completion that point is in or next to.Fcompletion-list-mode
  13661. +Major mode for buffers showing lists of possible completions.
  13662. +Type \<completion-list-mode-map>\[choose-completion] in the completion list to select the completion near point.
  13663. +Use \<completion-list-mode-map>\[mouse-choose-completion] to select one with the mouse.Vcommand-line-processed
  13664. +t once command line has been processedVinhibit-startup-message
  13665. +*Non-nil inhibits the initial startup message.
  13666. +This is for use in your personal init file, once you are familiar
  13667. +with the contents of the startup message.Vinhibit-startup-echo-area-message
  13668. +*Non-nil inhibits the initial startup echo area message.
  13669. +Inhibition takes effect only if your `.emacs' file contains
  13670. +a line of this form:
  13671. + (setq inhibit-startup-echo-area-message "YOUR-USER-NAME")
  13672. +If your `.emacs' file is byte-compiled, use the following form instead:
  13673. + (eval '(setq inhibit-startup-echo-area-message "YOUR-USER-NAME"))
  13674. +Thus, someone else using a copy of your `.emacs' file will see
  13675. +the startup message unless he personally acts to inhibit it.Vinhibit-default-init
  13676. +*Non-nil inhibits loading the `default' library.Vcommand-switch-alist
  13677. +Alist of command-line switches.
  13678. +Elements look like (SWITCH-STRING . HANDLER-FUNCTION).
  13679. +HANDLER-FUNCTION receives switch name as sole arg;
  13680. +remaining command-line args are in the variable `command-line-args-left'.Vcommand-line-args-left
  13681. +List of command-line args not yet processed.Vcommand-line-functions
  13682. +List of functions to process unrecognized command-line arguments.
  13683. +Each function should access the dynamically bound variables
  13684. +`argi' (the current argument) and `command-line-args-left' (the remaining
  13685. +arguments).  The function should return non-nil only if it recognizes and
  13686. +processes `argi'.  If it does so, it may consume successive arguments by
  13687. +altering `command-line-args-left' to remove them.Vcommand-line-default-directory
  13688. +Default directory to use for command line arguments.
  13689. +This is normally copied from `default-directory' when Emacs starts.Vbefore-init-hook
  13690. +Functions to call after handling urgent options but before init files.
  13691. +The frame system uses this to open frames to display messages while
  13692. +Emacs loads the user's initialization file.Vafter-init-hook
  13693. +Functions to call after loading the init file (`~/.emacs').
  13694. +The call is not protected by a condition-case, so you can set `debug-on-error'
  13695. +in `.emacs', and put all the actual code on `after-init-hook'.Vterm-setup-hook
  13696. +Functions to be called after loading terminal-specific Lisp code.
  13697. +See `run-hooks'.  This variable exists for users to set,
  13698. +so as to override the definitions made by the terminal-specific file.
  13699. +Emacs never sets this variable itself.Vkeyboard-type
  13700. +The brand of keyboard you are using.
  13701. +This variable is used to define
  13702. +the proper function and keypad keys for use under X.  It is used in a
  13703. +fashion analogous to the environment value TERM.Vwindow-setup-hook
  13704. +Normal hook run to initialize window system display.
  13705. +Emacs runs this hook after processing the command line arguments and loading
  13706. +the user's init file.Vinitial-major-mode
  13707. +Major mode command symbol to use for the initial *scratch* buffer.Vinit-file-user
  13708. +Identity of user whose `.emacs' file is or was read.
  13709. +The value is nil if no init file is being used; otherwise, it may be either
  13710. +the null string, meaning that the init file was taken from the user that
  13711. +originally logged in, or it may be a string containing a user's name.
  13712. +
  13713. +In either of the latter cases, `(concat "~" init-file-user "/")'
  13714. +evaluates to the name of the directory where the `.emacs' file was
  13715. +looked for.Vsite-run-file
  13716. +File containing site-wide run-time initializations.
  13717. +This file is loaded at run-time before `~/.emacs'.  It contains inits
  13718. +that need to be in place for the entire site, but which, due to their
  13719. +higher incidence of change, don't make sense to load into emacs'
  13720. +dumped image.  Thus, the run-time load order is: 1. file described in
  13721. +this variable, if non-nil; 2. `~/.emacs'; 3. `default.el'.Viso-8859-1-locale-regexp
  13722. +Regexp that specifies when to enable the ISO 8859-1 character set.
  13723. +We do that if this regexp matches the locale name
  13724. +specified by the LC_ALL, LC_CTYPE and LANG environment variables.Vuser-mail-address
  13725. +Full mailing address of this user.Flambda
  13726. +Return a lambda expression.
  13727. +A call of the form (lambda ARGS DOCSTRING INTERACTIVE BODY) is
  13728. +self-quoting; the result of evaluating the lambda expression is the
  13729. +expression itself.  The lambda expression may then be treated as a
  13730. +function, i. e. stored as the function value of a symbol, passed to
  13731. +funcall or mapcar, etcetera.
  13732. +ARGS should take the same form as an argument list for a `defun'.
  13733. +DOCSTRING should be a string, as described for `defun'.  It may be omitted.
  13734. +INTERACTIVE should be a call to the function `interactive', which see.
  13735. +It may also be omitted.
  13736. +BODY should be a list of lisp expressions.Fone-window-p
  13737. +Returns non-nil if the selected window is the only window (in its frame).
  13738. +Optional arg NOMINI non-nil means don't count the minibuffer
  13739. +even if it is active.
  13740. +
  13741. +The optional arg ALL-FRAMES t means count windows on all frames.
  13742. +If it is `visible', count windows on all visible frames.
  13743. +ALL-FRAMES nil or omitted means count only the selected frame, 
  13744. +plus the minibuffer it uses (which may be on another frame).
  13745. +If ALL-FRAMES is neither nil nor t, count only the selected frame.Fwalk-windows
  13746. +Cycle through all visible windows, calling PROC for each one.
  13747. +PROC is called with a window as argument.
  13748. +Optional second arg MINIBUF t means count the minibuffer window
  13749. +even if not active.  If MINIBUF is neither t nor nil it means
  13750. +not to count the minibuffer even if it is active.
  13751. +
  13752. +Optional third arg ALL-FRAMES, if t, means include all frames.
  13753. +ALL-FRAMES nil or omitted means cycle within the selected frame,
  13754. +but include the minibuffer window (if MINIBUF says so) that that
  13755. +frame uses, even if it is on another frame.
  13756. +If ALL-FRAMES is neither nil nor t, stick strictly to the selected frame.Fminibuffer-window-active-p
  13757. +Return t if WINDOW (a minibuffer window) is now active.Fsuppress-keymap
  13758. +Make MAP override all normally self-inserting keys to be undefined.
  13759. +Normally, as an exception, digits and minus-sign are set to make prefix args,
  13760. +but optional second arg NODIGITS non-nil treats them like other chars.Vkey-substitution-in-progress
  13761. +Used internally by substitute-key-definition.Fsubstitute-key-definition
  13762. +Replace OLDDEF with NEWDEF for any keys in KEYMAP now defined as OLDDEF.
  13763. +In other words, OLDDEF is replaced with NEWDEF where ever it appears.
  13764. +If optional fourth argument OLDMAP is specified, we redefine
  13765. +in KEYMAP as NEWDEF those chars which are defined as OLDDEF in OLDMAP.Fdefine-key-after
  13766. +Add binding in KEYMAP for KEY => DEFINITION, right after AFTER's binding.
  13767. +This is like `define-key' except that the binding for KEY is placed
  13768. +just after the binding for the event AFTER, instead of at the beginning
  13769. +of the map.
  13770. +The order matters when the keymap is used as a menu.
  13771. +KEY must contain just one event type--that is to say, it must be
  13772. +a string or vector of length 1.Fkeyboard-translate
  13773. +Translate character FROM to TO at a low level.
  13774. +This function creates a `keyboard-translate-table' if necessary
  13775. +and then modifies one entry in it.Vglobal-map
  13776. +Default global keymap mapping Emacs keyboard input into commands.
  13777. +The value is a keymap which is usually (but not necessarily) Emacs's
  13778. +global map.Vesc-map
  13779. +Default keymap for ESC (meta) commands.
  13780. +The normal global definition of the character ESC indirects to this keymap.Vctl-x-map
  13781. +Default keymap for C-x commands.
  13782. +The normal global definition of the character C-x indirects to this keymap.Vctl-x-4-map
  13783. +Keymap for subcommands of C-x 4Vctl-x-5-map
  13784. +Keymap for frame commands.Flistify-key-sequence
  13785. +Convert a key sequence to a list of events.Feventp
  13786. +True if the argument is an event object.Fevent-modifiers
  13787. +Returns a list of symbols representing the modifier keys in event EVENT.
  13788. +The elements of the list may include `meta', `control',
  13789. +`shift', `hyper', `super', `alt', `click', `double', `triple', `drag',
  13790. +and `down'.Fevent-basic-type
  13791. +Returns the basic type of the given event (all modifiers removed).
  13792. +The value is an ASCII printing character (not upper case) or a symbol.Fmouse-movement-p
  13793. +Return non-nil if OBJECT is a mouse movement event.Fevent-start
  13794. +Return the starting position of EVENT.
  13795. +If EVENT is a mouse press or a mouse click, this returns the location
  13796. +of the event.
  13797. +If EVENT is a drag, this returns the drag's starting position.
  13798. +The return value is of the form
  13799. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  13800. +The `posn-' functions access elements of such lists.Fevent-end
  13801. +Return the ending location of EVENT.  EVENT should be a click or drag event.
  13802. +If EVENT is a click event, this function is the same as `event-start'.
  13803. +The return value is of the form
  13804. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  13805. +The `posn-' functions access elements of such lists.Fevent-click-count
  13806. +Return the multi-click count of EVENT, a click or drag event.
  13807. +The return value is a positive integer.Fposn-window
  13808. +Return the window in POSITION.
  13809. +POSITION should be a list of the form
  13810. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  13811. +as returned by the `event-start' and `event-end' functions.Fposn-point
  13812. +Return the buffer location in POSITION.
  13813. +POSITION should be a list of the form
  13814. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  13815. +as returned by the `event-start' and `event-end' functions.Fposn-x-y
  13816. +Return the x and y coordinates in POSITION.
  13817. +POSITION should be a list of the form
  13818. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  13819. +as returned by the `event-start' and `event-end' functions.Fposn-col-row
  13820. +Return the column and row in POSITION, measured in characters.
  13821. +POSITION should be a list of the form
  13822. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  13823. +as returned by the `event-start' and `event-end' functions.
  13824. +For a scroll-bar event, the result column is 0, and the row
  13825. +corresponds to the vertical position of the click in the scroll bar.Fposn-timestamp
  13826. +Return the timestamp of POSITION.
  13827. +POSITION should be a list of the form
  13828. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  13829. +as returned by the `event-start' and `event-end' functions.Fbaud-rate
  13830. +Obsolete function returning the value of the `baud-rate' variable.
  13831. +Please convert your programs to use the variable `baud-rate' directly.Frun-hooks
  13832. +Takes hook names and runs each one in turn.  Major mode functions use this.
  13833. +Each argument should be a symbol, a hook variable.
  13834. +These symbols are processed in the order specified.
  13835. +If a hook symbol has a non-nil value, that value may be a function
  13836. +or a list of functions to be called to run the hook.
  13837. +If the value is a function, it is called with no arguments.
  13838. +If it is a list, the elements are called, in order, with no arguments.Frun-hook-with-args
  13839. +Run HOOK with the specified arguments ARGS.
  13840. +HOOK should be a symbol, a hook variable.  If HOOK has a non-nil
  13841. +value, that value may be a function or a list of functions to be
  13842. +called to run the hook.  If the value is a function, it is called with
  13843. +the given arguments and its return value is returned.  If it is a list
  13844. +of functions, those functions are called, in order,
  13845. +with the given arguments ARGS.
  13846. +It is best not to depend on the value return by `run-hook-with-args',
  13847. +as that may change.Vrun-hooks
  13848. +Variable by which C primitives find the function `run-hooks'.
  13849. +Don't change it.Fadd-hook
  13850. +Add to the value of HOOK the function FUNCTION.
  13851. +FUNCTION is not added if already present.
  13852. +FUNCTION is added (if necessary) at the beginning of the hook list
  13853. +unless the optional argument APPEND is non-nil, in which case
  13854. +FUNCTION is added at the end.
  13855. +
  13856. +HOOK should be a symbol, and FUNCTION may be any valid function.  If
  13857. +HOOK is void, it is first set to nil.  If HOOK's value is a single
  13858. +function, it is changed to a list of functions.Fremove-hook
  13859. +Remove from the value of HOOK the function FUNCTION.
  13860. +HOOK should be a symbol, and FUNCTION may be any valid function.  If
  13861. +FUNCTION isn't the value of HOOK, or, if FUNCTION doesn't appear in the
  13862. +list of hooks to run in HOOK, then nothing is done.  See `add-hook'.Feval-after-load
  13863. +Arrange that, if FILE is ever loaded, FORM will be run at that time.
  13864. +This makes or adds to an entry on `after-load-alist'.
  13865. +It does nothing if FORM is already on the list for FILE.
  13866. +FILE should be the name of a library, with no directory name.Feval-next-after-load
  13867. +Read the following input sexp, and run it whenever FILE is loaded.
  13868. +This makes or adds to an entry on `after-load-alist'.
  13869. +FILE should be the name of a library, with no directory name.Fread-quoted-char
  13870. +Like `read-char', except that if the first character read is an octal
  13871. +digit, we read up to two more octal digits and return the character
  13872. +represented by the octal number consisting of those digits.
  13873. +Optional argument PROMPT specifies a string to use to prompt the user.Fforce-mode-line-update
  13874. +Force the mode-line of the current buffer to be redisplayed.
  13875. +With optional non-nil ALL, force redisplay of all mode-lines.Fmomentary-string-display
  13876. +Momentarily display STRING in the buffer at POS.
  13877. +Display remains until next character is typed.
  13878. +If the char is EXIT-CHAR (optional third arg, default is SPC) it is swallowed;
  13879. +otherwise it is then available as input (as a command if nothing else).
  13880. +Display MESSAGE (optional fourth arg) in the echo area.
  13881. +If MESSAGE is nil, instructions to type EXIT-CHAR are displayed there.Fignore
  13882. +Do nothing and return nil.
  13883. +This function accepts any number of arguments, but ignores them.Ferror
  13884. +Signal an error, making error message by passing all args to `format'.Fstart-process-shell-command
  13885. +Start a program in a subprocess.  Return the process object for it.
  13886. +Args are NAME BUFFER COMMAND &rest COMMAND-ARGS.
  13887. +NAME is name for process.  It is modified if necessary to make it unique.
  13888. +BUFFER is the buffer or (buffer-name) to associate with the process.
  13889. + Process output goes at end of that buffer, unless you specify
  13890. + an output stream or filter function to handle the output.
  13891. + BUFFER may be also nil, meaning that this process is not associated
  13892. + with any buffer
  13893. +Third arg is command name, the name of a shell command.
  13894. +Remaining arguments are the arguments for the command.
  13895. +Wildcards and redirection are handled as usual in the shell.Fsave-match-data
  13896. +Execute the BODY forms, restoring the global value of the match data.Fshell-quote-argument
  13897. +Quote an argument for passing as argument to an inferior shell.Fmake-syntax-table
  13898. +Return a new syntax table.
  13899. +It inherits all letters and control characters from the standard
  13900. +syntax table; other characters are copied from the standard syntax table.Vtext-mode-syntax-table
  13901. +Syntax table used while in text mode.Vtext-mode-abbrev-table
  13902. +Abbrev table used while in text mode.Vtext-mode-map
  13903. +Keymap for Text mode.
  13904. +Many other modes, such as Mail mode, Outline mode and Indented Text mode,
  13905. +inherit all the commands defined in this map.Ftext-mode
  13906. +Major mode for editing text intended for humans to read.
  13907. +Special commands:
  13908. +\{text-mode-map}
  13909. +Turning on Text mode calls the value of the variable `text-mode-hook',
  13910. +if that value is non-nil.Vindented-text-mode-map
  13911. +Keymap for Indented Text mode.
  13912. +All the commands defined in Text mode are inherited unless overridden.Findented-text-mode
  13913. +Major mode for editing text with indented paragraphs.
  13914. +In this mode, paragraphs are delimited only by blank lines.
  13915. +You can thus get the benefit of adaptive filling
  13916. + (see the variable `adaptive-fill-mode').
  13917. +\{indented-text-mode-map}
  13918. +Turning on `indented-text-mode' calls the value of the variable
  13919. +`text-mode-hook', if that value is non-nil.Fcenter-paragraph
  13920. +Center each nonblank line in the paragraph at or after point.
  13921. +See `center-line' for more info.Fcenter-region
  13922. +Center each nonblank line starting in the region.
  13923. +See `center-line' for more info.Fcenter-line
  13924. +Center the line point is on, within the width specified by `fill-column'.
  13925. +This means adjusting the indentation so that it equals
  13926. +the distance between the end of the text and `fill-column'.Vvc-master-templates
  13927. +*Where to look for version-control master files.
  13928. +The first pair corresponding to a given back end is used as a template
  13929. +when creating new masters.Vvc-make-backup-files
  13930. +*If non-nil, backups of registered files are made as with other files.
  13931. +If nil (the default), files covered by version control don't get backups.Vvc-rcs-status
  13932. +*If non-nil, revision and locks on RCS working file displayed in modeline.
  13933. +Otherwise, not displayed.Vvc-file-prop-obarray
  13934. +Obarray for per-file properties.Fvc-name
  13935. +Return the master name of a file, nil if it is not registered.Fvc-backend-deduce
  13936. +Return the version-control type of a file, nil if it is not registered.Fvc-toggle-read-only
  13937. +Change read-only status of current buffer, perhaps via version control.
  13938. +If the buffer is visiting a file registered with version control,
  13939. +then check the file in or out.  Otherwise, just change the read-only flag
  13940. +of the buffer.Fvc-mode-line
  13941. +Set `vc-mode' to display type of version control for FILE.
  13942. +The value is set in the current buffer, which should be the buffer
  13943. +visiting FILE.Fvc-file-not-found-hook
  13944. +When file is not found, try to check it out from RCS or SCCS.
  13945. +Returns t if checkout was successful, nil otherwise.Fcount-windows
  13946. +Returns the number of visible windows.
  13947. +Optional arg NO-MINI non-nil means don't count the minibuffer
  13948. +even if it is active.Fbalance-windows
  13949. +Makes all visible windows the same height (approximately).Vsplit-window-keep-point
  13950. +*If non-nil, split windows keeps the original point in both children.
  13951. +This is often more convenient for editing.
  13952. +If nil, adjust point in each of the two windows to minimize redisplay.
  13953. +This is convenient on slow terminals, but point can move strangely.Fsplit-window-vertically
  13954. +Split current window into two windows, one above the other.
  13955. +The uppermost window gets ARG lines and the other gets the rest.
  13956. +Negative arg means select the size of the lowermost window instead.
  13957. +With no argument, split equally or close to it.
  13958. +Both windows display the same buffer now current.
  13959. +
  13960. +If the variable split-window-keep-point is non-nil, both new windows
  13961. +will get the same value of point as the current window.  This is often
  13962. +more convenient for editing.
  13963. +
  13964. +Otherwise, we chose window starts so as to minimize the amount of
  13965. +redisplay; this is convenient on slow terminals.  The new selected
  13966. +window is the one that the current value of point appears in.  The
  13967. +value of point can change if the text around point is hidden by the
  13968. +new mode line.Fsplit-window-horizontally
  13969. +Split current window into two windows side by side.
  13970. +This window becomes the leftmost of the two, and gets ARG columns.
  13971. +Negative arg means select the size of the rightmost window instead.
  13972. +No arg means split equally.Fenlarge-window-horizontally
  13973. +Make current window ARG columns wider.Fshrink-window-horizontally
  13974. +Make current window ARG columns narrower.Fshrink-window-if-larger-than-buffer
  13975. +Shrink the WINDOW to be as small as possible to display its contents.
  13976. +Do not shrink to less than `window-min-height' lines.
  13977. +Do nothing if the buffer contains more lines than the present window height,
  13978. +or if some of the window's contents are scrolled out of view,
  13979. +or if the window is not the full width of the frame,
  13980. +or if the window is the only window of its frame.Vemacs-version
  13981. +Version numbers of this version of Emacs.Vemacs-build-time
  13982. +Time at which Emacs was dumped out.Femacs-version
  13983. +Return string describing the version of Emacs that is running.
  13984. +If optional argument HERE is non-nil, insert string at point.
  13985. +Don't use this function in programs to choose actions according
  13986. +to the system configuration; look at `system-configuration' instead.
  13987. \ No newline at end of file
  13988. diff -ru --new-file baseline/fsf/emacs/etc/DOC-19.28.1 amiga/fsf/emacs/etc/DOC-19.28.1
  13989. --- baseline/fsf/emacs/etc/DOC-19.28.1    Wed Dec 31 17:00:00 1969
  13990. +++ amiga/fsf/emacs/etc/DOC-19.28.1    Sun Oct 15 17:05:38 1995
  13991. @@ -0,0 +1,11272 @@
  13992. +Fredraw-frame
  13993. +Clear frame FRAME and output again what is supposed to appear on it.
  13994. +
  13995. +(redraw-frame FRAME)Fredraw-frame
  13996. +Clear frame FRAME and output again what is supposed to appear on it.
  13997. +
  13998. +(redraw-frame FRAME)Fredraw-display
  13999. +Clear and redisplay all visible frames.
  14000. +
  14001. +(redraw-display)Fframe-or-buffer-changed-p
  14002. +Return non-nil if the frame and buffer state appears to have changed.
  14003. +The state variable is an internal vector containing all frames and buffers,
  14004. +along with the buffers' read-only and modified flags, which allows a fast
  14005. +check to see whether the menu bars might need to be recomputed.
  14006. +If this function returns non-nil, it updates the internal vector to reflect
  14007. +the current state.
  14008. +
  14009. +
  14010. +(frame-or-buffer-changed-p)Fopen-termscript
  14011. +Start writing all terminal output to FILE as well as the terminal.
  14012. +FILE = nil means just close any termscript file currently open.
  14013. +
  14014. +(open-termscript FILE)Fsend-string-to-terminal
  14015. +Send STRING to the terminal without alteration.
  14016. +Control characters in STRING will have terminal-dependent effects.
  14017. +
  14018. +(send-string-to-terminal STR)Fding
  14019. +Beep, or flash the screen.
  14020. +Also, unless an argument is given,
  14021. +terminate any keyboard macro currently executing.
  14022. +
  14023. +(ding &optional ARG)Fsleep-for
  14024. +Pause, without updating display, for SECONDS seconds.
  14025. +SECONDS may be a floating-point value, meaning that you can wait for a
  14026. +fraction of a second.  Optional second arg MILLISECONDS specifies an
  14027. +additional wait period, in milliseconds; this may be useful if your
  14028. +Emacs was built without floating point support.
  14029. +(Not all operating systems support waiting for a fraction of a second.)
  14030. +
  14031. +(sleep-for SECONDS &optional MILLISECONDS)Fsit-for
  14032. +Perform redisplay, then wait for SECONDS seconds or until input is available.
  14033. +SECONDS may be a floating-point value, meaning that you can wait for a
  14034. +fraction of a second.  Optional second arg MILLISECONDS specifies an
  14035. +additional wait period, in milliseconds; this may be useful if your
  14036. +Emacs was built without floating point support.
  14037. +(Not all operating systems support waiting for a fraction of a second.)
  14038. +Optional third arg non-nil means don't redisplay, just wait for input.
  14039. +Redisplay is preempted as always if input arrives, and does not happen
  14040. +if input is available before it starts.
  14041. +Value is t if waited the full time with no input arriving.
  14042. +
  14043. +(sit-for SECONDS &optional MILLISECONDS NODISP)Vbaud-rate
  14044. +*The output baud rate of the terminal.
  14045. +On most systems, changing this value will affect the amount of padding
  14046. +and the other strategic decisions made during redisplay.Vinverse-video
  14047. +*Non-nil means invert the entire frame display.
  14048. +This means everything is in inverse video which otherwise would not be.Vvisible-bell
  14049. +*Non-nil means try to flash the frame to represent a bell.Vno-redraw-on-reenter
  14050. +*Non-nil means no need to redraw entire frame after suspending.
  14051. +A non-nil value is useful if the terminal can automatically preserve
  14052. +Emacs's frame display when you reenter Emacs.
  14053. +It is up to you to set this variable if your terminal can do that.Vwindow-system
  14054. +A symbol naming the window-system under which Emacs is running
  14055. +(such as `x'), or nil if emacs is running on an ordinary terminal.Vwindow-system-version
  14056. +The version number of the window system in use.
  14057. +For X windows, this is 10 or 11.Vcursor-in-echo-area
  14058. +Non-nil means put cursor in minibuffer, at end of any message there.Vglyph-table
  14059. +Table defining how to output a glyph code to the frame.
  14060. +If not nil, this is a vector indexed by glyph code to define the glyph.
  14061. +Each element can be:
  14062. + integer: a glyph code which this glyph is an alias for.
  14063. + string: output this glyph using that string (not impl. in X windows).
  14064. + nil: this glyph mod 256 is char code to output,
  14065. +    and this glyph / 256 is face code for X windows (see `face-id').Vstandard-display-table
  14066. +Display table to use for buffers that specify none.
  14067. +See `buffer-display-table' for more information.Fframep
  14068. +Return non-nil if OBJECT is a frame.
  14069. +Value is t for a termcap frame (a character-only terminal),
  14070. +`x' for an Emacs frame that is really an X window.
  14071. +Also see `live-frame-p'.
  14072. +
  14073. +(framep OBJECT)Fframe-live-p
  14074. +Return non-nil if OBJECT is a frame which has not been deleted.
  14075. +Value is nil if OBJECT is not a live frame.  If object is a live
  14076. +frame, the return value indicates what sort of output device it is
  14077. +displayed on.  Value is t for a termcap frame (a character-only
  14078. +terminal), `x' for an Emacs frame being displayed in an X window.
  14079. +
  14080. +(frame-live-p OBJECT)Fselect-frame
  14081. +Select the frame FRAME.
  14082. +Subsequent editing commands apply to its selected window.
  14083. +The selection of FRAME lasts until the next time the user does
  14084. +something to select a different frame, or until the next time this
  14085. +function is called.
  14086. +
  14087. +(select-frame FRAME &optional NO-ENTER)Fhandle-switch-frame
  14088. +Handle a switch-frame event EVENT.
  14089. +Switch-frame events are usually bound to this function.
  14090. +A switch-frame event tells Emacs that the window manager has requested
  14091. +that the user's events be directed to the frame mentioned in the event.
  14092. +This function selects the selected window of the frame of EVENT.
  14093. +
  14094. +If EVENT is frame object, handle it as if it were a switch-frame event
  14095. +to that frame.
  14096. +
  14097. +(handle-switch-frame FRAME &optional NO-ENTER)Fselected-frame
  14098. +Return the frame that is now selected.
  14099. +
  14100. +(selected-frame)Fwindow-frame
  14101. +Return the frame object that window WINDOW is on.
  14102. +
  14103. +(window-frame WINDOW)Fframe-first-window
  14104. +Returns the topmost, leftmost window of FRAME.
  14105. +If omitted, FRAME defaults to the currently selected frame.
  14106. +
  14107. +(frame-first-window &optional FRAME)Fframe-root-window
  14108. +Returns the root-window of FRAME.
  14109. +If omitted, FRAME defaults to the currently selected frame.
  14110. +
  14111. +(frame-root-window &optional FRAME)Fframe-selected-window
  14112. +Return the selected window of frame object FRAME.
  14113. +If omitted, FRAME defaults to the currently selected frame.
  14114. +
  14115. +(frame-selected-window &optional FRAME)Fset-frame-selected-window
  14116. +Set the selected window of frame object FRAME to WINDOW.
  14117. +If FRAME is nil, the selected frame is used.
  14118. +If FRAME is the selected frame, this makes WINDOW the selected window.
  14119. +
  14120. +(set-frame-selected-window FRAME WINDOW)Fframe-list
  14121. +Return a list of all frames.
  14122. +
  14123. +(frame-list)Fnext-frame
  14124. +Return the next frame in the frame list after FRAME.
  14125. +By default, skip minibuffer-only frames.
  14126. +If omitted, FRAME defaults to the selected frame.
  14127. +If optional argument MINIFRAME is nil, exclude minibuffer-only frames.
  14128. +If MINIBUF is a window, include only its own frame
  14129. +and any frame now using that window as the minibuffer.
  14130. +If MINIFRAME is `visible', include all visible frames.
  14131. +If MINIBUF is 0, include all visible and iconified frames.
  14132. +Otherwise, include all frames.
  14133. +
  14134. +(next-frame &optional FRAME MINIFRAME)Fprevious-frame
  14135. +Return the previous frame in the frame list before FRAME.
  14136. +By default, skip minibuffer-only frames.
  14137. +If omitted, FRAME defaults to the selected frame.
  14138. +If optional argument MINIFRAME is nil, exclude minibuffer-only frames.
  14139. +If MINIBUF is a window, include only its own frame
  14140. +and any frame now using that window as the minibuffer.
  14141. +If MINIFRAME is `visible', include all visible frames.
  14142. +If MINIBUF is 0, include all visible and iconified frames.
  14143. +Otherwise, include all frames.
  14144. +
  14145. +(previous-frame &optional FRAME MINIFRAME)Fdelete-frame
  14146. +Delete FRAME, permanently eliminating it from use.
  14147. +If omitted, FRAME defaults to the selected frame.
  14148. +A frame may not be deleted if its minibuffer is used by other frames.
  14149. +Normally, you may not delete a frame if all other frames are invisible,
  14150. +but if the second optional argument FORCE is non-nil, you may do so.
  14151. +
  14152. +(delete-frame &optional FRAME FORCE)Fmouse-position
  14153. +Return a list (FRAME X . Y) giving the current mouse frame and position.
  14154. +The position is given in character cells, where (0, 0) is the
  14155. +upper-left corner.
  14156. +If Emacs is running on a mouseless terminal or hasn't been programmed
  14157. +to read the mouse position, it returns the selected frame for FRAME
  14158. +and nil for X and Y.
  14159. +
  14160. +(mouse-position)Fmouse-pixel-position
  14161. +Return a list (FRAME X . Y) giving the current mouse frame and position.
  14162. +The position is given in pixel units, where (0, 0) is the
  14163. +upper-left corner.
  14164. +If Emacs is running on a mouseless terminal or hasn't been programmed
  14165. +to read the mouse position, it returns the selected frame for FRAME
  14166. +and nil for X and Y.
  14167. +
  14168. +(mouse-pixel-position)Fset-mouse-position
  14169. +Move the mouse pointer to the center of character cell (X,Y) in FRAME.
  14170. +WARNING:  If you use this under X windows,
  14171. +you should call `unfocus-frame' afterwards.
  14172. +
  14173. +(set-mouse-position FRAME X Y)Fset-mouse-pixel-position
  14174. +Move the mouse pointer to pixel position (X,Y) in FRAME.
  14175. +WARNING:  If you use this under X windows,
  14176. +you should call `unfocus-frame' afterwards.
  14177. +
  14178. +(set-mouse-pixel-position FRAME X Y)Fmake-frame-visible
  14179. +Make the frame FRAME visible (assuming it is an X-window).
  14180. +If omitted, FRAME defaults to the currently selected frame.
  14181. +
  14182. +(make-frame-visible &optional FRAME)Fmake-frame-invisible
  14183. +Make the frame FRAME invisible (assuming it is an X-window).
  14184. +If omitted, FRAME defaults to the currently selected frame.
  14185. +Normally you may not make FRAME invisible if all other frames are invisible,
  14186. +but if the second optional argument FORCE is non-nil, you may do so.
  14187. +
  14188. +(make-frame-invisible &optional FRAME FORCE)Ficonify-frame
  14189. +Make the frame FRAME into an icon.
  14190. +If omitted, FRAME defaults to the currently selected frame.
  14191. +
  14192. +(iconify-frame &optional FRAME)Fframe-visible-p
  14193. +Return t if FRAME is now "visible" (actually in use for display).
  14194. +A frame that is not "visible" is not updated and, if it works through
  14195. +a window system, it may not show at all.
  14196. +Return the symbol `icon' if frame is visible only as an icon.
  14197. +
  14198. +(frame-visible-p FRAME)Fvisible-frame-list
  14199. +Return a list of all frames now "visible" (being updated).
  14200. +
  14201. +(visible-frame-list)Fraise-frame
  14202. +Bring FRAME to the front, so it occludes any frames it overlaps.
  14203. +If FRAME is invisible, make it visible.
  14204. +If Emacs is displaying on an ordinary terminal or some other device which
  14205. +doesn't support multiple overlapping frames, this function does nothing.
  14206. +
  14207. +(raise-frame FRAME)Flower-frame
  14208. +Send FRAME to the back, so it is occluded by any frames that overlap it.
  14209. +If Emacs is displaying on an ordinary terminal or some other device which
  14210. +doesn't support multiple overlapping frames, this function does nothing.
  14211. +
  14212. +(lower-frame FRAME)Fredirect-frame-focus
  14213. +Arrange for keystrokes typed at FRAME to be sent to FOCUS-FRAME.
  14214. +In other words, switch-frame events caused by events in FRAME will
  14215. +request a switch to FOCUS-FRAME, and `last-event-frame' will be
  14216. +FOCUS-FRAME after reading an event typed at FRAME.
  14217. +
  14218. +If FOCUS-FRAME is omitted or nil, any existing redirection is
  14219. +cancelled, and the frame again receives its own keystrokes.
  14220. +
  14221. +Focus redirection is useful for temporarily redirecting keystrokes to
  14222. +a surrogate minibuffer frame when a frame doesn't have its own
  14223. +minibuffer window.
  14224. +
  14225. +A frame's focus redirection can be changed by select-frame.  If frame
  14226. +FOO is selected, and then a different frame BAR is selected, any
  14227. +frames redirecting their focus to FOO are shifted to redirect their
  14228. +focus to BAR.  This allows focus redirection to work properly when the
  14229. +user switches from one frame to another using `select-window'.
  14230. +
  14231. +This means that a frame whose focus is redirected to itself is treated
  14232. +differently from a frame whose focus is redirected to nil; the former
  14233. +is affected by select-frame, while the latter is not.
  14234. +
  14235. +The redirection lasts until `redirect-frame-focus' is called to change it.
  14236. +
  14237. +(redirect-frame-focus FRAME &optional FOCUS-FRAME)Fframe-focus
  14238. +Return the frame to which FRAME's keystrokes are currently being sent.
  14239. +This returns nil if FRAME's focus is not redirected.
  14240. +See `redirect-frame-focus'.
  14241. +
  14242. +(frame-focus FRAME)Fframe-parameters
  14243. +Return the parameters-alist of frame FRAME.
  14244. +It is a list of elements of the form (PARM . VALUE), where PARM is a symbol.
  14245. +The meaningful PARMs depend on the kind of frame.
  14246. +If FRAME is omitted, return information on the currently selected frame.
  14247. +
  14248. +(frame-parameters &optional FRAME)Fmodify-frame-parameters
  14249. +Modify the parameters of frame FRAME according to ALIST.
  14250. +ALIST is an alist of parameters to change and their new values.
  14251. +Each element of ALIST has the form (PARM . VALUE), where PARM is a symbol.
  14252. +The meaningful PARMs depend on the kind of frame; undefined PARMs are ignored.
  14253. +
  14254. +(modify-frame-parameters FRAME ALIST)Fframe-char-height
  14255. +Height in pixels of a line in the font in frame FRAME.
  14256. +If FRAME is omitted, the selected frame is used.
  14257. +For a terminal frame, the value is always 1.
  14258. +
  14259. +(frame-char-height &optional FRAME)Fframe-char-width
  14260. +Width in pixels of characters in the font in frame FRAME.
  14261. +If FRAME is omitted, the selected frame is used.
  14262. +The width is the same for all characters, because
  14263. +currently Emacs supports only fixed-width fonts.
  14264. +For a terminal screen, the value is always 1.
  14265. +
  14266. +(frame-char-width &optional FRAME)Fframe-pixel-height
  14267. +Return a FRAME's height in pixels.
  14268. +For a terminal frame, the result really gives the height in characters.
  14269. +If FRAME is omitted, the selected frame is used.
  14270. +
  14271. +(frame-pixel-height &optional FRAME)Fframe-pixel-width
  14272. +Return FRAME's width in pixels.
  14273. +For a terminal frame, the result really gives the width in characters.
  14274. +If FRAME is omitted, the selected frame is used.
  14275. +
  14276. +(frame-pixel-width &optional FRAME)Fset-frame-height
  14277. +Specify that the frame FRAME has LINES lines.
  14278. +Optional third arg non-nil means that redisplay should use LINES lines
  14279. +but that the idea of the actual height of the frame should not be changed.
  14280. +
  14281. +(set-frame-height FRAME ROWS &optional PRETEND)Fset-frame-width
  14282. +Specify that the frame FRAME has COLS columns.
  14283. +Optional third arg non-nil means that redisplay should use COLS columns
  14284. +but that the idea of the actual width of the frame should not be changed.
  14285. +
  14286. +(set-frame-width FRAME COLS &optional PRETEND)Fset-frame-size
  14287. +Sets size of FRAME to COLS by ROWS, measured in characters.
  14288. +
  14289. +(set-frame-size FRAME COLS ROWS)Fset-frame-position
  14290. +Sets position of FRAME in pixels to XOFFSET by YOFFSET.
  14291. +This is actually the position of the upper left corner of the frame.
  14292. +Negative values for XOFFSET or YOFFSET are interpreted relative to
  14293. +the rightmost or bottommost possible position (that stays within the screen).
  14294. +
  14295. +(set-frame-position FRAME XOFFSET YOFFSET)Vterminal-frame
  14296. +The initial frame-object, which represents Emacs's stdout.Vemacs-iconified
  14297. +Non-nil if all of emacs is iconified and frame updates are not needed.Vdefault-minibuffer-frame
  14298. +Minibufferless frames use this frame's minibuffer.
  14299. +
  14300. +Emacs cannot create minibufferless frames unless this is set to an
  14301. +appropriate surrogate.
  14302. +
  14303. +Emacs consults this variable only when creating minibufferless
  14304. +frames; once the frame is created, it sticks with its assigned
  14305. +minibuffer, no matter what this variable is set to.  This means that
  14306. +this variable doesn't necessarily say anything meaningful about the
  14307. +current set of frames, or where the minibuffer is currently being
  14308. +displayed.Vdefault-frame-alist
  14309. +Alist of default values for frame creation.
  14310. +These may be set in your init file, like this:
  14311. +  (setq default-frame-alist '((width . 80) (height . 55)))
  14312. +These override values given in window system configuration data, like
  14313. +X Windows' defaults database.
  14314. +For values specific to the first Emacs frame, see `initial-frame-alist'.
  14315. +For values specific to the separate minibuffer frame, see
  14316. +`minibuffer-frame-alist'.Fframe-height
  14317. +Return number of lines available for display on FRAME.
  14318. +If FRAME is omitted, describe the currently selected frame.
  14319. +
  14320. +(frame-height &optional FRAME)Fframe-width
  14321. +Return number of columns available for display on FRAME.
  14322. +If FRAME is omitted, describe the currently selected frame.
  14323. +
  14324. +(frame-width &optional FRAME)Fset-screen-height
  14325. +Tell redisplay that the screen has LINES lines.
  14326. +Optional second arg non-nil means that redisplay should use LINES lines
  14327. +but that the idea of the actual height of the screen should not be changed.
  14328. +
  14329. +(set-screen-height LINES &optional PRETEND)Fset-screen-width
  14330. +Tell redisplay that the screen has COLS columns.
  14331. +Optional second arg non-nil means that redisplay should use COLS columns
  14332. +but that the idea of the actual width of the screen should not be changed.
  14333. +
  14334. +(set-screen-width COLS &optional PRETEND)Fmouse-pixel-position
  14335. +Return a list (FRAME X . Y) giving the current mouse frame and position.
  14336. +The position is given in pixel units, where (0, 0) is the
  14337. +upper-left corner.
  14338. +If Emacs is running on a mouseless terminal or hasn't been programmed
  14339. +to read the mouse position, it returns the selected frame for FRAME
  14340. +and nil for X and Y.
  14341. +
  14342. +(mouse-pixel-position)Vterminal-frame
  14343. +The initial frame-object, which represents Emacs's stdout.Vdefault-frame-alist
  14344. +Alist of default values for frame creation.
  14345. +These may be set in your init file, like this:
  14346. +  (setq default-frame-alist '((width . 80) (height . 55)))
  14347. +These override values given in window system configuration data, like
  14348. +X Windows' defaults database.
  14349. +For values specific to the first Emacs frame, see `initial-frame-alist'.
  14350. +For values specific to the separate minibuffer frame, see
  14351. +`minibuffer-frame-alist'.Vglobal-mode-string
  14352. +String (or mode line construct) included (normally) in `mode-line-format'.Voverlay-arrow-position
  14353. +Marker for where to display an arrow on top of the buffer text.
  14354. +This must be the beginning of a line in order to work.
  14355. +See also `overlay-arrow-string'.Voverlay-arrow-string
  14356. +String to display as an arrow.  See also `overlay-arrow-position'.Vscroll-step
  14357. +*The number of lines to try scrolling a window by when point moves out.
  14358. +If that fails to bring point back on frame, point is centered instead.
  14359. +If this is zero, point is always centered after it moves off frame.Vdebug-end-pos
  14360. +Don't askVtruncate-partial-width-windows
  14361. +*Non-nil means truncate lines in all windows less than full frame wide.Vmode-line-inverse-video
  14362. +*Non-nil means use inverse video for the mode line.Vline-number-display-limit
  14363. +*Maximum buffer size for which line number should be displayed.Vhighlight-nonselected-windows
  14364. +*Non-nil means highlight region even in nonselected windows.Fwindowp
  14365. +Returns t if OBJ is a window.
  14366. +
  14367. +(windowp OBJ)Fwindow-live-p
  14368. +Returns t if OBJ is a window which is currently visible.
  14369. +
  14370. +(window-live-p OBJ)Fselected-window
  14371. +Return the window that the cursor now appears in and commands apply to.
  14372. +
  14373. +(selected-window)Fminibuffer-window
  14374. +Return the window used now for minibuffers.
  14375. +If the optional argument FRAME is specified, return the minibuffer window
  14376. +used by that frame.
  14377. +
  14378. +(minibuffer-window &optional FRAME)Fwindow-minibuffer-p
  14379. +Returns non-nil if WINDOW is a minibuffer window.
  14380. +
  14381. +(window-minibuffer-p &optional WINDOW)Fpos-visible-in-window-p
  14382. +Return t if position POS is currently on the frame in WINDOW.
  14383. +Returns nil if that position is scrolled vertically out of view.
  14384. +POS defaults to point; WINDOW, to the selected window.
  14385. +
  14386. +(pos-visible-in-window-p &optional POS WINDOW)Fwindow-buffer
  14387. +Return the buffer that WINDOW is displaying.
  14388. +
  14389. +(window-buffer &optional WINDOW)Fwindow-height
  14390. +Return the number of lines in WINDOW (including its mode line).
  14391. +
  14392. +(window-height &optional WINDOW)Fwindow-width
  14393. +Return the number of display columns in WINDOW.
  14394. +This is the width that is usable columns available for text in WINDOW.
  14395. +If you want to find out how many columns WINDOW takes up,
  14396. +use  (let ((edges (window-edges))) (- (nth 2 edges) (nth 0 edges))).
  14397. +
  14398. +(window-width &optional WINDOW)Fwindow-hscroll
  14399. +Return the number of columns by which WINDOW is scrolled from left margin.
  14400. +
  14401. +(window-hscroll &optional WINDOW)Fset-window-hscroll
  14402. +Set number of columns WINDOW is scrolled from left margin to NCOL.
  14403. +NCOL should be zero or positive.
  14404. +
  14405. +(set-window-hscroll WINDOW NCOL)Fwindow-edges
  14406. +Return a list of the edge coordinates of WINDOW.
  14407. +(LEFT TOP RIGHT BOTTOM), all relative to 0, 0 at top left corner of frame.
  14408. +RIGHT is one more than the rightmost column used by WINDOW,
  14409. +and BOTTOM is one more than the bottommost row used by WINDOW
  14410. + and its mode-line.
  14411. +
  14412. +(window-edges &optional WINDOW)Fcoordinates-in-window-p
  14413. +Return non-nil if COORDINATES are in WINDOW.
  14414. +COORDINATES is a cons of the form (X . Y), X and Y being distances
  14415. +measured in characters from the upper-left corner of the frame.
  14416. +(0 .  0) denotes the character in the upper left corner of the
  14417. +frame.
  14418. +If COORDINATES are in the text portion of WINDOW,
  14419. +   the coordinates relative to the window are returned.
  14420. +If they are in the mode line of WINDOW, `mode-line' is returned.
  14421. +If they are on the border between WINDOW and its right sibling,
  14422. +   `vertical-line' is returned.
  14423. +
  14424. +(coordinates-in-window-p COORDINATES WINDOW)Fwindow-at
  14425. +Return window containing coordinates X and Y on FRAME.
  14426. +If omitted, FRAME defaults to the currently selected frame.
  14427. +The top left corner of the frame is considered to be row 0,
  14428. +column 0.
  14429. +
  14430. +(window-at X Y &optional FRAME)Fwindow-point
  14431. +Return current value of point in WINDOW.
  14432. +For a nonselected window, this is the value point would have
  14433. +if that window were selected.
  14434. +
  14435. +Note that, when WINDOW is the selected window and its buffer
  14436. +is also currently selected, the value returned is the same as (point).
  14437. +It would be more strictly correct to return the `top-level' value
  14438. +of point, outside of any save-excursion forms.
  14439. +But that is hard to define.
  14440. +
  14441. +(window-point &optional WINDOW)Fwindow-start
  14442. +Return position at which display currently starts in WINDOW.
  14443. +
  14444. +(window-start &optional WINDOW)Fwindow-end
  14445. +Return position at which display currently ends in WINDOW.
  14446. +This is updated by redisplay, when it runs to completion.
  14447. +Simply changing the buffer text or setting `window-start'
  14448. +does not update this value.
  14449. +
  14450. +(window-end &optional WINDOW)Fset-window-point
  14451. +Make point value in WINDOW be at position POS in WINDOW's buffer.
  14452. +
  14453. +(set-window-point WINDOW POS)Fset-window-start
  14454. +Make display in WINDOW start at position POS in WINDOW's buffer.
  14455. +Optional third arg NOFORCE non-nil inhibits next redisplay
  14456. +from overriding motion of point in order to display at this exact start.
  14457. +
  14458. +(set-window-start WINDOW POS &optional NOFORCE)Fwindow-dedicated-p
  14459. +Return WINDOW's dedicated object, usually t or nil.
  14460. +See also `set-window-dedicated-p'.
  14461. +
  14462. +(window-dedicated-p WINDOW)Fset-window-dedicated-p
  14463. +Control whether WINDOW is dedicated to the buffer it displays.
  14464. +If it is dedicated, Emacs will not automatically change
  14465. +which buffer appears in it.
  14466. +The second argument is the new value for the dedication flag;
  14467. +non-nil means yes.
  14468. +
  14469. +(set-window-dedicated-p WINDOW ARG)Fwindow-display-table
  14470. +Return the display-table that WINDOW is using.
  14471. +
  14472. +(window-display-table &optional WINDOW)Fset-window-display-table
  14473. +Set WINDOW's display-table to TABLE.
  14474. +
  14475. +(set-window-display-table WINDOW TABLE)Fdelete-window
  14476. +Remove WINDOW from the display.  Default is selected window.
  14477. +
  14478. +(delete-window &optional WINDOW)Fnext-window
  14479. +Return next window after WINDOW in canonical ordering of windows.
  14480. +If omitted, WINDOW defaults to the selected window.
  14481. +
  14482. +Optional second arg MINIBUF t means count the minibuffer window even
  14483. +if not active.  MINIBUF nil or omitted means count the minibuffer iff
  14484. +it is active.  MINIBUF neither t nor nil means not to count the
  14485. +minibuffer even if it is active.
  14486. +
  14487. +Several frames may share a single minibuffer; if the minibuffer
  14488. +counts, all windows on all frames that share that minibuffer count
  14489. +too.  Therefore, `next-window' can be used to iterate through the
  14490. +set of windows even when the minibuffer is on another frame.  If the
  14491. +minibuffer does not count, only windows from WINDOW's frame count.
  14492. +
  14493. +Optional third arg ALL-FRAMES t means include windows on all frames.
  14494. +ALL-FRAMES nil or omitted means cycle within the frames as specified
  14495. +above.  ALL-FRAMES = `visible' means include windows on all visible frames.
  14496. +ALL-FRAMES = 0 means include windows on all visible and iconified frames.
  14497. +Anything else means restrict to WINDOW's frame.
  14498. +
  14499. +If you use consistent values for MINIBUF and ALL-FRAMES, you can use
  14500. +`next-window' to iterate through the entire cycle of acceptable
  14501. +windows, eventually ending up back at the window you started with.
  14502. +`previous-window' traverses the same cycle, in the reverse order.
  14503. +
  14504. +(next-window &optional WINDOW MINIBUF ALL-FRAMES)Fprevious-window
  14505. +Return the window preceeding WINDOW in canonical ordering of windows.
  14506. +If omitted, WINDOW defaults to the selected window.
  14507. +
  14508. +Optional second arg MINIBUF t means count the minibuffer window even
  14509. +if not active.  MINIBUF nil or omitted means count the minibuffer iff
  14510. +it is active.  MINIBUF neither t nor nil means not to count the
  14511. +minibuffer even if it is active.
  14512. +
  14513. +Several frames may share a single minibuffer; if the minibuffer
  14514. +counts, all windows on all frames that share that minibuffer count
  14515. +too.  Therefore, `previous-window' can be used to iterate through
  14516. +the set of windows even when the minibuffer is on another frame.  If
  14517. +the minibuffer does not count, only windows from WINDOW's frame count
  14518. +
  14519. +Optional third arg ALL-FRAMES t means include windows on all frames.
  14520. +ALL-FRAMES nil or omitted means cycle within the frames as specified
  14521. +above.  ALL-FRAMES = `visible' means include windows on all visible frames.
  14522. +ALL-FRAMES = 0 means include windows on all visible and iconified frames.
  14523. +Anything else means restrict to WINDOW's frame.
  14524. +
  14525. +If you use consistent values for MINIBUF and ALL-FRAMES, you can use
  14526. +`previous-window' to iterate through the entire cycle of acceptable
  14527. +windows, eventually ending up back at the window you started with.
  14528. +`next-window' traverses the same cycle, in the reverse order.
  14529. +
  14530. +(previous-window &optional WINDOW MINIBUF ALL-FRAMES)Fother-window
  14531. +Select the ARG'th different window on this frame.
  14532. +All windows on current frame are arranged in a cyclic order.
  14533. +This command selects the window ARG steps away in that order.
  14534. +A negative ARG moves in the opposite order.  If the optional second
  14535. +argument ALL_FRAMES is non-nil, cycle through all frames.
  14536. +
  14537. +(other-window N &optional ALL-FRAMES)Fget-lru-window
  14538. +Return the window least recently selected or used for display.
  14539. +If optional argument FRAME is `visible', search all visible frames.
  14540. +If FRAME is 0, search all visible and iconified frames.
  14541. +If FRAME is t, search all frames.
  14542. +If FRAME is nil, search only the selected frame.
  14543. +If FRAME is a frame, search only that frame.
  14544. +
  14545. +(get-lru-window &optional FRAME)Fget-largest-window
  14546. +Return the largest window in area.
  14547. +If optional argument FRAME is `visible', search all visible frames.
  14548. +If FRAME is 0, search all visible and iconified frames.
  14549. +If FRAME is t, search all frames.
  14550. +If FRAME is nil, search only the selected frame.
  14551. +If FRAME is a frame, search only that frame.
  14552. +
  14553. +(get-largest-window &optional FRAME)Fget-buffer-window
  14554. +Return a window currently displaying BUFFER, or nil if none.
  14555. +If optional argument FRAME is `visible', search all visible frames.
  14556. +If optional argument FRAME is 0, search all visible and iconified frames.
  14557. +If FRAME is t, search all frames.
  14558. +If FRAME is nil, search only the selected frame.
  14559. +If FRAME is a frame, search only that frame.
  14560. +
  14561. +(get-buffer-window BUFFER &optional FRAME)Fdelete-other-windows
  14562. +Make WINDOW (or the selected window) fill its frame.
  14563. +Only the frame WINDOW is on is affected.
  14564. +This function tries to reduce display jumps
  14565. +by keeping the text previously visible in WINDOW
  14566. +in the same place on the frame.  Doing this depends on
  14567. +the value of (window-start WINDOW), so if calling this function
  14568. +in a program gives strange scrolling, make sure the window-start
  14569. +value is reasonable when this function is called.
  14570. +
  14571. +(delete-other-windows &optional WINDOW)Fdelete-windows-on
  14572. +Delete all windows showing BUFFER.
  14573. +Optional second argument FRAME controls which frames are affected.
  14574. +If nil or omitted, delete all windows showing BUFFER in any frame.
  14575. +If t, delete only windows showing BUFFER in the selected frame.
  14576. +If `visible', delete all windows showing BUFFER in any visible frame.
  14577. +If a frame, delete only windows showing BUFFER in that frame.
  14578. +
  14579. +(delete-windows-on BUFFER &optional FRAME)Freplace-buffer-in-windows
  14580. +Replace BUFFER with some other buffer in all windows showing it.
  14581. +
  14582. +(replace-buffer-in-windows BUFFER)Fset-window-buffer
  14583. +Make WINDOW display BUFFER as its contents.
  14584. +BUFFER can be a buffer or buffer name.
  14585. +
  14586. +(set-window-buffer WINDOW BUFFER)Fselect-window
  14587. +Select WINDOW.  Most editing will apply to WINDOW's buffer.
  14588. +The main editor command loop selects the buffer of the selected window
  14589. +before each command.
  14590. +
  14591. +(select-window WINDOW)Fdisplay-buffer
  14592. +Make BUFFER appear in some window but don't select it.
  14593. +BUFFER can be a buffer or a buffer name.
  14594. +If BUFFER is shown already in some window, just use that one,
  14595. +unless the window is the selected window and the optional second
  14596. +argument NOT-THIS-WINDOW is non-nil (interactively, with prefix arg).
  14597. +If `pop-up-frames' is non-nil, make a new frame if no window shows BUFFER.
  14598. +Returns the window displaying BUFFER.
  14599. +
  14600. +(display-buffer BUFFER &optional NOT-THIS-WINDOW)Fsplit-window
  14601. +Split WINDOW, putting SIZE lines in the first of the pair.
  14602. +WINDOW defaults to selected one and SIZE to half its size.
  14603. +If optional third arg HOR-FLAG is non-nil, split side by side
  14604. +and put SIZE columns in the first of the pair.
  14605. +
  14606. +(split-window &optional WINDOW CHSIZE HORFLAG)Fenlarge-window
  14607. +Make current window ARG lines bigger.
  14608. +From program, optional second arg non-nil means grow sideways ARG columns.
  14609. +
  14610. +(enlarge-window N &optional SIDE)Fshrink-window
  14611. +Make current window ARG lines smaller.
  14612. +From program, optional second arg non-nil means shrink sideways ARG columns.
  14613. +
  14614. +(shrink-window N &optional SIDE)Fscroll-up
  14615. +Scroll text of current window upward ARG lines; or near full screen if no ARG.
  14616. +A near full screen is `next-screen-context-lines' less than a full screen.
  14617. +Negative ARG means scroll downward.
  14618. +When calling from a program, supply a number as argument or nil.
  14619. +
  14620. +(scroll-up &optional N)Fscroll-down
  14621. +Scroll text of current window downward ARG lines; or near full screen if no ARG.
  14622. +A near full screen is `next-screen-context-lines' less than a full screen.
  14623. +Negative ARG means scroll upward.
  14624. +When calling from a program, supply a number as argument or nil.
  14625. +
  14626. +(scroll-down &optional N)Fother-window-for-scrolling
  14627. +Return the other window for "other window scroll" commands.
  14628. +If in the minibuffer, `minibuffer-scroll-window' if non-nil
  14629. +specifies the window.
  14630. +If `other-window-scroll-buffer' is non-nil, a window
  14631. +showing that buffer is used.
  14632. +
  14633. +(other-window-for-scrolling)Fscroll-other-window
  14634. +Scroll next window upward ARG lines; or near full screen if no ARG.
  14635. +The next window is the one below the current one; or the one at the top
  14636. +if the current one is at the bottom.  Negative ARG means scroll downward.
  14637. +When calling from a program, supply a number as argument or nil.
  14638. +
  14639. +If in the minibuffer, `minibuffer-scroll-window' if non-nil
  14640. +specifies the window to scroll.
  14641. +If `other-window-scroll-buffer' is non-nil, scroll the window
  14642. +showing that buffer, popping the buffer up if necessary.
  14643. +
  14644. +(scroll-other-window &optional N)Fscroll-left
  14645. +Scroll selected window display ARG columns left.
  14646. +Default for ARG is window width minus 2.
  14647. +
  14648. +(scroll-left &optional ARG)Fscroll-right
  14649. +Scroll selected window display ARG columns right.
  14650. +Default for ARG is window width minus 2.
  14651. +
  14652. +(scroll-right &optional ARG)Frecenter
  14653. +Center point in window and redisplay frame.  With ARG, put point on line ARG.
  14654. +The desired position of point is always relative to the current window.
  14655. +Just C-u as prefix means put point in the center of the window.
  14656. +No arg (i.e., it is nil) erases the entire frame and then
  14657. +redraws with point in the center of the current window.
  14658. +
  14659. +(recenter &optional N)Fmove-to-window-line
  14660. +Position point relative to window.
  14661. +With no argument, position point at center of window.
  14662. +An argument specifies frame line; zero means top of window,
  14663. +negative means relative to bottom of window.
  14664. +
  14665. +(move-to-window-line ARG)Fwindow-configuration-p
  14666. +T if OBJECT is a window-configration object.
  14667. +
  14668. +(window-configuration-p OBJ)Fset-window-configuration
  14669. +Set the configuration of windows and buffers as specified by CONFIGURATION.
  14670. +CONFIGURATION must be a value previously returned
  14671. +by `current-window-configuration' (which see).
  14672. +
  14673. +(set-window-configuration CONFIGURATION)Fcurrent-window-configuration
  14674. +Return an object representing the current window configuration of FRAME.
  14675. +If FRAME is nil or omitted, use the selected frame.
  14676. +This describes the number of windows, their sizes and current buffers,
  14677. +and for each displayed buffer, where display starts, and the positions of
  14678. +point and mark.  An exception is made for point in the current buffer:
  14679. +its value is -not- saved.
  14680. +This also records the currently selected frame, and FRAME's focus
  14681. +redirection (see `redirect-frame-focus').
  14682. +
  14683. +(current-window-configuration &optional FRAME)Fsave-window-excursion
  14684. +Execute body, preserving window sizes and contents.
  14685. +Restore which buffer appears in which window, where display starts,
  14686. +and the value of point and mark for each window.
  14687. +Also restore which buffer is current.
  14688. +But do not preserve point in the current buffer.
  14689. +Does not restore the value of point in current buffer.Vtemp-buffer-show-function
  14690. +Non-nil means call as function to display a help buffer.
  14691. +Used by `with-output-to-temp-buffer'.Vdisplay-buffer-function
  14692. +If non-nil, function to call to handle `display-buffer'.
  14693. +It will receive two args, the buffer and a flag which if non-nil means
  14694. + that the currently selected window is not acceptable.
  14695. +Commands such as `switch-to-buffer-other-window' and `find-file-other-window'
  14696. +work using this function.Vminibuffer-scroll-window
  14697. +Non-nil means it is the window that C-M-v in minibuffer should scroll.Vother-window-scroll-buffer
  14698. +If non-nil, this is a buffer and \[scroll-other-window] should scroll its window.Vpop-up-frames
  14699. +*Non-nil means `display-buffer' should make a separate frame.Vpop-up-frame-function
  14700. +Function to call to handle automatic new frame creation.
  14701. +It is called with no arguments and should return a newly created frame.
  14702. +
  14703. +A typical value might be `(lambda () (new-frame pop-up-frame-alist))'
  14704. +where `pop-up-frame-alist' would hold the default frame parameters.Vspecial-display-buffer-names
  14705. +*List of buffer names that should have their own special frames.
  14706. +Displaying a buffer whose name is in this list makes a special frame for it
  14707. +using `special-display-function'.  See also `special-display-regexps'.Vspecial-display-regexps
  14708. +*List of regexps saying which buffers should have their own special frames.
  14709. +If a buffer name matches one of these regexps, it gets its own frame.
  14710. +Displaying a buffer whose name is in this list makes a special frame for it
  14711. +using `special-display-function'.  See also `special-display-buffer-names'.Vspecial-display-function
  14712. +Function to call to make a new frame for a special buffer.
  14713. +It is called with one argument, the buffer,
  14714. +and should return a window displaying that buffer.
  14715. +The default value makes a separate frame for the buffer,
  14716. +using `special-display-alist' to specify the frame parameters.
  14717. +
  14718. +A buffer is special if its is listed in `special-display-buffer-names'
  14719. +or matches a regexp in `special-display-regexps'.Vpop-up-windows
  14720. +*Non-nil means display-buffer should make new windows.Vnext-screen-context-lines
  14721. +*Number of lines of continuity when scrolling by screenfuls.Vsplit-height-threshold
  14722. +*display-buffer would prefer to split the largest window if this large.
  14723. +If there is only one window, it is split regardless of this value.Vwindow-min-height
  14724. +*Delete any window less than this tall (including its mode line).Vwindow-min-width
  14725. +*Delete any window less than this wide.Vsystem-uses-terminfo
  14726. +Non-nil means the system uses terminfo rather than termcap.
  14727. +This variable can be used by terminal emulator packages.Finvocation-name
  14728. +Return the program name that was used to run Emacs.
  14729. +Any directory names are omitted.
  14730. +
  14731. +(invocation-name)Finvocation-directory
  14732. +Return the directory name in which the Emacs executable was located
  14733. +
  14734. +(invocation-directory)Fkill-emacs
  14735. +Exit the Emacs job and kill it.
  14736. +If ARG is an integer, return ARG as the exit program code.
  14737. +If ARG is a  string, stuff it as keyboard input.
  14738. +
  14739. +The value of `kill-emacs-hook', if not void,
  14740. +is a list of functions (of no args),
  14741. +all of which are called before Emacs is actually killed.
  14742. +
  14743. +(kill-emacs &optional ARG)Fdump-emacs-data
  14744. +Dump current state of Emacs into data file FILENAME.
  14745. +This function exists on systems that use HAVE_SHM.
  14746. +
  14747. +(dump-emacs-data INTONAME)Fdump-emacs
  14748. +Dump current state of Emacs into executable file FILENAME.
  14749. +Take symbols from SYMFILE (presumably the file you executed to run Emacs).
  14750. +This is used in the file `loadup.el' when building Emacs.
  14751. +
  14752. +Bind `command-line-processed' to nil before dumping,
  14753. +if you want the dumped Emacs to process its command line
  14754. +and announce itself normally when it is run.
  14755. +
  14756. +(dump-emacs INTONAME SYMNAME)Vcommand-line-args
  14757. +Args passed by shell to Emacs, as a list of strings.Vsystem-type
  14758. +Value is symbol indicating type of operating system you are using.Vsystem-configuration
  14759. +Value is string indicating configuration Emacs was built for.Vnoninteractive
  14760. +Non-nil means Emacs is running without interactive terminal.Vkill-emacs-hook
  14761. +Hook to be run whenever kill-emacs is called.
  14762. +Since kill-emacs may be invoked when the terminal is disconnected (or
  14763. +in other similar situations), functions placed on this hook should not
  14764. +expect to be able to interact with the user.Vemacs-priority
  14765. +Priority for Emacs to run at.
  14766. +This value is effective only if set before Emacs is dumped,
  14767. +and only if the Emacs executable is installed with setuid to permit
  14768. +it to change priority.  (Emacs sets its uid back to the real uid.)
  14769. +Currently, you need to define SET_EMACS_PRIORITY in `config.h'
  14770. +before you compile Emacs, to enable the code for this feature.Vinvocation-name
  14771. +The program name that was used to run Emacs.
  14772. +Any directory names are omitted.Vinvocation-directory
  14773. +The directory in which the Emacs executable was found, to run it.
  14774. +The value is nil if that directory's name is not known.Vinstallation-directory
  14775. +A directory within which to look for the `lib-src' and `etc' directories.
  14776. +This is non-nil when we can't find those directories in their standard
  14777. +installed locations, but we can find them
  14778. +near where the Emacs executable was found.Frecursive-edit
  14779. +Invoke the editor command loop recursively.
  14780. +To get out of the recursive edit, a command can do `(throw 'exit nil)';
  14781. +that tells this function to return.
  14782. +Alternately, `(throw 'exit t)' makes this function signal an error.
  14783. +This function is called by the editor initialization to begin editing.
  14784. +
  14785. +(recursive-edit)Ftop-level
  14786. +Exit all recursive editing levels.
  14787. +
  14788. +(top-level)Fexit-recursive-edit
  14789. +Exit from the innermost recursive edit or minibuffer.
  14790. +
  14791. +(exit-recursive-edit)Fabort-recursive-edit
  14792. +Abort the command that requested this recursive edit or minibuffer input.
  14793. +
  14794. +(abort-recursive-edit)Ftrack-mouse
  14795. +Evaluate BODY with mouse movement events enabled.
  14796. +Within a `track-mouse' form, mouse motion generates input events that
  14797. +you can read with `read-event'.
  14798. +Normally, mouse motion is ignored.Fread-key-sequence
  14799. +Read a sequence of keystrokes and return as a string or vector.
  14800. +The sequence is sufficient to specify a non-prefix command in the
  14801. +current local and global maps.
  14802. +
  14803. +First arg PROMPT is a prompt string.  If nil, do not prompt specially.
  14804. +Second (optional) arg CONTINUE-ECHO, if non-nil, means this key echos
  14805. +as a continuation of the previous key.
  14806. +
  14807. +A C-g typed while in this function is treated like any other character,
  14808. +and `quit-flag' is not set.
  14809. +
  14810. +If the key sequence starts with a mouse click, then the sequence is read
  14811. +using the keymaps of the buffer of the window clicked in, not the buffer
  14812. +of the selected window as normal.
  14813. +
  14814. +`read-key-sequence' drops unbound button-down events, since you normally
  14815. +only care about the click or drag events which follow them.  If a drag
  14816. +or multi-click event is unbound, but the corresponding click event would
  14817. +be bound, `read-key-sequence' turns the event into a click event at the
  14818. +drag's starting position.  This means that you don't have to distinguish
  14819. +between click and drag, double, or triple events unless you want to.
  14820. +
  14821. +`read-key-sequence' prefixes mouse events on mode lines, the vertical
  14822. +lines separating windows, and scroll bars with imaginary keys
  14823. +`mode-line', `vertical-line', and `vertical-scroll-bar'.
  14824. +
  14825. +If the user switches frames in the middle of a key sequence, the
  14826. +frame-switch event is put off until after the current key sequence.
  14827. +
  14828. +`read-key-sequence' checks `function-key-map' for function key
  14829. +sequences, where they wouldn't conflict with ordinary bindings.  See
  14830. +`function-key-map' for more details.
  14831. +
  14832. +(read-key-sequence PROMPT &optional CONTINUE-ECHO)Fcommand-execute
  14833. +Execute CMD as an editor command.
  14834. +CMD must be a symbol that satisfies the `commandp' predicate.
  14835. +Optional second arg RECORD-FLAG non-nil
  14836. +means unconditionally put this command in `command-history'.
  14837. +Otherwise, that is done only if an arg is read using the minibuffer.
  14838. +
  14839. +(command-execute CMD &optional RECORD)Fexecute-extended-command
  14840. +Read function name, then read its arguments and call it.
  14841. +
  14842. +(execute-extended-command PREFIXARG)Finput-pending-p
  14843. +T if command input is currently available with no waiting.
  14844. +Actually, the value is nil only if we can be sure that no input is available.
  14845. +
  14846. +(input-pending-p)Frecent-keys
  14847. +Return vector of last 100 events, not counting those from keyboard macros.
  14848. +
  14849. +(recent-keys)Fthis-command-keys
  14850. +Return the key sequence that invoked this command.
  14851. +The value is a string or a vector.
  14852. +
  14853. +(this-command-keys)Frecursion-depth
  14854. +Return the current depth in recursive edits.
  14855. +
  14856. +(recursion-depth)Fopen-dribble-file
  14857. +Start writing all keyboard characters to a dribble file called FILE.
  14858. +If FILE is nil, close any open dribble file.
  14859. +
  14860. +(open-dribble-file FILE)Fdiscard-input
  14861. +Discard the contents of the terminal input buffer.
  14862. +Also cancel any kbd macro being defined.
  14863. +
  14864. +(discard-input)Fsuspend-emacs
  14865. +Stop Emacs and return to superior process.  You can resume later.
  14866. +If `cannot-suspend' is non-nil, or if the system doesn't support job
  14867. +control, run a subshell instead.
  14868. +
  14869. +If optional arg STUFFSTRING is non-nil, its characters are stuffed
  14870. +to be read as terminal input by Emacs's parent, after suspension.
  14871. +
  14872. +Before suspending, call the functions in `suspend-hook' with no args.
  14873. +If any of them returns nil, don't call the rest and don't suspend.
  14874. +Otherwise, suspend normally and after resumption run the normal hook
  14875. +`suspend-resume-hook' if that is bound and non-nil.
  14876. +
  14877. +Some operating systems cannot stop the Emacs process and resume it later.
  14878. +On such systems, Emacs starts a subshell instead of suspending.
  14879. +
  14880. +(suspend-emacs &optional STUFFSTRING)Fset-input-mode
  14881. +Set mode of reading keyboard input.
  14882. +First arg INTERRUPT non-nil means use input interrupts;
  14883. + nil means use CBREAK mode.
  14884. +Second arg FLOW non-nil means use ^S/^Q flow control for output to terminal
  14885. + (no effect except in CBREAK mode).
  14886. +Third arg META t means accept 8-bit input (for a Meta key).
  14887. + META nil means ignore the top bit, on the assumption it is parity.
  14888. + Otherwise, accept 8-bit input and don't use the top bit for Meta.
  14889. +Optional fourth arg QUIT if non-nil specifies character to use for quitting.
  14890. +See also `current-input-mode'.
  14891. +
  14892. +(set-input-mode INTERRUPT FLOW META &optional QUIT)Fcurrent-input-mode
  14893. +Return information about the way Emacs currently reads keyboard input.
  14894. +The value is a list of the form (INTERRUPT FLOW META QUIT), where
  14895. +  INTERRUPT is non-nil if Emacs is using interrupt-driven input; if
  14896. +    nil, Emacs is using CBREAK mode.
  14897. +  FLOW is non-nil if Emacs uses ^S/^Q flow control for output to the
  14898. +    terminal; this does not apply if Emacs uses interrupt-driven input.
  14899. +  META is t if accepting 8-bit input with 8th bit as Meta flag.
  14900. +    META nil means ignoring the top bit, on the assumption it is parity.
  14901. +    META is neither t nor nil if accepting 8-bit input and using
  14902. +    all 8 bits as the character code.
  14903. +  QUIT is the character Emacs currently uses to quit.
  14904. +The elements of this list correspond to the arguments of
  14905. +`set-input-mode'.
  14906. +
  14907. +(current-input-mode)Vlast-command-char
  14908. +Last input event that was part of a command.Vlast-command-event
  14909. +Last input event that was part of a command.Vlast-nonmenu-event
  14910. +Last input event in a command, except for mouse menu events.
  14911. +Mouse menus give back keys that don't look like mouse events;
  14912. +this variable holds the actual mouse event that led to the menu,
  14913. +so that you can determine whether the command was run by mouse or not.Vlast-input-char
  14914. +Last input event.Vlast-input-event
  14915. +Last input event.Vunread-command-events
  14916. +List of objects to be read as next command input events.Vunread-command-char
  14917. +If not -1, an object to be read as next command input event.Vmeta-prefix-char
  14918. +Meta-prefix character code.  Meta-foo as command input
  14919. +turns into this character followed by foo.Vlast-command
  14920. +The last command executed.  Normally a symbol with a function definition,
  14921. +but can be whatever was found in the keymap, or whatever the variable
  14922. +`this-command' was set to by that command.Vthis-command
  14923. +The command now being executed.
  14924. +The command can set this variable; whatever is put here
  14925. +will be in `last-command' during the following command.Vauto-save-interval
  14926. +*Number of keyboard input characters between auto-saves.
  14927. +Zero means disable autosaving due to number of characters typed.Vauto-save-timeout
  14928. +*Number of seconds idle time before auto-save.
  14929. +Zero or nil means disable auto-saving due to idleness.
  14930. +After auto-saving due to this many seconds of idle time,
  14931. +Emacs also does a garbage collection if that seems to be warranted.Vecho-keystrokes
  14932. +*Nonzero means echo unfinished commands after this many seconds of pause.Vpolling-period
  14933. +*Interval between polling for input during Lisp execution.
  14934. +The reason for polling is to make C-g work to stop a running program.
  14935. +Polling is needed only when using X windows and SIGIO does not work.
  14936. +Polling is automatically disabled in all other cases.Vdouble-click-time
  14937. +*Maximum time between mouse clicks to make a double-click.
  14938. +Measured in milliseconds.  nil means disable double-click recognition;
  14939. +t means double-clicks have no time limit and are detected
  14940. +by position only.Vnum-input-keys
  14941. +*Number of complete keys read from the keyboard so far.Vlast-event-frame
  14942. +*The frame in which the most recently read event occurred.
  14943. +If the last event came from a keyboard macro, this is set to `macro'.Vhelp-char
  14944. +Character to recognize as meaning Help.
  14945. +When it is read, do `(eval help-form)', and display result if it's a string.
  14946. +If the value of `help-form' is nil, this char can be read normally.Vhelp-form
  14947. +Form to execute when character `help-char' is read.
  14948. +If the form returns a string, that string is displayed.
  14949. +If `help-form' is nil, the help char is not recognized.Vprefix-help-command
  14950. +Command to run when `help-char' character follows a prefix key.
  14951. +This command is used only when there is no actual binding
  14952. +for that character after that prefix key.Vtop-level
  14953. +Form to evaluate when Emacs starts up.
  14954. +Useful to set before you dump a modified Emacs.Vkeyboard-translate-table
  14955. +String used as translate table for keyboard input, or nil.
  14956. +Each character is looked up in this string and the contents used instead.
  14957. +If string is of length N, character codes N and up are untranslated.Vkey-translation-map
  14958. +Keymap of key translations that can override keymaps.
  14959. +This keymap works like `function-key-map', but comes after that,
  14960. +and applies even for keys that have ordinary bindings.Vcannot-suspend
  14961. +Non-nil means to always spawn a subshell instead of suspending,
  14962. +even if the operating system has support for stopping a process.Vmenu-prompting
  14963. +Non-nil means prompt with menus when appropriate.
  14964. +This is done when reading from a keymap that has a prompt string,
  14965. +for elements that have prompt strings.
  14966. +The menu is displayed on the screen
  14967. +if X menus were enabled at configuration
  14968. +time and the previous event was a mouse click prefix key.
  14969. +Otherwise, menu prompting uses the echo area.Vmenu-prompt-more-char
  14970. +Character to see next line of menu prompt.
  14971. +Type this character while in a menu prompt to rotate around the lines of it.Vextra-keyboard-modifiers
  14972. +A mask of additional modifier keys to use with every keyboard character.
  14973. +Emacs applies the modifiers of the character stored here to each keyboard
  14974. +character it reads.  For example, after evaluating the expression
  14975. +    (setq extra-keyboard-modifiers ?C-x)
  14976. +all input characters will have the control modifier applied to them.
  14977. +
  14978. +Note that the character ?C-@, equivalent to the integer zero, does
  14979. +not count as a control character; rather, it counts as a character
  14980. +with no modifiers; thus, setting `extra-keyboard-modifiers' to zero
  14981. +cancels any modification.Vdeactivate-mark
  14982. +If an editing command sets this to t, deactivate the mark afterward.
  14983. +The command loop sets this to nil before each command,
  14984. +and tests the value when the command returns.
  14985. +Buffer modification stores t in this variable.Vcommand-hook-internal
  14986. +Temporary storage of pre-command-hook or post-command-hook.Vpre-command-hook
  14987. +Normal hook run before each command is executed.
  14988. +While the hook is run, its value is temporarily set to nil
  14989. +to avoid an unbreakable infinite loop if a hook function gets an error.
  14990. +As a result, a hook function cannot straightforwardly alter the value of
  14991. +`pre-command-hook'.  See the Emacs Lisp manual for a way of
  14992. +implementing hook functions that alter the set of hook functions.Vpost-command-hook
  14993. +Normal hook run after each command is executed.
  14994. +While the hook is run, its value is temporarily set to nil
  14995. +to avoid an unbreakable infinite loop if a hook function gets an error.
  14996. +As a result, a hook function cannot straightforwardly alter the value of
  14997. +`post-command-hook'.  See the Emacs Lisp manual for a way of
  14998. +implementing hook functions that alter the set of hook functions.Vlucid-menu-bar-dirty-flag
  14999. +t means menu bar, specified Lucid style, needs to be recomputed.Vmenu-bar-final-items
  15000. +List of menu bar items to move to the end of the menu bar.
  15001. +The elements of the list are event types that may have menu bar bindings.Voverriding-local-map
  15002. +Keymap that overrides all other local keymaps.
  15003. +If this variable is non-nil, it is used as a keymap instead of the
  15004. +buffer's local map, and the minor mode keymaps and text property keymaps.Vtrack-mouse
  15005. +*Non-nil means generate motion events for mouse motion.Vsystem-key-alist
  15006. +Alist of system-specific X windows key symbols.
  15007. +Each element should have the form (N . SYMBOL) where N is the
  15008. +numeric keysym code (sans the "system-specific" bit 1<<28)
  15009. +and SYMBOL is its name.Vdeferred-action-list
  15010. +List of deferred actions to be performed at a later time.
  15011. +The precise format isn't relevant here; we just check whether it is nil.Vdeferred-action-function
  15012. +Function to call to handle deferred actions, after each command.
  15013. +This function is called with no arguments after each command
  15014. +whenever `deferred-action-list' is non-nil.Fstart-kbd-macro
  15015. +Record subsequent keyboard input, defining a keyboard macro.
  15016. +The commands are recorded even as they are executed.
  15017. +Use \[end-kbd-macro] to finish recording and make the macro available.
  15018. +Use \[name-last-kbd-macro] to give it a permanent name.
  15019. +Non-nil arg (prefix arg) means append to last macro defined;
  15020. + This begins by re-executing that macro as if you typed it again.
  15021. +
  15022. +(start-kbd-macro APPEND)Fend-kbd-macro
  15023. +Finish defining a keyboard macro.
  15024. +The definition was started by \[start-kbd-macro].
  15025. +The macro is now available for use via \[call-last-kbd-macro],
  15026. +or it can be given a name with \[name-last-kbd-macro] and then invoked
  15027. +under that name.
  15028. +
  15029. +With numeric arg, repeat macro now that many times,
  15030. +counting the definition just completed as the first repetition.
  15031. +An argument of zero means repeat until error.
  15032. +
  15033. +(end-kbd-macro &optional ARG)Fcall-last-kbd-macro
  15034. +Call the last keyboard macro that you defined with \[start-kbd-macro].
  15035. +
  15036. +A prefix argument serves as a repeat count.  Zero means repeat until error.
  15037. +
  15038. +To make a macro permanent so you can call it even after
  15039. +defining others, use \[name-last-kbd-macro].
  15040. +
  15041. +(call-last-kbd-macro &optional PREFIX)Fexecute-kbd-macro
  15042. +Execute MACRO as string of editor command characters.
  15043. +If MACRO is a symbol, its function definition is used.
  15044. +COUNT is a repeat count, or nil for once, or 0 for infinite loop.
  15045. +
  15046. +(execute-kbd-macro MACRO &optional PREFIXARG)Vdefining-kbd-macro
  15047. +Non-nil while a keyboard macro is being defined.  Don't set this!Vexecuting-macro
  15048. +Currently executing keyboard macro (a string); nil if none executing.Vexecuting-kbd-macro
  15049. +Currently executing keyboard macro (a string); nil if none executing.Vlast-kbd-macro
  15050. +Last kbd macro defined, as a string; nil if none defined.Fmake-keymap
  15051. +Construct and return a new keymap, of the form (keymap VECTOR . ALIST).
  15052. +VECTOR is a vector which holds the bindings for the ASCII
  15053. +characters.  ALIST is an assoc-list which holds bindings for function keys,
  15054. +mouse events, and any other things that appear in the input stream.
  15055. +All entries in it are initially nil, meaning "command undefined".
  15056. +
  15057. +The optional arg STRING supplies a menu name for the keymap
  15058. +in case you use it as a menu with `x-popup-menu'.
  15059. +
  15060. +(make-keymap &optional STRING)Fmake-sparse-keymap
  15061. +Construct and return a new sparse-keymap list.
  15062. +Its car is `keymap' and its cdr is an alist of (CHAR . DEFINITION),
  15063. +which binds the character CHAR to DEFINITION, or (SYMBOL . DEFINITION),
  15064. +which binds the function key or mouse event SYMBOL to DEFINITION.
  15065. +Initially the alist is nil.
  15066. +
  15067. +The optional arg STRING supplies a menu name for the keymap
  15068. +in case you use it as a menu with `x-popup-menu'.
  15069. +
  15070. +(make-sparse-keymap &optional STRING)Fkeymapp
  15071. +Return t if ARG is a keymap.
  15072. +
  15073. +A keymap is a list (keymap . ALIST),
  15074. +or a symbol whose function definition is itself a keymap.
  15075. +ALIST elements look like (CHAR . DEFN) or (SYMBOL . DEFN);
  15076. +a vector of densely packed bindings for small character codes
  15077. +is also allowed as an element.
  15078. +
  15079. +(keymapp OBJECT)Fcopy-keymap
  15080. +Return a copy of the keymap KEYMAP.
  15081. +The copy starts out with the same definitions of KEYMAP,
  15082. +but changing either the copy or KEYMAP does not affect the other.
  15083. +Any key definitions that are subkeymaps are recursively copied.
  15084. +However, a key definition which is a symbol whose definition is a keymap
  15085. +is not copied.
  15086. +
  15087. +(copy-keymap KEYMAP)Fdefine-key
  15088. +Args KEYMAP, KEY, DEF.  Define key sequence KEY, in KEYMAP, as DEF.
  15089. +KEYMAP is a keymap.  KEY is a string or a vector of symbols and characters
  15090. +meaning a sequence of keystrokes and events.
  15091. +Non-ASCII characters with codes above 127 (such as ISO Latin-1)
  15092. +can be included if you use a vector.
  15093. +DEF is anything that can be a key's definition:
  15094. + nil (means key is undefined in this keymap),
  15095. + a command (a Lisp function suitable for interactive calling)
  15096. + a string (treated as a keyboard macro),
  15097. + a keymap (to define a prefix key),
  15098. + a symbol.  When the key is looked up, the symbol will stand for its
  15099. +    function definition, which should at that time be one of the above,
  15100. +    or another symbol whose function definition is used, etc.
  15101. + a cons (STRING . DEFN), meaning that DEFN is the definition
  15102. +    (DEFN should be a valid definition in its own right),
  15103. + or a cons (KEYMAP . CHAR), meaning use definition of CHAR in map KEYMAP.
  15104. +
  15105. +If KEYMAP is a sparse keymap, the pair binding KEY to DEF is added at
  15106. +the front of KEYMAP.
  15107. +
  15108. +(define-key KEYMAP KEY DEF)Flookup-key
  15109. +In keymap KEYMAP, look up key sequence KEY.  Return the definition.
  15110. +nil means undefined.  See doc of `define-key' for kinds of definitions.
  15111. +
  15112. +A number as value means KEY is "too long";
  15113. +that is, characters or symbols in it except for the last one
  15114. +fail to be a valid sequence of prefix characters in KEYMAP.
  15115. +The number is how many characters at the front of KEY
  15116. +it takes to reach a non-prefix command.
  15117. +
  15118. +Normally, `lookup-key' ignores bindings for t, which act as default
  15119. +bindings, used when nothing else in the keymap applies; this makes it
  15120. +useable as a general function for probing keymaps.  However, if the
  15121. +third optional argument ACCEPT-DEFAULT is non-nil, `lookup-key' will
  15122. +recognize the default bindings, just as `read-key-sequence' does.
  15123. +
  15124. +(lookup-key KEYMAP KEY &optional ACCEPT-DEFAULT)Fkey-binding
  15125. +Return the binding for command KEY in current keymaps.
  15126. +KEY is a string or vector, a sequence of keystrokes.
  15127. +The binding is probably a symbol with a function definition.
  15128. +
  15129. +Normally, `key-binding' ignores bindings for t, which act as default
  15130. +bindings, used when nothing else in the keymap applies; this makes it
  15131. +usable as a general function for probing keymaps.  However, if the
  15132. +optional second argument ACCEPT-DEFAULT is non-nil, `key-binding' does
  15133. +recognize the default bindings, just as `read-key-sequence' does.
  15134. +
  15135. +(key-binding KEY &optional ACCEPT-DEFAULT)Flocal-key-binding
  15136. +Return the binding for command KEYS in current local keymap only.
  15137. +KEYS is a string, a sequence of keystrokes.
  15138. +The binding is probably a symbol with a function definition.
  15139. +
  15140. +If optional argument ACCEPT-DEFAULT is non-nil, recognize default
  15141. +bindings; see the description of `lookup-key' for more details about this.
  15142. +
  15143. +(local-key-binding KEYS &optional ACCEPT-DEFAULT)Fglobal-key-binding
  15144. +Return the binding for command KEYS in current global keymap only.
  15145. +KEYS is a string, a sequence of keystrokes.
  15146. +The binding is probably a symbol with a function definition.
  15147. +This function's return values are the same as those of lookup-key
  15148. +(which see).
  15149. +
  15150. +If optional argument ACCEPT-DEFAULT is non-nil, recognize default
  15151. +bindings; see the description of `lookup-key' for more details about this.
  15152. +
  15153. +(global-key-binding KEYS &optional ACCEPT-DEFAULT)Fminor-mode-key-binding
  15154. +Find the visible minor mode bindings of KEY.
  15155. +Return an alist of pairs (MODENAME . BINDING), where MODENAME is the
  15156. +the symbol which names the minor mode binding KEY, and BINDING is
  15157. +KEY's definition in that mode.  In particular, if KEY has no
  15158. +minor-mode bindings, return nil.  If the first binding is a
  15159. +non-prefix, all subsequent bindings will be omitted, since they would
  15160. +be ignored.  Similarly, the list doesn't include non-prefix bindings
  15161. +that come after prefix bindings.
  15162. +
  15163. +If optional argument ACCEPT-DEFAULT is non-nil, recognize default
  15164. +bindings; see the description of `lookup-key' for more details about this.
  15165. +
  15166. +(minor-mode-key-binding KEY &optional ACCEPT-DEFAULT)Fglobal-set-key
  15167. +Give KEY a global binding as COMMAND.
  15168. +COMMAND is a symbol naming an interactively-callable function.
  15169. +KEY is a key sequence (a string or vector of characters or event types).
  15170. +Non-ASCII characters with codes above 127 (such as ISO Latin-1)
  15171. +can be included if you use a vector.
  15172. +Note that if KEY has a local binding in the current buffer
  15173. +that local binding will continue to shadow any global binding.
  15174. +
  15175. +(global-set-key KEYS FUNCTION)Flocal-set-key
  15176. +Give KEY a local binding as COMMAND.
  15177. +COMMAND is a symbol naming an interactively-callable function.
  15178. +KEY is a key sequence (a string or vector of characters or event types).
  15179. +Non-ASCII characters with codes above 127 (such as ISO Latin-1)
  15180. +can be included if you use a vector.
  15181. +The binding goes in the current buffer's local map,
  15182. +which in most cases is shared with all other buffers in the same major mode.
  15183. +
  15184. +(local-set-key KEYS FUNCTION)Fglobal-unset-key
  15185. +Remove global binding of KEY.
  15186. +KEY is a string representing a sequence of keystrokes.
  15187. +
  15188. +(global-unset-key KEYS)Flocal-unset-key
  15189. +Remove local binding of KEY.
  15190. +KEY is a string representing a sequence of keystrokes.
  15191. +
  15192. +(local-unset-key KEYS)Fdefine-prefix-command
  15193. +Define COMMAND as a prefix command.  COMMAND should be a symbol.
  15194. +A new sparse keymap is stored as COMMAND's function definition and its value.
  15195. +If a second optional argument MAPVAR is given, the map is stored as
  15196. +its value instead of as COMMAND's value; but COMMAND is still defined
  15197. +as a function.
  15198. +
  15199. +(define-prefix-command NAME &optional MAPVAR)Fuse-global-map
  15200. +Select KEYMAP as the global keymap.
  15201. +
  15202. +(use-global-map KEYMAP)Fuse-local-map
  15203. +Select KEYMAP as the local keymap.
  15204. +If KEYMAP is nil, that means no local keymap.
  15205. +
  15206. +(use-local-map KEYMAP)Fcurrent-local-map
  15207. +Return current buffer's local keymap, or nil if it has none.
  15208. +
  15209. +(current-local-map)Fcurrent-global-map
  15210. +Return the current global keymap.
  15211. +
  15212. +(current-global-map)Fcurrent-minor-mode-maps
  15213. +Return a list of keymaps for the minor modes of the current buffer.
  15214. +
  15215. +(current-minor-mode-maps)Faccessible-keymaps
  15216. +Find all keymaps accessible via prefix characters from KEYMAP.
  15217. +Returns a list of elements of the form (KEYS . MAP), where the sequence
  15218. +KEYS starting from KEYMAP gets you to MAP.  These elements are ordered
  15219. +so that the KEYS increase in length.  The first element is ("" . KEYMAP).
  15220. +An optional argument PREFIX, if non-nil, should be a key sequence;
  15221. +then the value includes only maps for prefixes that start with PREFIX.
  15222. +
  15223. +(accessible-keymaps STARTMAP &optional PREFIX)Fkey-description
  15224. +Return a pretty description of key-sequence KEYS.
  15225. +Control characters turn into "C-foo" sequences, meta into "M-foo"
  15226. +spaces are put between sequence elements, etc.
  15227. +
  15228. +(key-description KEYS)Fsingle-key-description
  15229. +Return a pretty description of command character KEY.
  15230. +Control characters turn into C-whatever, etc.
  15231. +
  15232. +(single-key-description KEY)Ftext-char-description
  15233. +Return a pretty description of file-character CHAR.
  15234. +Control characters turn into "^char", etc.
  15235. +
  15236. +(text-char-description CHR)Fwhere-is-internal
  15237. +Return list of keys that invoke DEFINITION.
  15238. +If KEYMAP is non-nil, search only KEYMAP and the global keymap.
  15239. +If KEYMAP is nil, search all the currently active keymaps.
  15240. +
  15241. +If optional 3rd arg FIRSTONLY is non-nil, return the first key sequence found,
  15242. +rather than a list of all possible key sequences.
  15243. +If FIRSTONLY is t, avoid key sequences which use non-ASCII
  15244. +keys and therefore may not be usable on ASCII terminals.  If FIRSTONLY
  15245. +is the symbol `non-ascii', return the first binding found, no matter
  15246. +what its components.
  15247. +
  15248. +If optional 4th arg NOINDIRECT is non-nil, don't follow indirections
  15249. +to other keymaps or slots.  This makes it possible to search for an
  15250. +indirect definition itself.
  15251. +
  15252. +(where-is-internal DEFINITION &optional KEYMAP FIRSTONLY NOINDIRECT)Fdescribe-bindings
  15253. +Show a list of all defined keys, and their definitions.
  15254. +The list is put in a buffer, which is displayed.
  15255. +An optional argument PREFIX, if non-nil, should be a key sequence;
  15256. +then we display only bindings that start with that prefix.
  15257. +
  15258. +(describe-bindings &optional PREFIX)Fdescribe-vector
  15259. +Insert a description of contents of VECTOR.
  15260. +This is text showing the elements of vector matched against indices.
  15261. +
  15262. +(describe-vector VECTOR)Fapropos-internal
  15263. +Show all symbols whose names contain match for REGEXP.
  15264. +If optional 2nd arg PRED is non-nil, (funcall PRED SYM) is done
  15265. +for each symbol and a symbol is mentioned only if that returns non-nil.
  15266. +Return list of symbols found.
  15267. +
  15268. +(apropos-internal STRING &optional PRED)Vminibuffer-local-map
  15269. +Default keymap to use when reading from the minibuffer.Vminibuffer-local-ns-map
  15270. +Local keymap for the minibuffer when spaces are not allowed.Vminibuffer-local-completion-map
  15271. +Local keymap for minibuffer input with completion.Vminibuffer-local-must-match-map
  15272. +Local keymap for minibuffer input with completion, for exact match.Vminor-mode-map-alist
  15273. +Alist of keymaps to use for minor modes.
  15274. +Each element looks like (VARIABLE . KEYMAP); KEYMAP is used to read
  15275. +key sequences and look up bindings iff VARIABLE's value is non-nil.
  15276. +If two active keymaps bind the same key, the keymap appearing earlier
  15277. +in the list takes precedence.Vfunction-key-map
  15278. +Keymap mapping ASCII function key sequences onto their preferred forms.
  15279. +This allows Emacs to recognize function keys sent from ASCII
  15280. +terminals at any point in a key sequence.
  15281. +
  15282. +The `read-key-sequence' function replaces any subsequence bound by
  15283. +`function-key-map' with its binding.  More precisely, when the active
  15284. +keymaps have no binding for the current key sequence but
  15285. +`function-key-map' binds a suffix of the sequence to a vector or string,
  15286. +`read-key-sequence' replaces the matching suffix with its binding, and
  15287. +continues with the new sequence.
  15288. +
  15289. +The events that come from bindings in `function-key-map' are not
  15290. +themselves looked up in `function-key-map'.
  15291. +
  15292. +For example, suppose `function-key-map' binds `ESC O P' to [f1].
  15293. +Typing `ESC O P' to `read-key-sequence' would return [f1].  Typing
  15294. +`C-x ESC O P' would return [?\C-x f1].  If [f1] were a prefix
  15295. +key, typing `ESC O P x' would return [f1 x].Fbuffer-list
  15296. +Return a list of all existing live buffers.
  15297. +
  15298. +(buffer-list)Fget-buffer
  15299. +Return the buffer named NAME (a string).
  15300. +If there is no live buffer named NAME, return nil.
  15301. +NAME may also be a buffer; if so, the value is that buffer.
  15302. +
  15303. +(get-buffer NAME)Fget-file-buffer
  15304. +Return the buffer visiting file FILENAME (a string).
  15305. +The buffer's `buffer-file-name' must match exactly the expansion of FILENAME.
  15306. +If there is no such live buffer, return nil.
  15307. +
  15308. +(get-file-buffer FILENAME)Fget-buffer-create
  15309. +Return the buffer named NAME, or create such a buffer and return it.
  15310. +A new buffer is created if there is no live buffer named NAME.
  15311. +If NAME starts with a space, the new buffer does not keep undo information.
  15312. +If NAME is a buffer instead of a string, then it is the value returned.
  15313. +The value is never nil.
  15314. +
  15315. +(get-buffer-create NAME)Fgenerate-new-buffer-name
  15316. +Return a string that is the name of no existing buffer based on NAME.
  15317. +If there is no live buffer named NAME, then return NAME.
  15318. +Otherwise modify name by appending `<NUMBER>', incrementing NUMBER
  15319. +until an unused name is found, and then return that name.
  15320. +Optional second argument IGNORE specifies a name that is okay to use
  15321. +(if it is in the sequence to be tried)
  15322. +even if a buffer with that name exists.
  15323. +
  15324. +(generate-new-buffer-name NAME &optional IGNORE)Fbuffer-name
  15325. +Return the name of BUFFER, as a string.
  15326. +With no argument or nil as argument, return the name of the current buffer.
  15327. +
  15328. +(buffer-name &optional BUFFER)Fbuffer-file-name
  15329. +Return name of file BUFFER is visiting, or nil if none.
  15330. +No argument or nil as argument means use the current buffer.
  15331. +
  15332. +(buffer-file-name &optional BUFFER)Fbuffer-local-variables
  15333. +Return an alist of variables that are buffer-local in BUFFER.
  15334. +Most elements look like (SYMBOL . VALUE), describing one variable.
  15335. +For a symbol that is locally unbound, just the symbol appears in the value.
  15336. +Note that storing new VALUEs in these elements doesn't change the variables.
  15337. +No argument or nil as argument means use current buffer as BUFFER.
  15338. +
  15339. +(buffer-local-variables &optional BUFFER)Fbuffer-modified-p
  15340. +Return t if BUFFER was modified since its file was last read or saved.
  15341. +No argument or nil as argument means use current buffer as BUFFER.
  15342. +
  15343. +(buffer-modified-p &optional BUFFER)Fset-buffer-modified-p
  15344. +Mark current buffer as modified or unmodified according to FLAG.
  15345. +A non-nil FLAG means mark the buffer modified.
  15346. +
  15347. +(set-buffer-modified-p FLAG)Fbuffer-modified-tick
  15348. +Return BUFFER's tick counter, incremented for each change in text.
  15349. +Each buffer has a tick counter which is incremented each time the text in
  15350. +that buffer is changed.  It wraps around occasionally.
  15351. +No argument or nil as argument means use current buffer as BUFFER.
  15352. +
  15353. +(buffer-modified-tick &optional BUFFER)Frename-buffer
  15354. +Change current buffer's name to NEWNAME (a string).
  15355. +If second arg UNIQUE is nil or omitted, it is an error if a
  15356. +buffer named NEWNAME already exists.
  15357. +If UNIQUE is non-nil, come up with a new name using
  15358. +`generate-new-buffer-name'.
  15359. +Interactively, you can set UNIQUE with a prefix argument.
  15360. +We return the name we actually gave the buffer.
  15361. +This does not change the name of the visited file (if any).
  15362. +
  15363. +(rename-buffer NAME &optional UNIQUE)Fother-buffer
  15364. +Return most recently selected buffer other than BUFFER.
  15365. +Buffers not visible in windows are preferred to visible buffers,
  15366. +unless optional second argument VISIBLE-OK is non-nil.
  15367. +If no other buffer exists, the buffer `*scratch*' is returned.
  15368. +If BUFFER is omitted or nil, some interesting buffer is returned.
  15369. +
  15370. +(other-buffer &optional BUFFER VISIBLE-OK)Fbuffer-disable-undo
  15371. +Make BUFFER stop keeping undo information.
  15372. +No argument or nil as argument means do this for the current buffer.
  15373. +
  15374. +(buffer-disable-undo &optional BUFFER)Fbuffer-enable-undo
  15375. +Start keeping undo information for buffer BUFFER.
  15376. +No argument or nil as argument means do this for the current buffer.
  15377. +
  15378. +(buffer-enable-undo &optional BUFFER)Vkill-buffer-hook
  15379. +Hook to be run (by `run-hooks', which see) when a buffer is killed.
  15380. +The buffer being killed will be current while the hook is running.
  15381. +See `kill-buffer'.Fkill-buffer
  15382. +Kill the buffer BUFFER.
  15383. +The argument may be a buffer or may be the name of a buffer.
  15384. +An argument of nil means kill the current buffer.
  15385. +
  15386. +Value is t if the buffer is actually killed, nil if user says no.
  15387. +
  15388. +The value of `kill-buffer-hook' (which may be local to that buffer),
  15389. +if not void, is a list of functions to be called, with no arguments,
  15390. +before the buffer is actually killed.  The buffer to be killed is current
  15391. +when the hook functions are called.
  15392. +
  15393. +Any processes that have this buffer as the `process-buffer' are killed
  15394. +with `delete-process'.
  15395. +
  15396. +(kill-buffer BUFNAME)Fswitch-to-buffer
  15397. +Select buffer BUFFER in the current window.
  15398. +BUFFER may be a buffer or a buffer name.
  15399. +Optional second arg NORECORD non-nil means
  15400. +do not put this buffer at the front of the list of recently selected ones.
  15401. +
  15402. +WARNING: This is NOT the way to work on another buffer temporarily
  15403. +within a Lisp program!  Use `set-buffer' instead.  That avoids messing with
  15404. +the window-buffer correspondences.
  15405. +
  15406. +(switch-to-buffer BUFNAME &optional NORECORD)Fpop-to-buffer
  15407. +Select buffer BUFFER in some window, preferably a different one.
  15408. +If BUFFER is nil, then some other buffer is chosen.
  15409. +If `pop-up-windows' is non-nil, windows can be split to do this.
  15410. +If optional second arg OTHER-WINDOW is non-nil, insist on finding another
  15411. +window even if BUFFER is already visible in the selected window.
  15412. +
  15413. +(pop-to-buffer BUFNAME &optional OTHER)Fcurrent-buffer
  15414. +Return the current buffer as a Lisp object.
  15415. +
  15416. +(current-buffer)Fset-buffer
  15417. +Make the buffer BUFFER current for editing operations.
  15418. +BUFFER may be a buffer or the name of an existing buffer.
  15419. +See also `save-excursion' when you want to make a buffer current temporarily.
  15420. +This function does not display the buffer, so its effect ends
  15421. +when the current command terminates.
  15422. +Use `switch-to-buffer' or `pop-to-buffer' to switch buffers permanently.
  15423. +
  15424. +(set-buffer BUFNAME)Fbarf-if-buffer-read-only
  15425. +Signal a `buffer-read-only' error if the current buffer is read-only.
  15426. +
  15427. +(barf-if-buffer-read-only)Fbury-buffer
  15428. +Put BUFFER at the end of the list of all buffers.
  15429. +There it is the least likely candidate for `other-buffer' to return;
  15430. +thus, the least likely buffer for \[switch-to-buffer] to select by default.
  15431. +If BUFFER is nil or omitted, bury the current buffer.
  15432. +Also, if BUFFER is nil or omitted, remove the current buffer from the
  15433. +selected window if it is displayed there.
  15434. +
  15435. +(bury-buffer &optional BUF)Ferase-buffer
  15436. +Delete the entire contents of the current buffer.
  15437. +Any narrowing restriction in effect (see `narrow-to-region') is removed,
  15438. +so the buffer is truly empty after this.
  15439. +
  15440. +(erase-buffer)Flist-buffers
  15441. +Display a list of names of existing buffers.
  15442. +The list is displayed in a buffer named `*Buffer List*'.
  15443. +Note that buffers with names starting with spaces are omitted.
  15444. +Non-null optional arg FILES-ONLY means mention only file buffers.
  15445. +
  15446. +The M column contains a * for buffers that are modified.
  15447. +The R column contains a % for buffers that are read-only.
  15448. +
  15449. +(list-buffers &optional FILES)Fkill-all-local-variables
  15450. +Switch to Fundamental mode by killing current buffer's local variables.
  15451. +Most local variable bindings are eliminated so that the default values
  15452. +become effective once more.  Also, the syntax table is set from
  15453. +`standard-syntax-table', the local keymap is set to nil,
  15454. +and the abbrev table from `fundamental-mode-abbrev-table'.
  15455. +This function also forces redisplay of the mode line.
  15456. +
  15457. +Every function to select a new major mode starts by
  15458. +calling this function.
  15459. +
  15460. +As a special exception, local variables whose names have
  15461. +a non-nil `permanent-local' property are not eliminated by this function.
  15462. +
  15463. +The first thing this function does is run
  15464. +the normal hook `change-major-mode-hook'.
  15465. +
  15466. +(kill-all-local-variables)Foverlayp
  15467. +Return t if OBJECT is an overlay.
  15468. +
  15469. +(overlayp OBJECT)Fmake-overlay
  15470. +Create a new overlay with range BEG to END in BUFFER.
  15471. +If omitted, BUFFER defaults to the current buffer.
  15472. +BEG and END may be integers or markers.
  15473. +
  15474. +(make-overlay BEG END &optional BUFFER)Fmove-overlay
  15475. +Set the endpoints of OVERLAY to BEG and END in BUFFER.
  15476. +If BUFFER is omitted, leave OVERLAY in the same buffer it inhabits now.
  15477. +If BUFFER is omitted, and OVERLAY is in no buffer, put it in the current
  15478. +buffer.
  15479. +
  15480. +(move-overlay OVERLAY BEG END &optional BUFFER)Fdelete-overlay
  15481. +Delete the overlay OVERLAY from its buffer.
  15482. +
  15483. +(delete-overlay OVERLAY)Foverlay-start
  15484. +Return the position at which OVERLAY starts.
  15485. +
  15486. +(overlay-start OVERLAY)Foverlay-end
  15487. +Return the position at which OVERLAY ends.
  15488. +
  15489. +(overlay-end OVERLAY)Foverlay-buffer
  15490. +Return the buffer OVERLAY belongs to.
  15491. +
  15492. +(overlay-buffer OVERLAY)Foverlay-properties
  15493. +Return a list of the properties on OVERLAY.
  15494. +This is a copy of OVERLAY's plist; modifying its conses has no effect on
  15495. +OVERLAY.
  15496. +
  15497. +(overlay-properties OVERLAY)Foverlays-at
  15498. +Return a list of the overlays that contain position POS.
  15499. +
  15500. +(overlays-at POS)Fnext-overlay-change
  15501. +Return the next position after POS where an overlay starts or ends.
  15502. +If there are no more overlay boundaries after POS, return (point-max).
  15503. +
  15504. +(next-overlay-change POS)Foverlay-lists
  15505. +Return a pair of lists giving all the overlays of the current buffer.
  15506. +The car has all the overlays before the overlay center;
  15507. +the cdr has all the overlays after the overlay center.
  15508. +Recentering overlays moves overlays between these lists.
  15509. +The lists you get are copies, so that changing them has no effect.
  15510. +However, the overlays you get are the real objects that the buffer uses.
  15511. +
  15512. +(overlay-lists)Foverlay-recenter
  15513. +Recenter the overlays of the current buffer around position POS.
  15514. +
  15515. +(overlay-recenter POS)Foverlay-get
  15516. +Get the property of overlay OVERLAY with property name NAME.
  15517. +
  15518. +(overlay-get OVERLAY PROP)Foverlay-put
  15519. +Set one property of overlay OVERLAY: give property PROP value VALUE.
  15520. +
  15521. +(overlay-put OVERLAY PROP VALUE)Vdefault-mode-line-format
  15522. +Default value of `mode-line-format' for buffers that don't override it.
  15523. +This is the same as (default-value 'mode-line-format).Vdefault-abbrev-mode
  15524. +Default value of `abbrev-mode' for buffers that do not override it.
  15525. +This is the same as (default-value 'abbrev-mode).Vdefault-ctl-arrow
  15526. +Default value of `ctl-arrow' for buffers that do not override it.
  15527. +This is the same as (default-value 'ctl-arrow).Vdefault-truncate-lines
  15528. +Default value of `truncate-lines' for buffers that do not override it.
  15529. +This is the same as (default-value 'truncate-lines).Vdefault-fill-column
  15530. +Default value of `fill-column' for buffers that do not override it.
  15531. +This is the same as (default-value 'fill-column).Vdefault-left-margin
  15532. +Default value of `left-margin' for buffers that do not override it.
  15533. +This is the same as (default-value 'left-margin).Vdefault-tab-width
  15534. +Default value of `tab-width' for buffers that do not override it.
  15535. +This is the same as (default-value 'tab-width).Vdefault-case-fold-search
  15536. +Default value of `case-fold-search' for buffers that don't override it.
  15537. +This is the same as (default-value 'case-fold-search).Vdefault-buffer-file-type
  15538. +Default file type for buffers that do not override it.
  15539. +This is the same as (default-value 'buffer-file-type).
  15540. +The file type is nil for text, t for binary.Vmode-line-format
  15541. +Template for displaying mode line for current buffer.
  15542. +Each buffer has its own value of this variable.
  15543. +Value may be a string, a symbol or a list or cons cell.
  15544. +For a symbol, its value is used (but it is ignored if t or nil).
  15545. + A string appearing directly as the value of a symbol is processed verbatim
  15546. + in that the %-constructs below are not recognized.
  15547. +For a list whose car is a symbol, the symbol's value is taken,
  15548. + and if that is non-nil, the cadr of the list is processed recursively.
  15549. + Otherwise, the caddr of the list (if there is one) is processed.
  15550. +For a list whose car is a string or list, each element is processed
  15551. + recursively and the results are effectively concatenated.
  15552. +For a list whose car is an integer, the cdr of the list is processed
  15553. +  and padded (if the number is positive) or truncated (if negative)
  15554. +  to the width specified by that number.
  15555. +A string is printed verbatim in the mode line except for %-constructs:
  15556. +  (%-constructs are allowed when the string is the entire mode-line-format
  15557. +   or when it is found in a cons-cell or a list)
  15558. +  %b -- print buffer name.      %f -- print visited file name.
  15559. +  %* -- print %, * or hyphen.   %+ -- print *, % or hyphen.
  15560. +    % means buffer is read-only and * means it is modified.
  15561. +    For a modified read-only buffer, %* gives % and %+ gives *.
  15562. +  %s -- print process status.   %l -- print the current line number.
  15563. +  %p -- print percent of buffer above top of window, or Top, Bot or All.
  15564. +  %P -- print percent of buffer above bottom of window, perhaps plus Top,
  15565. +        or print Bottom or All.
  15566. +  %n -- print Narrow if appropriate.
  15567. +  %t -- print T if files is text, B if binary.
  15568. +  %[ -- print one [ for each recursive editing level.  %] similar.
  15569. +  %% -- print %.   %- -- print infinitely many dashes.
  15570. +Decimal digits after the % specify field width to which to pad.Vdefault-major-mode
  15571. +*Major mode for new buffers.  Defaults to `fundamental-mode'.
  15572. +nil here means use current buffer's major mode.Vmajor-mode
  15573. +Symbol for current buffer's major mode.Vmode-name
  15574. +Pretty name of current buffer's major mode (a string).Vabbrev-mode
  15575. +Non-nil turns on automatic expansion of abbrevs as they are inserted.
  15576. +Automatically becomes buffer-local when set in any fashion.Vcase-fold-search
  15577. +*Non-nil if searches should ignore case.
  15578. +Automatically becomes buffer-local when set in any fashion.Vfill-column
  15579. +*Column beyond which automatic line-wrapping should happen.
  15580. +Automatically becomes buffer-local when set in any fashion.Vleft-margin
  15581. +*Column for the default indent-line-function to indent to.
  15582. +Linefeed indents to this column in Fundamental mode.
  15583. +Automatically becomes buffer-local when set in any fashion.Vtab-width
  15584. +*Distance between tab stops (for display of tab characters), in columns.
  15585. +Automatically becomes buffer-local when set in any fashion.Vctl-arrow
  15586. +*Non-nil means display control chars with uparrow.
  15587. +Nil means use backslash and octal digits.
  15588. +Automatically becomes buffer-local when set in any fashion.
  15589. +This variable does not apply to characters whose display is specified
  15590. +in the current display table (if there is one).Vtruncate-lines
  15591. +*Non-nil means do not display continuation lines;
  15592. +give each line of text one screen line.
  15593. +Automatically becomes buffer-local when set in any fashion.
  15594. +
  15595. +Note that this is overridden by the variable
  15596. +`truncate-partial-width-windows' if that variable is non-nil
  15597. +and this buffer is not full-frame width.Vbuffer-file-type
  15598. +*If visited file is text, nil; otherwise, t.Vdefault-directory
  15599. +Name of default directory of current buffer.  Should end with slash.
  15600. +Each buffer has its own value of this variable.Vauto-fill-function
  15601. +Function called (if non-nil) to perform auto-fill.
  15602. +It is called after self-inserting a space at a column beyond `fill-column'.
  15603. +Each buffer has its own value of this variable.
  15604. +NOTE: This variable is not an ordinary hook;
  15605. +It may not be a list of functions.Vbuffer-file-name
  15606. +Name of file visited in current buffer, or nil if not visiting a file.
  15607. +Each buffer has its own value of this variable.Vbuffer-auto-save-file-name
  15608. +Name of file for auto-saving current buffer,
  15609. +or nil if buffer should not be auto-saved.
  15610. +Each buffer has its own value of this variable.Vbuffer-read-only
  15611. +Non-nil if this buffer is read-only.
  15612. +Each buffer has its own value of this variable.Vbuffer-backed-up
  15613. +Non-nil if this buffer's file has been backed up.
  15614. +Backing up is done before the first time the file is saved.
  15615. +Each buffer has its own value of this variable.Vbuffer-saved-size
  15616. +Length of current buffer when last read in, saved or auto-saved.
  15617. +0 initially.
  15618. +Each buffer has its own value of this variable.Vselective-display
  15619. +Non-nil enables selective display:
  15620. +Integer N as value means display only lines
  15621. + that start with less than n columns of space.
  15622. +A value of t means, after a ^M, all the rest of the line is invisible.
  15623. + Then ^M's in the file are written into files as newlines.
  15624. +
  15625. +Automatically becomes buffer-local when set in any fashion.Vselective-display-ellipses
  15626. +t means display ... on previous line when a line is invisible.
  15627. +Automatically becomes buffer-local when set in any fashion.Voverwrite-mode
  15628. +Non-nil if self-insertion should replace existing text.
  15629. +If non-nil and not `overwrite-mode-binary', self-insertion still
  15630. +inserts at the end of a line, and inserts when point is before a tab,
  15631. +until the tab is filled in.
  15632. +If `overwrite-mode-binary', self-insertion replaces newlines and tabs too.
  15633. +Automatically becomes buffer-local when set in any fashion.Vbuffer-display-table
  15634. +Display table that controls display of the contents of current buffer.
  15635. +Automatically becomes buffer-local when set in any fashion.
  15636. +The display table is a vector created with `make-display-table'.
  15637. +The first 256 elements control how to display each possible text character.
  15638. +Each value should be a vector of characters or nil;
  15639. +nil means display the character in the default fashion.
  15640. +The remaining five elements control the display of
  15641. +  the end of a truncated screen line (element 256, a single character);
  15642. +  the end of a continued line (element 257, a single character);
  15643. +  the escape character used to display character codes in octal
  15644. +    (element 258, a single character);
  15645. +  the character used as an arrow for control characters (element 259,
  15646. +    a single character);
  15647. +  the decoration indicating the presence of invisible lines (element 260,
  15648. +    a vector of characters).
  15649. +If this variable is nil, the value of `standard-display-table' is used.
  15650. +Each window can have its own, overriding display table.Vbefore-change-function
  15651. +Function to call before each text change.
  15652. +Two arguments are passed to the function: the positions of
  15653. +the beginning and end of the range of old text to be changed.
  15654. +(For an insertion, the beginning and end are at the same place.)
  15655. +No information is given about the length of the text after the change.
  15656. +
  15657. +Buffer changes made while executing the `before-change-function'
  15658. +don't call any before-change or after-change functions.
  15659. +That's because these variables are temporarily set to nil.
  15660. +As a result, a hook function cannot straightforwardly alter the value of
  15661. +these variables.  See the Emacs Lisp manual for a way of
  15662. +accomplishing an equivalent result by using other variables.Vafter-change-function
  15663. +Function to call after each text change.
  15664. +Three arguments are passed to the function: the positions of
  15665. +the beginning and end of the range of changed text,
  15666. +and the length of the pre-change text replaced by that range.
  15667. +(For an insertion, the pre-change length is zero;
  15668. +for a deletion, that length is the number of characters deleted,
  15669. +and the post-change beginning and end are at the same place.)
  15670. +
  15671. +Buffer changes made while executing the `after-change-function'
  15672. +don't call any before-change or after-change functions.
  15673. +That's because these variables are temporarily set to nil.
  15674. +As a result, a hook function cannot straightforwardly alter the value of
  15675. +these variables.  See the Emacs Lisp manual for a way of
  15676. +accomplishing an equivalent result by using other variables.Vbefore-change-functions
  15677. +List of functions to call before each text change.
  15678. +Two arguments are passed to each function: the positions of
  15679. +the beginning and end of the range of old text to be changed.
  15680. +(For an insertion, the beginning and end are at the same place.)
  15681. +No information is given about the length of the text after the change.
  15682. +
  15683. +Buffer changes made while executing the `before-change-functions'
  15684. +don't call any before-change or after-change functions.
  15685. +That's because these variables are temporarily set to nil.
  15686. +As a result, a hook function cannot straightforwardly alter the value of
  15687. +these variables.  See the Emacs Lisp manual for a way of
  15688. +accomplishing an equivalent result by using other variables.Vafter-change-functions
  15689. +List of function to call after each text change.
  15690. +Three arguments are passed to each function: the positions of
  15691. +the beginning and end of the range of changed text,
  15692. +and the length of the pre-change text replaced by that range.
  15693. +(For an insertion, the pre-change length is zero;
  15694. +for a deletion, that length is the number of characters deleted,
  15695. +and the post-change beginning and end are at the same place.)
  15696. +
  15697. +Buffer changes made while executing the `after-change-functions'
  15698. +don't call any before-change or after-change functions.
  15699. +That's because these variables are temporarily set to nil.
  15700. +As a result, a hook function cannot straightforwardly alter the value of
  15701. +these variables.  See the Emacs Lisp manual for a way of
  15702. +accomplishing an equivalent result by using other variables.Vfirst-change-hook
  15703. +A list of functions to call before changing a buffer which is unmodified.
  15704. +The functions are run using the `run-hooks' function.Vbuffer-undo-list
  15705. +List of undo entries in current buffer.
  15706. +Recent changes come first; older changes follow newer.
  15707. +
  15708. +An entry (START . END) represents an insertion which begins at
  15709. +position START and ends at position END.
  15710. +
  15711. +An entry (TEXT . POSITION) represents the deletion of the string TEXT
  15712. +from (abs POSITION).  If POSITION is positive, point was at the front
  15713. +of the text being deleted; if negative, point was at the end.
  15714. +
  15715. +An entry (t HIGHWORD LOWWORD) indicates that the buffer had been
  15716. +previously unmodified.  HIGHWORD and LOWWORD are the high and low
  15717. +16-bit words of the buffer's modification count at the time.  If the
  15718. +modification count of the most recent save is different, this entry is
  15719. +obsolete.
  15720. +
  15721. +An entry (nil PROP VAL BEG . END) indicates that a text property
  15722. +was modified between BEG and END.  PROP is the property name,
  15723. +and VAL is the old value.
  15724. +
  15725. +An entry of the form POSITION indicates that point was at the buffer
  15726. +location given by the integer.  Undoing an entry of this form places
  15727. +point at POSITION.
  15728. +
  15729. +nil marks undo boundaries.  The undo command treats the changes
  15730. +between two undo boundaries as a single step to be undone.
  15731. +
  15732. +If the value of the variable is t, undo information is not recorded.Vmark-active
  15733. +Non-nil means the mark and region are currently active in this buffer.
  15734. +Automatically local in all buffers.Vtransient-mark-mode
  15735. +*Non-nil means deactivate the mark when the buffer contents change.Vinhibit-read-only
  15736. +*Non-nil means disregard read-only status of buffers or characters.
  15737. +If the value is t, disregard `buffer-read-only' and all `read-only'
  15738. +text properties.  If the value is a list, disregard `buffer-read-only'
  15739. +and disregard a `read-only' text property if the property value
  15740. +is a member of the list.Vkill-buffer-query-functions
  15741. +List of functions called with no args to query before killing a buffer.Flock-buffer
  15742. +Lock FILE, if current buffer is modified.
  15743. +FILE defaults to current buffer's visited file,
  15744. +or else nothing is done if current buffer isn't visiting a file.
  15745. +
  15746. +(lock-buffer &optional FN)Funlock-buffer
  15747. +Unlock the file visited in the current buffer,
  15748. +if it should normally be locked.
  15749. +
  15750. +(unlock-buffer)Ffile-locked-p
  15751. +Return nil if the FILENAME is not locked,
  15752. +t if it is locked by you, else a string of the name of the locker.
  15753. +
  15754. +(file-locked-p &optional FN)Fmarker-buffer
  15755. +Return the buffer that MARKER points into, or nil if none.
  15756. +Returns nil if MARKER points into a dead buffer.
  15757. +
  15758. +(marker-buffer MARKER)Fmarker-position
  15759. +Return the position MARKER points at, as a character number.
  15760. +
  15761. +(marker-position MARKER)Fset-marker
  15762. +Position MARKER before character number NUMBER in BUFFER.
  15763. +BUFFER defaults to the current buffer.
  15764. +If NUMBER is nil, makes marker point nowhere.
  15765. +Then it no longer slows down editing in any buffer.
  15766. +Returns MARKER.
  15767. +
  15768. +(set-marker MARKER POS &optional BUFFER)Fcopy-marker
  15769. +Return a new marker pointing at the same place as MARKER.
  15770. +If argument is a number, makes a new marker pointing
  15771. +at that position in the current buffer.
  15772. +
  15773. +(copy-marker MARKER)Ftext-properties-at
  15774. +Return the list of properties held by the character at POSITION
  15775. +in optional argument OBJECT, a string or buffer.  If nil, OBJECT
  15776. +defaults to the current buffer.
  15777. +If POSITION is at the end of OBJECT, the value is nil.
  15778. +
  15779. +(text-properties-at POS &optional OBJECT)Fget-text-property
  15780. +Return the value of position POS's property PROP, in OBJECT.
  15781. +OBJECT is optional and defaults to the current buffer.
  15782. +If POSITION is at the end of OBJECT, the value is nil.
  15783. +
  15784. +(get-text-property POS PROP &optional OBJECT)Fget-char-property
  15785. +Return the value of position POS's property PROP, in OBJECT.
  15786. +OBJECT is optional and defaults to the current buffer.
  15787. +If POS is at the end of OBJECT, the value is nil.
  15788. +If OBJECT is a buffer, then overlay properties are considered as well as
  15789. +text properties.
  15790. +If OBJECT is a window, then that window's buffer is used, but window-specific
  15791. +overlays are considered only if they are associated with OBJECT.
  15792. +
  15793. +(get-char-property POS PROP &optional OBJECT)Fnext-property-change
  15794. +Return the position of next property change.
  15795. +Scans characters forward from POS in OBJECT till it finds
  15796. +a change in some text property, then returns the position of the change.
  15797. +The optional second argument OBJECT is the string or buffer to scan.
  15798. +Return nil if the property is constant all the way to the end of OBJECT.
  15799. +If the value is non-nil, it is a position greater than POS, never equal.
  15800. +
  15801. +If the optional third argument LIMIT is non-nil, don't search
  15802. +past position LIMIT; return LIMIT if nothing is found before LIMIT.
  15803. +
  15804. +(next-property-change POS &optional OBJECT LIMIT)Fnext-single-property-change
  15805. +Return the position of next property change for a specific property.
  15806. +Scans characters forward from POS till it finds
  15807. +a change in the PROP property, then returns the position of the change.
  15808. +The optional third argument OBJECT is the string or buffer to scan.
  15809. +The property values are compared with `eq'.
  15810. +Return nil if the property is constant all the way to the end of OBJECT.
  15811. +If the value is non-nil, it is a position greater than POS, never equal.
  15812. +
  15813. +If the optional fourth argument LIMIT is non-nil, don't search
  15814. +past position LIMIT; return LIMIT if nothing is found before LIMIT.
  15815. +
  15816. +(next-single-property-change POS PROP &optional OBJECT LIMIT)Fprevious-property-change
  15817. +Return the position of previous property change.
  15818. +Scans characters backwards from POS in OBJECT till it finds
  15819. +a change in some text property, then returns the position of the change.
  15820. +The optional second argument OBJECT is the string or buffer to scan.
  15821. +Return nil if the property is constant all the way to the start of OBJECT.
  15822. +If the value is non-nil, it is a position less than POS, never equal.
  15823. +
  15824. +If the optional third argument LIMIT is non-nil, don't search
  15825. +back past position LIMIT; return LIMIT if nothing is found until LIMIT.
  15826. +
  15827. +(previous-property-change POS &optional OBJECT LIMIT)Fprevious-single-property-change
  15828. +Return the position of previous property change for a specific property.
  15829. +Scans characters backward from POS till it finds
  15830. +a change in the PROP property, then returns the position of the change.
  15831. +The optional third argument OBJECT is the string or buffer to scan.
  15832. +The property values are compared with `eq'.
  15833. +Return nil if the property is constant all the way to the start of OBJECT.
  15834. +If the value is non-nil, it is a position less than POS, never equal.
  15835. +
  15836. +If the optional fourth argument LIMIT is non-nil, don't search
  15837. +back past position LIMIT; return LIMIT if nothing is found until LIMIT.
  15838. +
  15839. +(previous-single-property-change POS PROP &optional OBJECT LIMIT)Fadd-text-properties
  15840. +Add properties to the text from START to END.
  15841. +The third argument PROPS is a property list
  15842. +specifying the property values to add.
  15843. +The optional fourth argument, OBJECT,
  15844. +is the string or buffer containing the text.
  15845. +Return t if any property value actually changed, nil otherwise.
  15846. +
  15847. +(add-text-properties START END PROPERTIES &optional OBJECT)Fput-text-property
  15848. +Set one property of the text from START to END.
  15849. +The third and fourth arguments PROP and VALUE
  15850. +specify the property to add.
  15851. +The optional fifth argument, OBJECT,
  15852. +is the string or buffer containing the text.
  15853. +
  15854. +(put-text-property START END PROP VALUE &optional OBJECT)Fset-text-properties
  15855. +Completely replace properties of text from START to END.
  15856. +The third argument PROPS is the new property list.
  15857. +The optional fourth argument, OBJECT,
  15858. +is the string or buffer containing the text.
  15859. +
  15860. +(set-text-properties START END PROPS &optional OBJECT)Fremove-text-properties
  15861. +Remove some properties from text from START to END.
  15862. +The third argument PROPS is a property list
  15863. +whose property names specify the properties to remove.
  15864. +(The values stored in PROPS are ignored.)
  15865. +The optional fourth argument, OBJECT,
  15866. +is the string or buffer containing the text.
  15867. +Return t if any property was actually removed, nil otherwise.
  15868. +
  15869. +(remove-text-properties START END PROPS &optional OBJECT)Ftext-property-any
  15870. +Check text from START to END to see if PROP is ever `eq' to VALUE.
  15871. +If so, return the position of the first character whose PROP is `eq'
  15872. +to VALUE.  Otherwise return nil.
  15873. +The optional fifth argument, OBJECT, is the string or buffer
  15874. +containing the text.
  15875. +
  15876. +(text-property-any START END PROP VALUE &optional OBJECT)Ftext-property-not-all
  15877. +Check text from START to END to see if PROP is ever not `eq' to VALUE.
  15878. +If so, return the position of the first character whose PROP is not
  15879. +`eq' to VALUE.  Otherwise, return nil.
  15880. +The optional fifth argument, OBJECT, is the string or buffer
  15881. +containing the text.
  15882. +
  15883. +(text-property-not-all START END PROP VALUE &optional OBJECT)Ferase-text-properties
  15884. +Remove all properties from the text from START to END.
  15885. +The optional third argument, OBJECT,
  15886. +is the string or buffer containing the text.
  15887. +
  15888. +(erase-text-properties START END &optional OBJECT)Vinterval-balance-threshold
  15889. +Threshold for rebalancing interval trees, expressed as the
  15890. +percentage by which the left interval tree should not differ from the right.Vinhibit-point-motion-hooks
  15891. +If non-nil, don't call the text property values of
  15892. +`point-left' and `point-entered'.Fread-from-minibuffer
  15893. +Read a string from the minibuffer, prompting with string PROMPT.
  15894. +If optional second arg INITIAL-CONTENTS is non-nil, it is a string
  15895. +  to be inserted into the minibuffer before reading input.
  15896. +  If INITIAL-CONTENTS is (STRING . POSITION), the initial input
  15897. +  is STRING, but point is placed POSITION characters into the string.
  15898. +Third arg KEYMAP is a keymap to use whilst reading;
  15899. +  if omitted or nil, the default is `minibuffer-local-map'.
  15900. +If fourth arg READ is non-nil, then interpret the result as a lisp object
  15901. +  and return that object:
  15902. +  in other words, do `(car (read-from-string INPUT-STRING))'
  15903. +Fifth arg HIST, if non-nil, specifies a history list
  15904. +  and optionally the initial position in the list.
  15905. +  It can be a symbol, which is the history list variable to use,
  15906. +  or it can be a cons cell (HISTVAR . HISTPOS).
  15907. +  In that case, HISTVAR is the history list variable to use,
  15908. +  and HISTPOS is the initial position (the position in the list
  15909. +  which INITIAL-CONTENTS corresponds to).
  15910. +  Positions are counted starting from 1 at the beginning of the list.
  15911. +
  15912. +(read-from-minibuffer PROMPT &optional INITIAL-CONTENTS KEYMAP READ HIST)Fread-minibuffer
  15913. +Return a Lisp object read using the minibuffer.
  15914. +Prompt with PROMPT.  If non-nil, optional second arg INITIAL-CONTENTS
  15915. +is a string to insert in the minibuffer before reading.
  15916. +
  15917. +(read-minibuffer PROMPT &optional INITIAL-CONTENTS)Feval-minibuffer
  15918. +Return value of Lisp expression read using the minibuffer.
  15919. +Prompt with PROMPT.  If non-nil, optional second arg INITIAL-CONTENTS
  15920. +is a string to insert in the minibuffer before reading.
  15921. +
  15922. +(eval-minibuffer PROMPT &optional INITIAL-CONTENTS)Fread-string
  15923. +Read a string from the minibuffer, prompting with string PROMPT.
  15924. +If non-nil second arg INITIAL-INPUT is a string to insert before reading.
  15925. +
  15926. +(read-string PROMPT &optional INITIAL-INPUT)Fread-no-blanks-input
  15927. +Args PROMPT and INIT, strings.  Read a string from the terminal, not allowing blanks.
  15928. +Prompt with PROMPT, and provide INIT as an initial value of the input string.
  15929. +
  15930. +(read-no-blanks-input PROMPT &optional INIT)Fread-command
  15931. +One arg PROMPT, a string.  Read the name of a command and return as a symbol.
  15932. +Prompts with PROMPT.
  15933. +
  15934. +(read-command PROMPT)Fread-function
  15935. +One arg PROMPT, a string.  Read the name of a function and return as a symbol.
  15936. +Prompts with PROMPT.
  15937. +
  15938. +(read-function PROMPT)Fread-variable
  15939. +One arg PROMPT, a string.  Read the name of a user variable and return
  15940. +it as a symbol.  Prompts with PROMPT.
  15941. +A user variable is one whose documentation starts with a `*' character.
  15942. +
  15943. +(read-variable PROMPT)Fread-buffer
  15944. +One arg PROMPT, a string.  Read the name of a buffer and return as a string.
  15945. +Prompts with PROMPT.
  15946. +Optional second arg is value to return if user enters an empty line.
  15947. +If optional third arg REQUIRE-MATCH is non-nil, only existing buffer names are allowed.
  15948. +
  15949. +(read-buffer PROMPT &optional DEF REQUIRE-MATCH)Ftry-completion
  15950. +Return common substring of all completions of STRING in ALIST.
  15951. +Each car of each element of ALIST is tested to see if it begins with STRING.
  15952. +All that match are compared together; the longest initial sequence
  15953. +common to all matches is returned as a string.
  15954. +If there is no match at all, nil is returned.
  15955. +For an exact match, t is returned.
  15956. +
  15957. +ALIST can be an obarray instead of an alist.
  15958. +Then the print names of all symbols in the obarray are the possible matches.
  15959. +
  15960. +ALIST can also be a function to do the completion itself.
  15961. +It receives three arguments: the values STRING, PREDICATE and nil.
  15962. +Whatever it returns becomes the value of `try-completion'.
  15963. +
  15964. +If optional third argument PREDICATE is non-nil,
  15965. +it is used to test each possible match.
  15966. +The match is a candidate only if PREDICATE returns non-nil.
  15967. +The argument given to PREDICATE is the alist element or the symbol from the obarray.
  15968. +
  15969. +(try-completion STRING ALIST &optional PRED)Fall-completions
  15970. +Search for partial matches to STRING in ALIST.
  15971. +Each car of each element of ALIST is tested to see if it begins with STRING.
  15972. +The value is a list of all the strings from ALIST that match.
  15973. +ALIST can be an obarray instead of an alist.
  15974. +Then the print names of all symbols in the obarray are the possible matches.
  15975. +
  15976. +ALIST can also be a function to do the completion itself.
  15977. +It receives three arguments: the values STRING, PREDICATE and t.
  15978. +Whatever it returns becomes the value of `all-completion'.
  15979. +
  15980. +If optional third argument PREDICATE is non-nil,
  15981. +it is used to test each possible match.
  15982. +The match is a candidate only if PREDICATE returns non-nil.
  15983. +The argument given to PREDICATE is the alist element or the symbol from the obarray.
  15984. +
  15985. +(all-completions STRING ALIST &optional PRED)Fcompleting-read
  15986. +Read a string in the minibuffer, with completion.
  15987. +Args: PROMPT, TABLE, PREDICATE, REQUIRE-MATCH, INITIAL-INPUT, HIST.
  15988. +PROMPT is a string to prompt with; normally it ends in a colon and a space.
  15989. +TABLE is an alist whose elements' cars are strings, or an obarray.
  15990. +PREDICATE limits completion to a subset of TABLE.
  15991. +See `try-completion' for more details on completion, TABLE, and PREDICATE.
  15992. +If REQUIRE-MATCH is non-nil, the user is not allowed to exit unless
  15993. + the input is (or completes to) an element of TABLE or is null.
  15994. + If it is also not t, Return does not exit if it does non-null completion.
  15995. +If INITIAL-INPUT is non-nil, insert it in the minibuffer initially.
  15996. +  If it is (STRING . POSITION), the initial input
  15997. +  is STRING, but point is placed POSITION characters into the string.
  15998. +HIST, if non-nil, specifies a history list
  15999. +  and optionally the initial position in the list.
  16000. +  It can be a symbol, which is the history list variable to use,
  16001. +  or it can be a cons cell (HISTVAR . HISTPOS).
  16002. +  In that case, HISTVAR is the history list variable to use,
  16003. +  and HISTPOS is the initial position (the position in the list
  16004. +  which INITIAL-CONTENTS corresponds to).
  16005. +  Positions are counted starting from 1 at the beginning of the list.
  16006. +Completion ignores case if the ambient value of
  16007. +  `completion-ignore-case' is non-nil.
  16008. +
  16009. +(completing-read PROMPT TABLE &optional PRED REQUIRE-MATCH INIT HIST)Fminibuffer-complete
  16010. +Complete the minibuffer contents as far as possible.
  16011. +Return nil if there is no valid completion, else t.
  16012. +If no characters can be completed, display a list of possible completions.
  16013. +If you repeat this command after it displayed such a list,
  16014. +scroll the window of possible completions.
  16015. +
  16016. +(minibuffer-complete)Fminibuffer-complete-and-exit
  16017. +Complete the minibuffer contents, and maybe exit.
  16018. +Exit if the name is valid with no completion needed.
  16019. +If name was completed to a valid match,
  16020. +a repetition of this command will exit.
  16021. +
  16022. +(minibuffer-complete-and-exit)Fminibuffer-complete-word
  16023. +Complete the minibuffer contents at most a single word.
  16024. +After one word is completed as much as possible, a space or hyphen
  16025. +is added, provided that matches some possible completion.
  16026. +Return nil if there is no valid completion, else t.
  16027. +
  16028. +(minibuffer-complete-word)Fdisplay-completion-list
  16029. +Display the list of completions, COMPLETIONS, using `standard-output'.
  16030. +Each element may be just a symbol or string
  16031. +or may be a list of two strings to be printed as if concatenated.
  16032. +`standard-output' must be a buffer.
  16033. +At the end, run the normal hook `completion-setup-hook'.
  16034. +It can find the completion buffer in `standard-output'.
  16035. +
  16036. +(display-completion-list COMPLETIONS)Fminibuffer-completion-help
  16037. +Display a list of possible completions of the current minibuffer contents.
  16038. +
  16039. +(minibuffer-completion-help)Fself-insert-and-exit
  16040. +Terminate minibuffer input.
  16041. +
  16042. +(self-insert-and-exit)Fexit-minibuffer
  16043. +Terminate this minibuffer argument.
  16044. +
  16045. +(exit-minibuffer)Fminibuffer-depth
  16046. +Return current depth of activations of minibuffer, a nonnegative integer.
  16047. +
  16048. +(minibuffer-depth)Fminibuffer-prompt
  16049. +Return the prompt string of the currently-active minibuffer.
  16050. +If no minibuffer is active, return nil.
  16051. +
  16052. +(minibuffer-prompt)Fminibuffer-prompt-width
  16053. +Return the display width of the minibuffer prompt.
  16054. +
  16055. +(minibuffer-prompt-width)Vminibuffer-setup-hook
  16056. +Normal hook run just after entry to minibuffer.Vminibuffer-exit-hook
  16057. +Normal hook run just after exit from minibuffer.Vcompletion-auto-help
  16058. +*Non-nil means automatically provide help for invalid completion input.Vcompletion-ignore-case
  16059. +Non-nil means don't consider case significant in completion.Venable-recursive-minibuffers
  16060. +*Non-nil means to allow minibuffer commands while in the minibuffer.
  16061. +More precisely, this variable makes a difference when the minibuffer window
  16062. +is the selected window.  If you are in some other window, minibuffer commands
  16063. +are allowed even if a minibuffer is active.Vminibuffer-completion-table
  16064. +Alist or obarray used for completion in the minibuffer.
  16065. +This becomes the ALIST argument to `try-completion' and `all-completion'.
  16066. +
  16067. +The value may alternatively be a function, which is given three arguments:
  16068. +  STRING, the current buffer contents;
  16069. +  PREDICATE, the predicate for filtering possible matches;
  16070. +  CODE, which says what kind of things to do.
  16071. +CODE can be nil, t or `lambda'.
  16072. +nil means to return the best completion of STRING, or nil if there is none.
  16073. +t means to return a list of all possible completions of STRING.
  16074. +`lambda' means to return t if STRING is a valid completion as it stands.Vminibuffer-completion-predicate
  16075. +Within call to `completing-read', this holds the PREDICATE argument.Vminibuffer-completion-confirm
  16076. +Non-nil => demand confirmation of completion before exiting minibuffer.Vminibuffer-help-form
  16077. +Value that `help-form' takes on inside the minibuffer.Vminibuffer-history-variable
  16078. +History list symbol to add minibuffer values to.
  16079. +Each minibuffer output is added with
  16080. +  (set minibuffer-history-variable
  16081. +       (cons STRING (symbol-value minibuffer-history-variable)))Vminibuffer-history-position
  16082. +Current position of redoing in the history list.Vminibuffer-auto-raise
  16083. +*Non-nil means entering the minibuffer raises the minibuffer's frame.Vcompletion-regexp-list
  16084. +List of regexps that should restrict possible completions.Ffind-file-name-handler
  16085. +Return FILENAME's handler function for OPERATION, if it has one.
  16086. +Otherwise, return nil.
  16087. +A file name is handled if one of the regular expressions in
  16088. +`file-name-handler-alist' matches it.
  16089. +
  16090. +If OPERATION equals `inhibit-file-name-operation', then we ignore
  16091. +any handlers that are members of `inhibit-file-name-handlers',
  16092. +but we still do run any other handlers.  This lets handlers
  16093. +use the standard functions without calling themselves recursively.
  16094. +
  16095. +(find-file-name-handler FILENAME OPERATION)Ffile-name-directory
  16096. +Return the directory component in file name NAME.
  16097. +Return nil if NAME does not include a directory.
  16098. +Otherwise return a directory spec.
  16099. +Given a Unix syntax file name, returns a string ending in slash;
  16100. +on VMS, perhaps instead a string ending in `:', `]' or `>'.
  16101. +
  16102. +(file-name-directory FILE)Ffile-name-nondirectory
  16103. +Return file name NAME sans its directory.
  16104. +For example, in a Unix-syntax file name,
  16105. +this is everything after the last slash,
  16106. +or the entire name if it contains no slash.
  16107. +
  16108. +(file-name-nondirectory FILE)Funhandled-file-name-directory
  16109. +Return a directly usable directory name somehow associated with FILENAME.
  16110. +A `directly usable' directory name is one that may be used without the
  16111. +intervention of any file handler.
  16112. +If FILENAME is a directly usable file itself, return
  16113. +(file-name-directory FILENAME).
  16114. +The `call-process' and `start-process' functions use this function to
  16115. +get a current directory to run processes in.
  16116. +
  16117. +(unhandled-file-name-directory FILENAME)Ffile-name-as-directory
  16118. +Return a string representing file FILENAME interpreted as a directory.
  16119. +This operation exists because a directory is also a file, but its name as
  16120. +a directory is different from its name as a file.
  16121. +The result can be used as the value of `default-directory'
  16122. +or passed as second argument to `expand-file-name'.
  16123. +For a Unix-syntax file name, just appends a slash.
  16124. +On VMS, converts "[X]FOO.DIR" to "[X.FOO]", etc.
  16125. +
  16126. +(file-name-as-directory FILE)Fdirectory-file-name
  16127. +Returns the file name of the directory named DIR.
  16128. +This is the name of the file that holds the data for the directory DIR.
  16129. +This operation exists because a directory is also a file, but its name as
  16130. +a directory is different from its name as a file.
  16131. +In Unix-syntax, this function just removes the final slash.
  16132. +On VMS, given a VMS-syntax directory name such as "[X.Y]",
  16133. +it returns a file name such as "[X]Y.DIR.1".
  16134. +
  16135. +(directory-file-name DIRECTORY)Fmake-temp-name
  16136. +Generate temporary file name (string) starting with PREFIX (a string).
  16137. +The Emacs process number forms part of the result,
  16138. +so there is no danger of generating a name being used by another process.
  16139. +
  16140. +(make-temp-name PREFIX)Fexpand-file-name
  16141. +Convert FILENAME to absolute, and canonicalize it.
  16142. +Second arg DEFAULT is directory to start with if FILENAME is relative
  16143. + (does not start with slash); if DEFAULT is nil or missing,
  16144. +the current buffer's value of default-directory is used.
  16145. +Path components that are `.' are removed, and 
  16146. +path components followed by `..' are removed, along with the `..' itself;
  16147. +note that these simplifications are done without checking the resulting
  16148. +paths in the file system.
  16149. +An initial `~/' expands to your home directory.
  16150. +An initial `~USER/' expands to USER's home directory.
  16151. +See also the function `substitute-in-file-name'.
  16152. +
  16153. +(expand-file-name NAME &optional DEFAULT)Fsubstitute-in-file-name
  16154. +Substitute environment variables referred to in FILENAME.
  16155. +`$FOO' where FOO is an environment variable name means to substitute
  16156. +the value of that variable.  The variable name should be terminated
  16157. +with a character not a letter, digit or underscore; otherwise, enclose
  16158. +the entire variable name in braces.
  16159. +If `/~' appears, all of FILENAME through that `/' is discarded.
  16160. +
  16161. +On VMS, `$' substitution is not done; this function does little and only
  16162. +duplicates what `expand-file-name' does.
  16163. +
  16164. +(substitute-in-file-name STRING)Fcopy-file
  16165. +Copy FILE to NEWNAME.  Both args must be strings.
  16166. +Signals a `file-already-exists' error if file NEWNAME already exists,
  16167. +unless a third argument OK-IF-ALREADY-EXISTS is supplied and non-nil.
  16168. +A number as third arg means request confirmation if NEWNAME already exists.
  16169. +This is what happens in interactive use with M-x.
  16170. +Fourth arg KEEP-TIME non-nil means give the new file the same
  16171. +last-modified time as the old one.  (This works on only some systems.)
  16172. +A prefix arg makes KEEP-TIME non-nil.
  16173. +
  16174. +(copy-file FILENAME NEWNAME &optional OK-IF-ALREADY-EXISTS KEEP-DATE)Fmake-directory-internal
  16175. +Create a directory.  One argument, a file name string.
  16176. +
  16177. +(make-directory-internal DIRNAME)Fdelete-directory
  16178. +Delete a directory.  One argument, a file name or directory name string.
  16179. +
  16180. +(delete-directory DIRNAME)Fdelete-file
  16181. +Delete specified file.  One argument, a file name string.
  16182. +If file has multiple names, it continues to exist with the other names.
  16183. +
  16184. +(delete-file FILENAME)Frename-file
  16185. +Rename FILE as NEWNAME.  Both args strings.
  16186. +If file has names other than FILE, it continues to have those names.
  16187. +Signals a `file-already-exists' error if a file NEWNAME already exists
  16188. +unless optional third argument OK-IF-ALREADY-EXISTS is non-nil.
  16189. +A number as third arg means request confirmation if NEWNAME already exists.
  16190. +This is what happens in interactive use with M-x.
  16191. +
  16192. +(rename-file FILENAME NEWNAME &optional OK-IF-ALREADY-EXISTS)Fadd-name-to-file
  16193. +Give FILE additional name NEWNAME.  Both args strings.
  16194. +Signals a `file-already-exists' error if a file NEWNAME already exists
  16195. +unless optional third argument OK-IF-ALREADY-EXISTS is non-nil.
  16196. +A number as third arg means request confirmation if NEWNAME already exists.
  16197. +This is what happens in interactive use with M-x.
  16198. +
  16199. +(add-name-to-file FILENAME NEWNAME &optional OK-IF-ALREADY-EXISTS)Fmake-symbolic-link
  16200. +Make a symbolic link to FILENAME, named LINKNAME.  Both args strings.
  16201. +Signals a `file-already-exists' error if a file NEWNAME already exists
  16202. +unless optional third argument OK-IF-ALREADY-EXISTS is non-nil.
  16203. +A number as third arg means request confirmation if NEWNAME already exists.
  16204. +This happens for interactive use with M-x.
  16205. +
  16206. +(make-symbolic-link FILENAME LINKNAME &optional OK-IF-ALREADY-EXISTS)Fdefine-logical-name
  16207. +Define the job-wide logical name NAME to have the value STRING.
  16208. +If STRING is nil or a null string, the logical name NAME is deleted.
  16209. +
  16210. +(define-logical-name VARNAME STRING)Fsysnetunam
  16211. +Open a network connection to PATH using LOGIN as the login string.
  16212. +
  16213. +(sysnetunam PATH LOGIN)Ffile-name-absolute-p
  16214. +Return t if file FILENAME specifies an absolute path name.
  16215. +On Unix, this is a name starting with a `/' or a `~'.
  16216. +
  16217. +(file-name-absolute-p FILENAME)Ffile-exists-p
  16218. +Return t if file FILENAME exists.  (This does not mean you can read it.)
  16219. +See also `file-readable-p' and `file-attributes'.
  16220. +
  16221. +(file-exists-p FILENAME)Ffile-executable-p
  16222. +Return t if FILENAME can be executed by you.
  16223. +For a directory, this means you can access files in that directory.
  16224. +
  16225. +(file-executable-p FILENAME)Ffile-readable-p
  16226. +Return t if file FILENAME exists and you can read it.
  16227. +See also `file-exists-p' and `file-attributes'.
  16228. +
  16229. +(file-readable-p FILENAME)Ffile-symlink-p
  16230. +Return non-nil if file FILENAME is the name of a symbolic link.
  16231. +The value is the name of the file to which it is linked.
  16232. +Otherwise returns nil.
  16233. +
  16234. +(file-symlink-p FILENAME)Ffile-writable-p
  16235. +Return t if file FILENAME can be written or created by you.
  16236. +
  16237. +(file-writable-p FILENAME)Ffile-directory-p
  16238. +Return t if file FILENAME is the name of a directory as a file.
  16239. +A directory name spec may be given instead; then the value is t
  16240. +if the directory so specified exists and really is a directory.
  16241. +
  16242. +(file-directory-p FILENAME)Ffile-accessible-directory-p
  16243. +Return t if file FILENAME is the name of a directory as a file,
  16244. +and files in that directory can be opened by you.  In order to use a
  16245. +directory as a buffer's current directory, this predicate must return true.
  16246. +A directory name spec may be given instead; then the value is t
  16247. +if the directory so specified exists and really is a readable and
  16248. +searchable directory.
  16249. +
  16250. +(file-accessible-directory-p FILENAME)Ffile-modes
  16251. +Return mode bits of FILE, as an integer.
  16252. +
  16253. +(file-modes FILENAME)Fset-file-modes
  16254. +Set mode bits of FILE to MODE (an integer).
  16255. +Only the 12 low bits of MODE are used.
  16256. +
  16257. +(set-file-modes FILENAME MODE)Fset-default-file-modes
  16258. +Set the file permission bits for newly created files.
  16259. +The argument MODE should be an integer; only the low 9 bits are used.
  16260. +This setting is inherited by subprocesses.
  16261. +
  16262. +(set-default-file-modes MODE)Fdefault-file-modes
  16263. +Return the default file protection for created files.
  16264. +The value is an integer.
  16265. +
  16266. +(default-file-modes)Funix-sync
  16267. +Tell Unix to finish all pending disk updates.
  16268. +
  16269. +(unix-sync)Ffile-newer-than-file-p
  16270. +Return t if file FILE1 is newer than file FILE2.
  16271. +If FILE1 does not exist, the answer is nil;
  16272. +otherwise, if FILE2 does not exist, the answer is t.
  16273. +
  16274. +(file-newer-than-file-p FILE1 FILE2)Finsert-file-contents
  16275. +Insert contents of file FILENAME after point.
  16276. +Returns list of absolute file name and length of data inserted.
  16277. +If second argument VISIT is non-nil, the buffer's visited filename
  16278. +and last save file modtime are set, and it is marked unmodified.
  16279. +If visiting and the file does not exist, visiting is completed
  16280. +before the error is signaled.
  16281. +
  16282. +The optional third and fourth arguments BEG and END
  16283. +specify what portion of the file to insert.
  16284. +If VISIT is non-nil, BEG and END must be nil.
  16285. +If optional fifth argument REPLACE is non-nil,
  16286. +it means replace the current buffer contents (in the accessible portion)
  16287. +with the file contents.  This is better than simply deleting and inserting
  16288. +the whole thing because (1) it preserves some marker positions
  16289. +and (2) it puts less data in the undo list.
  16290. +
  16291. +(insert-file-contents FILENAME &optional VISIT BEG END REPLACE)Fwrite-region
  16292. +Write current region into specified file.
  16293. +When called from a program, takes three arguments:
  16294. +START, END and FILENAME.  START and END are buffer positions.
  16295. +Optional fourth argument APPEND if non-nil means
  16296. +  append to existing file contents (if any).
  16297. +Optional fifth argument VISIT if t means
  16298. +  set the last-save-file-modtime of buffer to this file's modtime
  16299. +  and mark buffer not modified.
  16300. +If VISIT is a string, it is a second file name;
  16301. +  the output goes to FILENAME, but the buffer is marked as visiting VISIT.
  16302. +  VISIT is also the file name to lock and unlock for clash detection.
  16303. +If VISIT is neither t nor nil nor a string,
  16304. +  that means do not print the "Wrote file" message.
  16305. +Kludgy feature: if START is a string, then that string is written
  16306. +to the file, instead of any buffer contents, and END is ignored.
  16307. +
  16308. +(write-region START END FILENAME &optional APPEND VISIT)Fcar-less-than-car
  16309. +Return t if (car A) is numerically less than (car B).
  16310. +
  16311. +(car-less-than-car A B)Fverify-visited-file-modtime
  16312. +Return t if last mod time of BUF's visited file matches what BUF records.
  16313. +This means that the file has not been changed since it was visited or saved.
  16314. +
  16315. +(verify-visited-file-modtime BUF)Fclear-visited-file-modtime
  16316. +Clear out records of last mod time of visited file.
  16317. +Next attempt to save will certainly not complain of a discrepancy.
  16318. +
  16319. +(clear-visited-file-modtime)Fvisited-file-modtime
  16320. +Return the current buffer's recorded visited file modification time.
  16321. +The value is a list of the form (HIGH . LOW), like the time values
  16322. +that `file-attributes' returns.
  16323. +
  16324. +(visited-file-modtime)Fset-visited-file-modtime
  16325. +Update buffer's recorded modification time from the visited file's time.
  16326. +Useful if the buffer was not read from the file normally
  16327. +or if the file itself has been changed for some known benign reason.
  16328. +An argument specifies the modification time value to use
  16329. +(instead of that of the visited file), in the form of a list
  16330. +(HIGH . LOW) or (HIGH LOW).
  16331. +
  16332. +(set-visited-file-modtime &optional TIME-LIST)Fdo-auto-save
  16333. +Auto-save all buffers that need it.
  16334. +This is all buffers that have auto-saving enabled
  16335. +and are changed since last auto-saved.
  16336. +Auto-saving writes the buffer into a file
  16337. +so that your editing is not lost if the system crashes.
  16338. +This file is not the file you visited; that changes only when you save.
  16339. +Normally we run the normal hook `auto-save-hook' before saving.
  16340. +
  16341. +Non-nil first argument means do not print any message if successful.
  16342. +Non-nil second argument means save only current buffer.
  16343. +
  16344. +(do-auto-save &optional NO-MESSAGE CURRENT-ONLY)Fset-buffer-auto-saved
  16345. +Mark current buffer as auto-saved with its current text.
  16346. +No auto-save file will be written until the buffer changes again.
  16347. +
  16348. +(set-buffer-auto-saved)Fclear-buffer-auto-save-failure
  16349. +Clear any record of a recent auto-save failure in the current buffer.
  16350. +
  16351. +(clear-buffer-auto-save-failure)Frecent-auto-save-p
  16352. +Return t if buffer has been auto-saved since last read in or saved.
  16353. +
  16354. +(recent-auto-save-p)Fread-file-name-internal
  16355. +Internal subroutine for read-file-name.  Do not call this.
  16356. +
  16357. +(read-file-name-internal STRING DIR ACTION)Fread-file-name
  16358. +Read file name, prompting with PROMPT and completing in directory DIR.
  16359. +Value is not expanded---you must call `expand-file-name' yourself.
  16360. +Default name to DEFAULT if user enters a null string.
  16361. + (If DEFAULT is omitted, the visited file name is used.)
  16362. +Fourth arg MUSTMATCH non-nil means require existing file's name.
  16363. + Non-nil and non-t means also require confirmation after completion.
  16364. +Fifth arg INITIAL specifies text to start with.
  16365. +DIR defaults to current buffer's directory default.
  16366. +
  16367. +(read-file-name PROMPT &optional DIR DEFAULT MUSTMATCH INITIAL)Vinsert-default-directory
  16368. +*Non-nil means when reading a filename start with default dir in minibuffer.Vvms-stmlf-recfm
  16369. +*Non-nil means write new files with record format `stmlf'.
  16370. +nil means use format `var'.  This variable is meaningful only on VMS.Vfile-name-handler-alist
  16371. +*Alist of elements (REGEXP . HANDLER) for file names handled specially.
  16372. +If a file name matches REGEXP, then all I/O on that file is done by calling
  16373. +HANDLER.
  16374. +
  16375. +The first argument given to HANDLER is the name of the I/O primitive
  16376. +to be handled; the remaining arguments are the arguments that were
  16377. +passed to that primitive.  For example, if you do
  16378. +    (file-exists-p FILENAME)
  16379. +and FILENAME is handled by HANDLER, then HANDLER is called like this:
  16380. +    (funcall HANDLER 'file-exists-p FILENAME)
  16381. +The function `find-file-name-handler' checks this list for a handler
  16382. +for its argument.Vafter-insert-file-functions
  16383. +A list of functions to be called at the end of `insert-file-contents'.
  16384. +Each is passed one argument, the number of bytes inserted.  It should return
  16385. +the new byte count, and leave point the same.  If `insert-file-contents' is
  16386. +intercepted by a handler from `file-name-handler-alist', that handler is
  16387. +responsible for calling the after-insert-file-functions if appropriate.Vwrite-region-annotate-functions
  16388. +A list of functions to be called at the start of `write-region'.
  16389. +Each is passed two arguments, START and END as for `write-region'.  It should
  16390. +return a list of pairs (POSITION . STRING) of strings to be effectively
  16391. +inserted at the specified positions of the file being written (1 means to
  16392. +insert before the first byte written).  The POSITIONs must be sorted into
  16393. +increasing order.  If there are several functions in the list, the several
  16394. +lists are merged destructively.Vwrite-region-annotations-so-far
  16395. +When an annotation function is called, this holds the previous annotations.
  16396. +These are the annotations made by other annotation functions
  16397. +that were already called.  See also `write-region-annotate-functions'.Vinhibit-file-name-handlers
  16398. +A list of file name handlers that temporarily should not be used.
  16399. +This applies only to the operation `inhibit-file-name-operation'.Vinhibit-file-name-operation
  16400. +The operation for which `inhibit-file-name-handlers' is applicable.Vauto-save-list-file-name
  16401. +File name in which we write a list of all auto save file names.Fdirectory-files
  16402. +Return a list of names of files in DIRECTORY.
  16403. +There are three optional arguments:
  16404. +If FULL is non-nil, absolute pathnames of the files are returned.
  16405. +If MATCH is non-nil, only pathnames containing that regexp are returned.
  16406. +If NOSORT is non-nil, the list is not sorted--its order is unpredictable.
  16407. + NOSORT is useful if you plan to sort the result yourself.
  16408. +
  16409. +(directory-files DIRNAME &optional FULL MATCH NOSORT)Ffile-name-completion
  16410. +Complete file name FILE in directory DIR.
  16411. +Returns the longest string
  16412. +common to all filenames in DIR that start with FILE.
  16413. +If there is only one and FILE matches it exactly, returns t.
  16414. +Returns nil if DIR contains no name starting with FILE.
  16415. +
  16416. +(file-name-completion FILE DIRNAME)Ffile-name-all-completions
  16417. +Return a list of all completions of file name FILE in directory DIR.
  16418. +These are all file names in directory DIR which begin with FILE.
  16419. +
  16420. +(file-name-all-completions FILE DIRNAME)Ffile-name-all-versions
  16421. +Return a list of all versions of file name FILE in directory DIR.
  16422. +
  16423. +(file-name-all-versions FILE DIRNAME)Ffile-version-limit
  16424. +Return the maximum number of versions allowed for FILE.
  16425. +Returns nil if the file cannot be opened or if there is no version limit.
  16426. +
  16427. +(file-version-limit FILENAME)Ffile-attributes
  16428. +Return a list of attributes of file FILENAME.
  16429. +Value is nil if specified file cannot be opened.
  16430. +Otherwise, list elements are:
  16431. + 0. t for directory, string (name linked to) for symbolic link, or nil.
  16432. + 1. Number of links to file.
  16433. + 2. File uid.
  16434. + 3. File gid.
  16435. + 4. Last access time, as a list of two integers.
  16436. +  First integer has high-order 16 bits of time, second has low 16 bits.
  16437. + 5. Last modification time, likewise.
  16438. + 6. Last status change time, likewise.
  16439. + 7. Size in bytes (-1, if number is out of range).
  16440. + 8. File modes, as a string of ten letters or dashes as in ls -l.
  16441. + 9. t iff file's gid would change if file were deleted and recreated.
  16442. +10. inode number.
  16443. +11. Device number.
  16444. +
  16445. +If file does not exist, returns nil.
  16446. +
  16447. +(file-attributes FILENAME)Vcompletion-ignored-extensions
  16448. +*Completion ignores filenames ending in any string in this list.
  16449. +This variable does not affect lists of possible completions,
  16450. +but does affect the commands that actually do completions.Fforward-char
  16451. +Move point right ARG characters (left if ARG negative).
  16452. +On reaching end of buffer, stop and signal error.
  16453. +
  16454. +(forward-char &optional N)Fbackward-char
  16455. +Move point left ARG characters (right if ARG negative).
  16456. +On attempt to pass beginning or end of buffer, stop and signal error.
  16457. +
  16458. +(backward-char &optional N)Fforward-line
  16459. +Move ARG lines forward (backward if ARG is negative).
  16460. +Precisely, if point is on line I, move to the start of line I + ARG.
  16461. +If there isn't room, go as far as possible (no error).
  16462. +Returns the count of lines left to move.  If moving forward,
  16463. +that is ARG - number of lines moved; if backward, ARG + number moved.
  16464. +With positive ARG, a non-empty line at the end counts as one line
  16465. +  successfully moved (for the return value).
  16466. +
  16467. +(forward-line &optional N)Fbeginning-of-line
  16468. +Move point to beginning of current line.
  16469. +With argument ARG not nil or 1, move forward ARG - 1 lines first.
  16470. +If scan reaches end of buffer, stop there without error.
  16471. +
  16472. +(beginning-of-line &optional N)Fend-of-line
  16473. +Move point to end of current line.
  16474. +With argument ARG not nil or 1, move forward ARG - 1 lines first.
  16475. +If scan reaches end of buffer, stop there without error.
  16476. +
  16477. +(end-of-line &optional N)Fdelete-char
  16478. +Delete the following ARG characters (previous, with negative arg).
  16479. +Optional second arg KILLFLAG non-nil means kill instead (save in kill ring).
  16480. +Interactively, ARG is the prefix arg, and KILLFLAG is set if
  16481. +ARG was explicitly specified.
  16482. +
  16483. +(delete-char N &optional KILLFLAG)Fdelete-backward-char
  16484. +Delete the previous ARG characters (following, with negative ARG).
  16485. +Optional second arg KILLFLAG non-nil means kill instead (save in kill ring).
  16486. +Interactively, ARG is the prefix arg, and KILLFLAG is set if
  16487. +ARG was explicitly specified.
  16488. +
  16489. +(delete-backward-char N &optional KILLFLAG)Fself-insert-command
  16490. +Insert the character you type.
  16491. +Whichever character you type to run this command is inserted.
  16492. +
  16493. +(self-insert-command ARG)Fnewline
  16494. +Insert a newline.  With arg, insert that many newlines.
  16495. +In Auto Fill mode, if no numeric arg, break the preceding line if it's long.
  16496. +
  16497. +(newline &optional ARG1)Vblink-paren-function
  16498. +Function called, if non-nil, whenever a close parenthesis is inserted.
  16499. +More precisely, a char with closeparen syntax is self-inserted.Fcase-table-p
  16500. +Return t iff ARG is a case table.
  16501. +See `set-case-table' for more information on these data structures.
  16502. +
  16503. +(case-table-p TABLE)Fcurrent-case-table
  16504. +Return the case table of the current buffer.
  16505. +
  16506. +(current-case-table)Fstandard-case-table
  16507. +Return the standard case table.
  16508. +This is the one used for new buffers.
  16509. +
  16510. +(standard-case-table)Fset-case-table
  16511. +Select a new case table for the current buffer.
  16512. +A case table is a list (DOWNCASE UPCASE CANONICALIZE EQUIVALENCES)
  16513. + where each element is either nil or a string of length 256.
  16514. +DOWNCASE maps each character to its lower-case equivalent.
  16515. +UPCASE maps each character to its upper-case equivalent;
  16516. + if lower and upper case characters are in 1-1 correspondence,
  16517. + you may use nil and the upcase table will be deduced from DOWNCASE.
  16518. +CANONICALIZE maps each character to a canonical equivalent;
  16519. + any two characters that are related by case-conversion have the same
  16520. + canonical equivalent character; it may be nil, in which case it is
  16521. + deduced from DOWNCASE and UPCASE.
  16522. +EQUIVALENCES is a map that cyclicly permutes each equivalence class
  16523. + (of characters with the same canonical equivalent); it may be nil,
  16524. + in which case it is deduced from CANONICALIZE.
  16525. +
  16526. +(set-case-table TABLE)Fset-standard-case-table
  16527. +Select a new standard case table for new buffers.
  16528. +See `set-case-table' for more info on case tables.
  16529. +
  16530. +(set-standard-case-table TABLE)Vascii-downcase-table
  16531. +String mapping ASCII characters to lowercase equivalents.Vascii-upcase-table
  16532. +String mapping ASCII characters to uppercase equivalents.Fupcase
  16533. +Convert argument to upper case and return that.
  16534. +The argument may be a character or string.  The result has the same type.
  16535. +The argument object is not altered.  See also `capitalize'.
  16536. +
  16537. +(upcase OBJ)Fdowncase
  16538. +Convert argument to lower case and return that.
  16539. +The argument may be a character or string.  The result has the same type.
  16540. +The argument object is not altered.
  16541. +
  16542. +(downcase OBJ)Fcapitalize
  16543. +Convert argument to capitalized form and return that.
  16544. +This means that each word's first character is upper case
  16545. +and the rest is lower case.
  16546. +The argument may be a character or string.  The result has the same type.
  16547. +The argument object is not altered.
  16548. +
  16549. +(capitalize OBJ)Fupcase-region
  16550. +Convert the region to upper case.  In programs, wants two arguments.
  16551. +These arguments specify the starting and ending character numbers of
  16552. +the region to operate on.  When used as a command, the text between
  16553. +point and the mark is operated on.
  16554. +See also `capitalize-region'.
  16555. +
  16556. +(upcase-region B E)Fdowncase-region
  16557. +Convert the region to lower case.  In programs, wants two arguments.
  16558. +These arguments specify the starting and ending character numbers of
  16559. +the region to operate on.  When used as a command, the text between
  16560. +point and the mark is operated on.
  16561. +
  16562. +(downcase-region B E)Fcapitalize-region
  16563. +Convert the region to capitalized form.
  16564. +Capitalized form means each word's first character is upper case
  16565. +and the rest of it is lower case.
  16566. +In programs, give two arguments, the starting and ending
  16567. +character positions to operate on.
  16568. +
  16569. +(capitalize-region B E)Fupcase-word
  16570. +Convert following word (or ARG words) to upper case, moving over.
  16571. +With negative argument, convert previous words but do not move.
  16572. +See also `capitalize-word'.
  16573. +
  16574. +(upcase-word ARG)Fdowncase-word
  16575. +Convert following word (or ARG words) to lower case, moving over.
  16576. +With negative argument, convert previous words but do not move.
  16577. +
  16578. +(downcase-word ARG)Fcapitalize-word
  16579. +Capitalize the following word (or ARG words), moving over.
  16580. +This gives the word(s) a first character in upper case
  16581. +and the rest lower case.
  16582. +With negative argument, capitalize previous words but do not move.
  16583. +
  16584. +(capitalize-word ARG)Fcurrent-column
  16585. +Return the horizontal position of point.  Beginning of line is column 0.
  16586. +This is calculated by adding together the widths of all the displayed
  16587. +representations of the character between the start of the previous line
  16588. +and point.  (eg control characters will have a width of 2 or 4, tabs
  16589. +will have a variable width)
  16590. +Ignores finite width of frame, which means that this function may return
  16591. +values greater than (frame-width).
  16592. +Whether the line is visible (if `selective-display' is t) has no effect;
  16593. +however, ^M is treated as end of line when `selective-display' is t.
  16594. +
  16595. +(current-column)Findent-to
  16596. +Indent from point with tabs and spaces until COLUMN is reached.
  16597. +Optional second argument MIN says always do at least MIN spaces
  16598. +even if that goes past COLUMN; by default, MIN is zero.
  16599. +
  16600. +(indent-to COL &optional MINIMUM)Fcurrent-indentation
  16601. +Return the indentation of the current line.
  16602. +This is the horizontal position of the character
  16603. +following any initial whitespace.
  16604. +
  16605. +(current-indentation)Fmove-to-column
  16606. +Move point to column COLUMN in the current line.
  16607. +The column of a character is calculated by adding together the widths
  16608. +as displayed of the previous characters in the line.
  16609. +This function ignores line-continuation;
  16610. +there is no upper limit on the column number a character can have
  16611. +and horizontal scrolling has no effect.
  16612. +
  16613. +If specified column is within a character, point goes after that character.
  16614. +If it's past end of line, point goes to end of line.
  16615. +
  16616. +A non-nil second (optional) argument FORCE means, if the line
  16617. +is too short to reach column COLUMN then add spaces/tabs to get there,
  16618. +and if COLUMN is in the middle of a tab character, change it to spaces.
  16619. +
  16620. +(move-to-column COLUMN &optional FORCE)Fcompute-motion
  16621. +Scan through the current buffer, calculating screen position.
  16622. +Scan the current buffer forward from offset FROM,
  16623. +assuming it is at position FROMPOS--a cons of the form (HPOS . VPOS)--
  16624. +to position TO or position TOPOS--another cons of the form (HPOS . VPOS)--
  16625. +and return the ending buffer position and screen location.
  16626. +
  16627. +There are three additional arguments:
  16628. +
  16629. +WIDTH is the number of columns available to display text;
  16630. +this affects handling of continuation lines.
  16631. +This is usually the value returned by `window-width', less one (to allow
  16632. +for the continuation glyph).
  16633. +
  16634. +OFFSETS is either nil or a cons cell (HSCROLL . TAB-OFFSET).
  16635. +HSCROLL is the number of columns not being displayed at the left
  16636. +margin; this is usually taken from a window's hscroll member.
  16637. +TAB-OFFSET is the number of columns of the first tab that aren't
  16638. +being displayed, perhaps because the line was continued within it.
  16639. +If OFFSETS is nil, HSCROLL and TAB-OFFSET are assumed to be zero.
  16640. +
  16641. +WINDOW is the window to operate on.  Currently this is used only to
  16642. +find the display table.  It does not matter what buffer WINDOW displays;
  16643. +`compute-motion' always operates on the current buffer.
  16644. +
  16645. +The value is a list of five elements:
  16646. +  (POS HPOS VPOS PREVHPOS CONTIN)
  16647. +POS is the buffer position where the scan stopped.
  16648. +VPOS is the vertical position where the scan stopped.
  16649. +HPOS is the horizontal position where the scan stopped.
  16650. +
  16651. +PREVHPOS is the horizontal position one character back from POS.
  16652. +CONTIN is t if a line was continued after (or within) the previous character.
  16653. +
  16654. +For example, to find the buffer position of column COL of line LINE
  16655. +of a certain window, pass the window's starting location as FROM
  16656. +and the window's upper-left coordinates as FROMPOS.
  16657. +Pass the buffer's (point-max) as TO, to limit the scan to the end of the
  16658. +visible section of the buffer, and pass LINE and COL as TOPOS.
  16659. +
  16660. +(compute-motion FROM FROMPOS TO TOPOS WIDTH OFFSETS WINDOW)Fvertical-motion
  16661. +Move to start of screen line LINES lines down.
  16662. +If LINES is negative, this is moving up.
  16663. +
  16664. +The optional second argument WINDOW specifies the window to use for
  16665. +parameters such as width, horizontal scrolling, and so on.
  16666. +the default is the selected window.
  16667. +It does not matter what buffer is displayed in WINDOW.
  16668. +`vertical-motion' always uses the current buffer.
  16669. +
  16670. +Sets point to position found; this may be start of line
  16671. +or just the start of a continuation line.
  16672. +Returns number of lines moved; may be closer to zero than LINES
  16673. +if beginning or end of buffer was reached.
  16674. +
  16675. +(vertical-motion LINES &optional WINDOW)Vindent-tabs-mode
  16676. +*Indentation can insert tabs if this is non-nil.
  16677. +Setting this variable automatically makes it local to the current buffer.Flooking-at
  16678. +Return t if text after point matches regular expression PAT.
  16679. +This function modifies the match data that `match-beginning',
  16680. +`match-end' and `match-data' access; save and restore the match
  16681. +data if you want to preserve them.
  16682. +
  16683. +(looking-at STRING)Fstring-match
  16684. +Return index of start of first match for REGEXP in STRING, or nil.
  16685. +If third arg START is non-nil, start search at that index in STRING.
  16686. +For index of first char beyond the match, do (match-end 0).
  16687. +`match-end' and `match-beginning' also give indices of substrings
  16688. +matched by parenthesis constructs in the pattern.
  16689. +
  16690. +(string-match REGEXP STRING &optional START)Fskip-chars-forward
  16691. +Move point forward, stopping before a char not in STRING, or at pos LIM.
  16692. +STRING is like the inside of a `[...]' in a regular expression
  16693. +except that `]' is never special and `\' quotes `^', `-' or `\'.
  16694. +Thus, with arg "a-zA-Z", this skips letters stopping before first nonletter.
  16695. +With arg "^a-zA-Z", skips nonletters stopping before first letter.
  16696. +Returns the distance traveled, either zero or positive.
  16697. +
  16698. +(skip-chars-forward STRING &optional LIM)Fskip-chars-backward
  16699. +Move point backward, stopping after a char not in STRING, or at pos LIM.
  16700. +See `skip-chars-forward' for details.
  16701. +Returns the distance traveled, either zero or negative.
  16702. +
  16703. +(skip-chars-backward STRING &optional LIM)Fskip-syntax-forward
  16704. +Move point forward across chars in specified syntax classes.
  16705. +SYNTAX is a string of syntax code characters.
  16706. +Stop before a char whose syntax is not in SYNTAX, or at position LIM.
  16707. +If SYNTAX starts with ^, skip characters whose syntax is NOT in SYNTAX.
  16708. +This function returns the distance traveled, either zero or positive.
  16709. +
  16710. +(skip-syntax-forward SYNTAX &optional LIM)Fskip-syntax-backward
  16711. +Move point backward across chars in specified syntax classes.
  16712. +SYNTAX is a string of syntax code characters.
  16713. +Stop on reaching a char whose syntax is not in SYNTAX, or at position LIM.
  16714. +If SYNTAX starts with ^, skip characters whose syntax is NOT in SYNTAX.
  16715. +This function returns the distance traveled, either zero or negative.
  16716. +
  16717. +(skip-syntax-backward SYNTAX &optional LIM)Fsearch-backward
  16718. +Search backward from point for STRING.
  16719. +Set point to the beginning of the occurrence found, and return point.
  16720. +An optional second argument bounds the search; it is a buffer position.
  16721. +The match found must not extend before that position.
  16722. +Optional third argument, if t, means if fail just return nil (no error).
  16723. + If not nil and not t, position at limit of search and return nil.
  16724. +Optional fourth argument is repeat count--search for successive occurrences.
  16725. +See also the functions `match-beginning', `match-end' and `replace-match'.
  16726. +
  16727. +(search-backward STRING &optional BOUND NOERROR COUNT)Fsearch-forward
  16728. +Search forward from point for STRING.
  16729. +Set point to the end of the occurrence found, and return point.
  16730. +An optional second argument bounds the search; it is a buffer position.
  16731. +The match found must not extend after that position.  nil is equivalent
  16732. +  to (point-max).
  16733. +Optional third argument, if t, means if fail just return nil (no error).
  16734. +  If not nil and not t, move to limit of search and return nil.
  16735. +Optional fourth argument is repeat count--search for successive occurrences.
  16736. +See also the functions `match-beginning', `match-end' and `replace-match'.
  16737. +
  16738. +(search-forward STRING &optional BOUND NOERROR COUNT)Fword-search-backward
  16739. +Search backward from point for STRING, ignoring differences in punctuation.
  16740. +Set point to the beginning of the occurrence found, and return point.
  16741. +An optional second argument bounds the search; it is a buffer position.
  16742. +The match found must not extend before that position.
  16743. +Optional third argument, if t, means if fail just return nil (no error).
  16744. +  If not nil and not t, move to limit of search and return nil.
  16745. +Optional fourth argument is repeat count--search for successive occurrences.
  16746. +
  16747. +(word-search-backward STRING &optional BOUND NOERROR COUNT)Fword-search-forward
  16748. +Search forward from point for STRING, ignoring differences in punctuation.
  16749. +Set point to the end of the occurrence found, and return point.
  16750. +An optional second argument bounds the search; it is a buffer position.
  16751. +The match found must not extend after that position.
  16752. +Optional third argument, if t, means if fail just return nil (no error).
  16753. +  If not nil and not t, move to limit of search and return nil.
  16754. +Optional fourth argument is repeat count--search for successive occurrences.
  16755. +
  16756. +(word-search-forward STRING &optional BOUND NOERROR COUNT)Fre-search-backward
  16757. +Search backward from point for match for regular expression REGEXP.
  16758. +Set point to the beginning of the match, and return point.
  16759. +The match found is the one starting last in the buffer
  16760. +and yet ending before the origin of the search.
  16761. +An optional second argument bounds the search; it is a buffer position.
  16762. +The match found must start at or after that position.
  16763. +Optional third argument, if t, means if fail just return nil (no error).
  16764. +  If not nil and not t, move to limit of search and return nil.
  16765. +Optional fourth argument is repeat count--search for successive occurrences.
  16766. +See also the functions `match-beginning', `match-end' and `replace-match'.
  16767. +
  16768. +(re-search-backward REGEXP &optional BOUND NOERROR COUNT)Fre-search-forward
  16769. +Search forward from point for regular expression REGEXP.
  16770. +Set point to the end of the occurrence found, and return point.
  16771. +An optional second argument bounds the search; it is a buffer position.
  16772. +The match found must not extend after that position.
  16773. +Optional third argument, if t, means if fail just return nil (no error).
  16774. +  If not nil and not t, move to limit of search and return nil.
  16775. +Optional fourth argument is repeat count--search for successive occurrences.
  16776. +See also the functions `match-beginning', `match-end' and `replace-match'.
  16777. +
  16778. +(re-search-forward REGEXP &optional BOUND NOERROR COUNT)Freplace-match
  16779. +Replace text matched by last search with NEWTEXT.
  16780. +If second arg FIXEDCASE is non-nil, do not alter case of replacement text.
  16781. +Otherwise maybe capitalize the whole text, or maybe just word initials,
  16782. +based on the replaced text.
  16783. +If the replaced text has only capital letters
  16784. +and has at least one multiletter word, convert NEWTEXT to all caps.
  16785. +If the replaced text has at least one word starting with a capital letter,
  16786. +then capitalize each word in NEWTEXT.
  16787. +
  16788. +If third arg LITERAL is non-nil, insert NEWTEXT literally.
  16789. +Otherwise treat `\' as special:
  16790. +  `\&' in NEWTEXT means substitute original matched text.
  16791. +  `\N' means substitute what matched the Nth `\(...\)'.
  16792. +       If Nth parens didn't match, substitute nothing.
  16793. +  `\\' means insert one `\'.
  16794. +FIXEDCASE and LITERAL are optional arguments.
  16795. +Leaves point at end of replacement text.
  16796. +
  16797. +(replace-match NEWTEXT &optional FIXEDCASE LITERAL)Fmatch-beginning
  16798. +Return position of start of text matched by last search.
  16799. +NUM specifies which parenthesized expression in the last regexp.
  16800. + Value is nil if NUMth pair didn't match, or there were less than NUM pairs.
  16801. +Zero means the entire text matched by the whole regexp or whole string.
  16802. +
  16803. +(match-beginning NUM)Fmatch-end
  16804. +Return position of end of text matched by last search.
  16805. +ARG, a number, specifies which parenthesized expression in the last regexp.
  16806. + Value is nil if ARGth pair didn't match, or there were less than ARG pairs.
  16807. +Zero means the entire text matched by the whole regexp or whole string.
  16808. +
  16809. +(match-end NUM)Fmatch-data
  16810. +Return a list containing all info on what the last search matched.
  16811. +Element 2N is `(match-beginning N)'; element 2N + 1 is `(match-end N)'.
  16812. +All the elements are markers or nil (nil if the Nth pair didn't match)
  16813. +if the last match was on a buffer; integers or nil if a string was matched.
  16814. +Use `store-match-data' to reinstate the data in this list.
  16815. +
  16816. +(match-data)Fstore-match-data
  16817. +Set internal data on last search match from elements of LIST.
  16818. +LIST should have been created by calling `match-data' previously.
  16819. +
  16820. +(store-match-data LIST)Fregexp-quote
  16821. +Return a regexp string which matches exactly STRING and nothing else.
  16822. +
  16823. +(regexp-quote STR)Fundo-boundary
  16824. +Mark a boundary between units of undo.
  16825. +An undo command will stop at this point,
  16826. +but another undo command will undo to the previous boundary.
  16827. +
  16828. +(undo-boundary)Fprimitive-undo
  16829. +Undo N records from the front of the list LIST.
  16830. +Return what remains of the list.
  16831. +
  16832. +(primitive-undo N LIST)Fcons
  16833. +Create a new cons, give it CAR and CDR as components, and return it.
  16834. +
  16835. +(cons CAR CDR)Flist
  16836. +Return a newly created list with specified arguments as elements.
  16837. +Any number of arguments, even zero arguments, are allowed.Fmake-list
  16838. +Return a newly created list of length LENGTH, with each element being INIT.
  16839. +
  16840. +(make-list LENGTH INIT)Fmake-vector
  16841. +Return a newly created vector of length LENGTH, with each element being INIT.
  16842. +See also the function `vector'.
  16843. +
  16844. +(make-vector LENGTH INIT)Fvector
  16845. +Return a newly created vector with specified arguments as elements.
  16846. +Any number of arguments, even zero arguments, are allowed.Fmake-byte-code
  16847. +Create a byte-code object with specified arguments as elements.
  16848. +The arguments should be the arglist, bytecode-string, constant vector,
  16849. +stack size, (optional) doc string, and (optional) interactive spec.
  16850. +The first four arguments are required; at most six have any
  16851. +significance.Fmake-symbol
  16852. +Return a newly allocated uninterned symbol whose name is NAME.
  16853. +Its value and function definition are void, and its property list is nil.
  16854. +
  16855. +(make-symbol STR)Fmake-marker
  16856. +Return a newly allocated marker which does not point at any place.
  16857. +
  16858. +(make-marker)Fmake-string
  16859. +Return a newly created string of length LENGTH, with each element being INIT.
  16860. +Both LENGTH and INIT must be numbers.
  16861. +
  16862. +(make-string LENGTH INIT)Fpurecopy
  16863. +Make a copy of OBJECT in pure storage.
  16864. +Recursively copies contents of vectors and cons cells.
  16865. +Does not copy symbols.
  16866. +
  16867. +(purecopy OBJ)Fgarbage-collect
  16868. +Reclaim storage for Lisp objects no longer needed.
  16869. +Returns info on amount of space in use:
  16870. + ((USED-CONSES . FREE-CONSES) (USED-SYMS . FREE-SYMS)
  16871. +  (USED-MARKERS . FREE-MARKERS) USED-STRING-CHARS USED-VECTOR-SLOTS
  16872. +  (USED-FLOATS . FREE-FLOATS))
  16873. +Garbage collection happens automatically if you cons more than
  16874. +`gc-cons-threshold' bytes of Lisp data since previous garbage collection.
  16875. +
  16876. +(garbage-collect)Fmemory-limit
  16877. +Return the address of the last byte Emacs has allocated, divided by 1024.
  16878. +This may be helpful in debugging Emacs's memory usage.
  16879. +We divide the value by 1024 to make sure it fits in a Lisp integer.
  16880. +
  16881. +(memory-limit)Vgc-cons-threshold
  16882. +*Number of bytes of consing between garbage collections.
  16883. +Garbage collection can happen automatically once this many bytes have been
  16884. +allocated since the last garbage collection.  All data types count.
  16885. +
  16886. +Garbage collection happens automatically only when `eval' is called.
  16887. +
  16888. +By binding this temporarily to a large number, you can effectively
  16889. +prevent garbage collection during a part of the program.Vpure-bytes-used
  16890. +Number of bytes of sharable Lisp data allocated so far.Vdata-bytes-used
  16891. +Number of bytes of unshared memory allocated in this session.Vdata-bytes-free
  16892. +Number of bytes of unshared memory remaining available in this session.Vpurify-flag
  16893. +Non-nil means loading Lisp code in order to dump an executable.
  16894. +This means that certain objects should be allocated in shared (pure) space.Vundo-limit
  16895. +Keep no more undo information once it exceeds this size.
  16896. +This limit is applied when garbage collection happens.
  16897. +The size is counted as the number of bytes occupied,
  16898. +which includes both saved text and other data.Vundo-strong-limit
  16899. +Don't keep more than this much size of undo information.
  16900. +A command which pushes past this size is itself forgotten.
  16901. +This limit is applied when garbage collection happens.
  16902. +The size is counted as the number of bytes occupied,
  16903. +which includes both saved text and other data.Feq
  16904. +T if the two args are the same Lisp object.
  16905. +
  16906. +(eq OBJ1 OBJ2)Fnull
  16907. +T if OBJECT is nil.
  16908. +
  16909. +(null OBJ)Fconsp
  16910. +T if OBJECT is a cons cell.
  16911. +
  16912. +(consp OBJ)Fatom
  16913. +T if OBJECT is not a cons cell.  This includes nil.
  16914. +
  16915. +(atom OBJ)Flistp
  16916. +T if OBJECT is a list.  This includes nil.
  16917. +
  16918. +(listp OBJ)Fnlistp
  16919. +T if OBJECT is not a list.  Lists include nil.
  16920. +
  16921. +(nlistp OBJ)Fsymbolp
  16922. +T if OBJECT is a symbol.
  16923. +
  16924. +(symbolp OBJ)Fvectorp
  16925. +T if OBJECT is a vector.
  16926. +
  16927. +(vectorp OBJ)Fstringp
  16928. +T if OBJECT is a string.
  16929. +
  16930. +(stringp OBJ)Farrayp
  16931. +T if OBJECT is an array (string or vector).
  16932. +
  16933. +(arrayp OBJ)Fsequencep
  16934. +T if OBJECT is a sequence (list or array).
  16935. +
  16936. +(sequencep OBJ)Fbufferp
  16937. +T if OBJECT is an editor buffer.
  16938. +
  16939. +(bufferp OBJ)Fmarkerp
  16940. +T if OBJECT is a marker (editor pointer).
  16941. +
  16942. +(markerp OBJ)Fsubrp
  16943. +T if OBJECT is a built-in function.
  16944. +
  16945. +(subrp OBJ)Fbyte-code-function-p
  16946. +T if OBJECT is a byte-compiled function object.
  16947. +
  16948. +(byte-code-function-p OBJ)Fchar-or-string-p
  16949. +T if OBJECT is a character (an integer) or a string.
  16950. +
  16951. +(char-or-string-p OBJ)Fintegerp
  16952. +T if OBJECT is an integer.
  16953. +
  16954. +(integerp OBJ)Finteger-or-marker-p
  16955. +T if OBJECT is an integer or a marker (editor pointer).
  16956. +
  16957. +(integer-or-marker-p OBJ)Fnatnump
  16958. +T if OBJECT is a nonnegative integer.
  16959. +
  16960. +(natnump OBJ)Fnumberp
  16961. +T if OBJECT is a number (floating point or integer).
  16962. +
  16963. +(numberp OBJ)Fnumber-or-marker-p
  16964. +T if OBJECT is a number or a marker.
  16965. +
  16966. +(number-or-marker-p OBJ)Ffloatp
  16967. +T if OBJECT is a floating point number.
  16968. +
  16969. +(floatp OBJ)Fcar
  16970. +Return the car of CONSCELL.  If arg is nil, return nil.
  16971. +Error if arg is not nil and not a cons cell.  See also `car-safe'.
  16972. +
  16973. +(car LIST)Fcar-safe
  16974. +Return the car of OBJECT if it is a cons cell, or else nil.
  16975. +
  16976. +(car-safe OBJECT)Fcdr
  16977. +Return the cdr of CONSCELL.  If arg is nil, return nil.
  16978. +Error if arg is not nil and not a cons cell.  See also `cdr-safe'.
  16979. +
  16980. +(cdr LIST)Fcdr-safe
  16981. +Return the cdr of OBJECT if it is a cons cell, or else  nil.
  16982. +
  16983. +(cdr-safe OBJECT)Fsetcar
  16984. +Set the car of CONSCELL to be NEWCAR.  Returns NEWCAR.
  16985. +
  16986. +(setcar CELL NEWCAR)Fsetcdr
  16987. +Set the cdr of CONSCELL to be NEWCDR.  Returns NEWCDR.
  16988. +
  16989. +(setcdr CELL NEWCDR)Fboundp
  16990. +T if SYMBOL's value is not void.
  16991. +
  16992. +(boundp SYM)Ffboundp
  16993. +T if SYMBOL's function definition is not void.
  16994. +
  16995. +(fboundp SYM)Fmakunbound
  16996. +Make SYMBOL's value be void.
  16997. +
  16998. +(makunbound SYM)Ffmakunbound
  16999. +Make SYMBOL's function definition be void.
  17000. +
  17001. +(fmakunbound SYM)Fsymbol-function
  17002. +Return SYMBOL's function definition.  Error if that is void.
  17003. +
  17004. +(symbol-function SYMBOL)Fsymbol-plist
  17005. +Return SYMBOL's property list.
  17006. +
  17007. +(symbol-plist SYM)Fsymbol-name
  17008. +Return SYMBOL's name, a string.
  17009. +
  17010. +(symbol-name SYM)Ffset
  17011. +Set SYMBOL's function definition to NEWVAL, and return NEWVAL.
  17012. +
  17013. +(fset SYM NEWDEF)Fdefalias
  17014. +Set SYMBOL's function definition to NEWVAL, and return NEWVAL.
  17015. +Associates the function with the current load file, if any.
  17016. +
  17017. +(defalias SYM NEWDEF)Fdefine-function
  17018. +Set SYMBOL's function definition to NEWVAL, and return NEWVAL.
  17019. +Associates the function with the current load file, if any.
  17020. +
  17021. +(define-function SYM NEWDEF)Fsetplist
  17022. +Set SYMBOL's property list to NEWVAL, and return NEWVAL.
  17023. +
  17024. +(setplist SYM NEWPLIST)Fsymbol-value
  17025. +Return SYMBOL's value.  Error if that is void.
  17026. +
  17027. +(symbol-value SYM)Fset
  17028. +Set SYMBOL's value to NEWVAL, and return NEWVAL.
  17029. +
  17030. +(set SYM NEWVAL)Fdefault-boundp
  17031. +Return T if SYMBOL has a non-void default value.
  17032. +This is the value that is seen in buffers that do not have their own values
  17033. +for this variable.
  17034. +
  17035. +(default-boundp SYM)Fdefault-value
  17036. +Return SYMBOL's default value.
  17037. +This is the value that is seen in buffers that do not have their own values
  17038. +for this variable.  The default value is meaningful for variables with
  17039. +local bindings in certain buffers.
  17040. +
  17041. +(default-value SYM)Fset-default
  17042. +Set SYMBOL's default value to VAL.  SYMBOL and VAL are evaluated.
  17043. +The default value is seen in buffers that do not have their own values
  17044. +for this variable.
  17045. +
  17046. +(set-default SYM VALUE)Fsetq-default
  17047. +Set the default value of variable VAR to VALUE.
  17048. +VAR, the variable name, is literal (not evaluated);
  17049. +VALUE is an expression and it is evaluated.
  17050. +The default value of a variable is seen in buffers
  17051. +that do not have their own values for the variable.
  17052. +
  17053. +More generally, you can use multiple variables and values, as in
  17054. +  (setq-default SYM VALUE SYM VALUE...)
  17055. +This sets each SYM's default value to the corresponding VALUE.
  17056. +The VALUE for the Nth SYM can refer to the new default values
  17057. +of previous SYMs.Fmake-variable-buffer-local
  17058. +Make VARIABLE have a separate value for each buffer.
  17059. +At any time, the value for the current buffer is in effect.
  17060. +There is also a default value which is seen in any buffer which has not yet
  17061. +set its own value.
  17062. +Using `set' or `setq' to set the variable causes it to have a separate value
  17063. +for the current buffer if it was previously using the default value.
  17064. +The function `default-value' gets the default value and `set-default' sets it.
  17065. +
  17066. +(make-variable-buffer-local SYM)Fmake-local-variable
  17067. +Make VARIABLE have a separate value in the current buffer.
  17068. +Other buffers will continue to share a common default value.
  17069. +(The buffer-local value of VARIABLE starts out as the same value
  17070. +VARIABLE previously had.  If VARIABLE was void, it remains void.)
  17071. +See also `make-variable-buffer-local'.
  17072. +
  17073. +If the variable is already arranged to become local when set,
  17074. +this function causes a local value to exist for this buffer,
  17075. +just as if the variable were set.
  17076. +
  17077. +(make-local-variable SYM)Fkill-local-variable
  17078. +Make VARIABLE no longer have a separate value in the current buffer.
  17079. +From now on the default value will apply in this buffer.
  17080. +
  17081. +(kill-local-variable SYM)Findirect-function
  17082. +Return the function at the end of OBJECT's function chain.
  17083. +If OBJECT is a symbol, follow all function indirections and return the final
  17084. +function binding.
  17085. +If OBJECT is not a symbol, just return it.
  17086. +Signal a void-function error if the final symbol is unbound.
  17087. +Signal a cyclic-function-indirection error if there is a loop in the
  17088. +function chain of symbols.
  17089. +
  17090. +(indirect-function OBJECT)Faref
  17091. +Return the element of ARRAY at index INDEX.
  17092. +ARRAY may be a vector or a string, or a byte-code object.  INDEX starts at 0.
  17093. +
  17094. +(aref ARRAY IDX)Faset
  17095. +Store into the element of ARRAY at index IDX the value NEWELT.
  17096. +ARRAY may be a vector or a string.  IDX starts at 0.
  17097. +
  17098. +(aset ARRAY IDX NEWELT)F=
  17099. +T if two args, both numbers or markers, are equal.
  17100. +
  17101. +(= NUM1 NUM2)F<
  17102. +T if first arg is less than second arg.  Both must be numbers or markers.
  17103. +
  17104. +(< NUM1 NUM2)F>
  17105. +T if first arg is greater than second arg.  Both must be numbers or markers.
  17106. +
  17107. +(> NUM1 NUM2)F<=
  17108. +T if first arg is less than or equal to second arg.
  17109. +Both must be numbers or markers.
  17110. +
  17111. +(<= NUM1 NUM2)F>=
  17112. +T if first arg is greater than or equal to second arg.
  17113. +Both must be numbers or markers.
  17114. +
  17115. +(>= NUM1 NUM2)F/=
  17116. +T if first arg is not equal to second arg.  Both must be numbers or markers.
  17117. +
  17118. +(/= NUM1 NUM2)Fzerop
  17119. +T if NUMBER is zero.
  17120. +
  17121. +(zerop NUM)Fnumber-to-string
  17122. +Convert NUM to a string by printing it in decimal.
  17123. +Uses a minus sign if negative.
  17124. +NUM may be an integer or a floating point number.
  17125. +
  17126. +(number-to-string NUM)Fstring-to-number
  17127. +Convert STRING to a number by parsing it as a decimal number.
  17128. +This parses both integers and floating point numbers.
  17129. +It ignores leading spaces and tabs.
  17130. +
  17131. +(string-to-number STR)F+
  17132. +Return sum of any number of arguments, which are numbers or markers.F-
  17133. +Negate number or subtract numbers or markers.
  17134. +With one arg, negates it.  With more than one arg,
  17135. +subtracts all but the first from the first.F*
  17136. +Returns product of any number of arguments, which are numbers or markers.F/
  17137. +Returns first argument divided by all the remaining arguments.
  17138. +The arguments must be numbers or markers.F%
  17139. +Returns remainder of first arg divided by second.
  17140. +Both must be integers or markers.
  17141. +
  17142. +(% NUM1 NUM2)Fmod
  17143. +Returns X modulo Y.
  17144. +The result falls between zero (inclusive) and Y (exclusive).
  17145. +Both X and Y must be numbers or markers.
  17146. +
  17147. +(mod NUM1 NUM2)Fmax
  17148. +Return largest of all the arguments (which must be numbers or markers).
  17149. +The value is always a number; markers are converted to numbers.Fmin
  17150. +Return smallest of all the arguments (which must be numbers or markers).
  17151. +The value is always a number; markers are converted to numbers.Flogand
  17152. +Return bitwise-and of all the arguments.
  17153. +Arguments may be integers, or markers converted to integers.Flogior
  17154. +Return bitwise-or of all the arguments.
  17155. +Arguments may be integers, or markers converted to integers.Flogxor
  17156. +Return bitwise-exclusive-or of all the arguments.
  17157. +Arguments may be integers, or markers converted to integers.Fash
  17158. +Return VALUE with its bits shifted left by COUNT.
  17159. +If COUNT is negative, shifting is actually to the right.
  17160. +In this case, the sign bit is duplicated.
  17161. +
  17162. +(ash NUM1 NUM2)Flsh
  17163. +Return VALUE with its bits shifted left by COUNT.
  17164. +If COUNT is negative, shifting is actually to the right.
  17165. +In this case,  zeros are shifted in on the left.
  17166. +
  17167. +(lsh NUM1 NUM2)F1+
  17168. +Return NUMBER plus one.  NUMBER may be a number or a marker.
  17169. +Markers are converted to integers.
  17170. +
  17171. +(1+ NUM)F1-
  17172. +Return NUMBER minus one.  NUMBER may be a number or a marker.
  17173. +Markers are converted to integers.
  17174. +
  17175. +(1- NUM)Flognot
  17176. +Return the bitwise complement of ARG.  ARG must be an integer.
  17177. +
  17178. +(lognot NUM)Fdocumentation
  17179. +Return the documentation string of FUNCTION.
  17180. +Unless a non-nil second argument is given, the
  17181. +string is passed through `substitute-command-keys'.
  17182. +
  17183. +(documentation FUNCTION &optional RAW)Fdocumentation-property
  17184. +Return the documentation string that is SYMBOL's PROP property.
  17185. +This is like `get', but it can refer to strings stored in the
  17186. +`etc/DOC' file; and if the value is a string, it is passed through
  17187. +`substitute-command-keys'.  A non-nil third argument avoids this
  17188. +translation.
  17189. +
  17190. +(documentation-property SYM PROP &optional RAW)FSnarf-documentation
  17191. +Used during Emacs initialization, before dumping runnable Emacs,
  17192. +to find pointers to doc strings stored in `etc/DOC...' and
  17193. +record them in function definitions.
  17194. +One arg, FILENAME, a string which does not include a directory.
  17195. +The file is found in `../etc' now; found in the `data-directory'
  17196. +when doc strings are referred to later in the dumped Emacs.
  17197. +
  17198. +(Snarf-documentation FILENAME)Fsubstitute-command-keys
  17199. +Substitute key descriptions for command names in STRING.
  17200. +Return a new string which is STRING with substrings of the form \=\[COMMAND]
  17201. +replaced by either:  a keystroke sequence that will invoke COMMAND,
  17202. +or "M-x COMMAND" if COMMAND is not on any keys.
  17203. +Substrings of the form \=\{MAPVAR} are replaced by summaries
  17204. +(made by describe-bindings) of the value of MAPVAR, taken as a keymap.
  17205. +Substrings of the form \=\<MAPVAR> specify to use the value of MAPVAR
  17206. +as the keymap for future \=\[COMMAND] substrings.
  17207. +\=\= quotes the following character and is discarded;
  17208. +thus, \=\=\=\= puts \=\= into the output, and \=\=\=\[ puts \=\[ into the output.
  17209. +
  17210. +(substitute-command-keys STR)Vinternal-doc-file-name
  17211. +Name of file containing documentation strings of built-in symbols.Fchar-to-string
  17212. +Convert arg CHAR to a one-character string containing that character.
  17213. +
  17214. +(char-to-string N)Fstring-to-char
  17215. +Convert arg STRING to a character, the first character of that string.
  17216. +
  17217. +(string-to-char STR)Fpoint
  17218. +Return value of point, as an integer.
  17219. +Beginning of buffer is position (point-min)
  17220. +
  17221. +(point)Fpoint-marker
  17222. +Return value of point, as a marker object.
  17223. +
  17224. +(point-marker)Fgoto-char
  17225. +Set point to POSITION, a number or marker.
  17226. +Beginning of buffer is position (point-min), end is (point-max).
  17227. +
  17228. +(goto-char N)Fregion-beginning
  17229. +Return position of beginning of region, as an integer.
  17230. +
  17231. +(region-beginning)Fregion-end
  17232. +Return position of end of region, as an integer.
  17233. +
  17234. +(region-end)Fmark
  17235. +Return this buffer's mark value as integer, or nil if no mark.
  17236. +If you are using this in an editing command, you are most likely making
  17237. +a mistake; see the documentation of `set-mark'.
  17238. +
  17239. +(mark)Fmark-marker
  17240. +Return this buffer's mark, as a marker object.
  17241. +Watch out!  Moving this marker changes the mark position.
  17242. +If you set the marker not to point anywhere, the buffer will have no mark.
  17243. +
  17244. +(mark-marker)Fset-mark
  17245. +Set this buffer's mark to POS.  Don't use this function!
  17246. +That is to say, don't use this function unless you want
  17247. +the user to see that the mark has moved, and you want the previous
  17248. +mark position to be lost.
  17249. +
  17250. +Normally, when a new mark is set, the old one should go on the stack.
  17251. +This is why most applications should use push-mark, not set-mark.
  17252. +
  17253. +Novice programmers often try to use the mark for the wrong purposes.
  17254. +The mark saves a location for the user's convenience.
  17255. +Most editing commands should not alter the mark.
  17256. +To remember a location for internal use in the Lisp program,
  17257. +store it in a Lisp variable.  Example:
  17258. +
  17259. +   (let ((beg (point))) (forward-line 1) (delete-region beg (point))).
  17260. +
  17261. +(set-mark POS)Fsave-excursion
  17262. +Save point, mark, and current buffer; execute BODY; restore those things.
  17263. +Executes BODY just like `progn'.
  17264. +The values of point, mark and the current buffer are restored
  17265. +even in case of abnormal exit (throw or error).
  17266. +The state of activation of the mark is also restored.Fbuffer-size
  17267. +Return the number of characters in the current buffer.
  17268. +
  17269. +(buffer-size)Fpoint-min
  17270. +Return the minimum permissible value of point in the current buffer.
  17271. +This is 1, unless narrowing (a buffer restriction) is in effect.
  17272. +
  17273. +(point-min)Fpoint-min-marker
  17274. +Return a marker to the minimum permissible value of point in this buffer.
  17275. +This is the beginning, unless narrowing (a buffer restriction) is in effect.
  17276. +
  17277. +(point-min-marker)Fpoint-max
  17278. +Return the maximum permissible value of point in the current buffer.
  17279. +This is (1+ (buffer-size)), unless narrowing (a buffer restriction)
  17280. +is in effect, in which case it is less.
  17281. +
  17282. +(point-max)Fpoint-max-marker
  17283. +Return a marker to the maximum permissible value of point in this buffer.
  17284. +This is (1+ (buffer-size)), unless narrowing (a buffer restriction)
  17285. +is in effect, in which case it is less.
  17286. +
  17287. +(point-max-marker)Ffollowing-char
  17288. +Return the character following point, as a number.
  17289. +At the end of the buffer or accessible region, return 0.
  17290. +
  17291. +(following-char)Fpreceding-char
  17292. +Return the character preceding point, as a number.
  17293. +At the beginning of the buffer or accessible region, return 0.
  17294. +
  17295. +(preceding-char)Fbobp
  17296. +Return T if point is at the beginning of the buffer.
  17297. +If the buffer is narrowed, this means the beginning of the narrowed part.
  17298. +
  17299. +(bobp)Feobp
  17300. +Return T if point is at the end of the buffer.
  17301. +If the buffer is narrowed, this means the end of the narrowed part.
  17302. +
  17303. +(eobp)Fbolp
  17304. +Return T if point is at the beginning of a line.
  17305. +
  17306. +(bolp)Feolp
  17307. +Return T if point is at the end of a line.
  17308. +`End of a line' includes point being at the end of the buffer.
  17309. +
  17310. +(eolp)Fchar-after
  17311. +Return character in current buffer at position POS.
  17312. +POS is an integer or a buffer pointer.
  17313. +If POS is out of range, the value is nil.
  17314. +
  17315. +(char-after POS)Fuser-login-name
  17316. +Return the name under which the user logged in, as a string.
  17317. +This is based on the effective uid, not the real uid.
  17318. +Also, if the environment variable LOGNAME or USER is set,
  17319. +that determines the value of this function.
  17320. +
  17321. +(user-login-name)Fuser-real-login-name
  17322. +Return the name of the user's real uid, as a string.
  17323. +This ignores the environment variables LOGNAME and USER, so it differs from
  17324. +`user-login-name' when running under `su'.
  17325. +
  17326. +(user-real-login-name)Fuser-uid
  17327. +Return the effective uid of Emacs, as an integer.
  17328. +
  17329. +(user-uid)Fuser-real-uid
  17330. +Return the real uid of Emacs, as an integer.
  17331. +
  17332. +(user-real-uid)Fuser-full-name
  17333. +Return the full name of the user logged in, as a string.
  17334. +
  17335. +(user-full-name)Fsystem-name
  17336. +Return the name of the machine you are running on, as a string.
  17337. +
  17338. +(system-name)Femacs-pid
  17339. +Return the process ID of Emacs, as an integer.
  17340. +
  17341. +(emacs-pid)Fcurrent-time
  17342. +Return the current time, as the number of seconds since 12:00 AM January 1970.
  17343. +The time is returned as a list of three integers.  The first has the
  17344. +most significant 16 bits of the seconds, while the second has the
  17345. +least significant 16 bits.  The third integer gives the microsecond
  17346. +count.
  17347. +
  17348. +The microsecond count is zero on systems that do not provide
  17349. +resolution finer than a second.
  17350. +
  17351. +(current-time)Fcurrent-time-string
  17352. +Return the current time, as a human-readable string.
  17353. +Programs can use this function to decode a time,
  17354. +since the number of columns in each field is fixed.
  17355. +The format is `Sun Sep 16 01:03:52 1973'.
  17356. +If an argument is given, it specifies a time to format
  17357. +instead of the current time.  The argument should have the form:
  17358. +  (HIGH . LOW)
  17359. +or the form:
  17360. +  (HIGH LOW . IGNORED).
  17361. +Thus, you can use times obtained from `current-time'
  17362. +and from `file-attributes'.
  17363. +
  17364. +(current-time-string &optional SPECIFIED-TIME)Fcurrent-time-zone
  17365. +Return the offset and name for the local time zone.
  17366. +This returns a list of the form (OFFSET NAME).
  17367. +OFFSET is an integer number of seconds ahead of UTC (east of Greenwich).
  17368. +    A negative value means west of Greenwich.
  17369. +NAME is a string giving the name of the time zone.
  17370. +If an argument is given, it specifies when the time zone offset is determined
  17371. +instead of using the current time.  The argument should have the form:
  17372. +  (HIGH . LOW)
  17373. +or the form:
  17374. +  (HIGH LOW . IGNORED).
  17375. +Thus, you can use times obtained from `current-time'
  17376. +and from `file-attributes'.
  17377. +
  17378. +Some operating systems cannot provide all this information to Emacs;
  17379. +in this case, `current-time-zone' returns a list containing nil for
  17380. +the data it can't find.
  17381. +
  17382. +(current-time-zone &optional SPECIFIED-TIME)Finsert
  17383. +Insert the arguments, either strings or characters, at point.
  17384. +Point moves forward so that it ends up after the inserted text.
  17385. +Any other markers at the point of insertion remain before the text.Finsert-and-inherit
  17386. +Insert the arguments at point, inheriting properties from adjoining text.
  17387. +Point moves forward so that it ends up after the inserted text.
  17388. +Any other markers at the point of insertion remain before the text.Finsert-before-markers
  17389. +Insert strings or characters at point, relocating markers after the text.
  17390. +Point moves forward so that it ends up after the inserted text.
  17391. +Any other markers at the point of insertion also end up after the text.Finsert-before-markers-and-inherit
  17392. +Insert text at point, relocating markers and inheriting properties.
  17393. +Point moves forward so that it ends up after the inserted text.
  17394. +Any other markers at the point of insertion also end up after the text.Finsert-char
  17395. +Insert COUNT (second arg) copies of CHAR (first arg).
  17396. +Point and all markers are affected as in the function `insert'.
  17397. +Both arguments are required.
  17398. +The optional third arg INHERIT, if non-nil, says to inherit text properties
  17399. +from adjoining text, if those properties are sticky.
  17400. +
  17401. +(insert-char CHR COUNT &optional INHERIT)Fbuffer-substring
  17402. +Return the contents of part of the current buffer as a string.
  17403. +The two arguments START and END are character positions;
  17404. +they can be in either order.
  17405. +
  17406. +(buffer-substring B E)Fbuffer-string
  17407. +Return the contents of the current buffer as a string.
  17408. +
  17409. +(buffer-string)Finsert-buffer-substring
  17410. +Insert before point a substring of the contents of buffer BUFFER.
  17411. +BUFFER may be a buffer or a buffer name.
  17412. +Arguments START and END are character numbers specifying the substring.
  17413. +They default to the beginning and the end of BUFFER.
  17414. +
  17415. +(insert-buffer-substring BUF &optional B E)Fcompare-buffer-substrings
  17416. +Compare two substrings of two buffers; return result as number.
  17417. +the value is -N if first string is less after N-1 chars,
  17418. ++N if first string is greater after N-1 chars, or 0 if strings match.
  17419. +Each substring is represented as three arguments: BUFFER, START and END.
  17420. +That makes six args in all, three for each substring.
  17421. +
  17422. +The value of `case-fold-search' in the current buffer
  17423. +determines whether case is significant or ignored.
  17424. +
  17425. +(compare-buffer-substrings BUFFER1 START1 END1 BUFFER2 START2 END2)Fsubst-char-in-region
  17426. +From START to END, replace FROMCHAR with TOCHAR each time it occurs.
  17427. +If optional arg NOUNDO is non-nil, don't record this change for undo
  17428. +and don't mark the buffer as really changed.
  17429. +
  17430. +(subst-char-in-region START END FROMCHAR TOCHAR &optional NOUNDO)Ftranslate-region
  17431. +From START to END, translate characters according to TABLE.
  17432. +TABLE is a string; the Nth character in it is the mapping
  17433. +for the character with code N.  Returns the number of characters changed.
  17434. +
  17435. +(translate-region START END TABLE)Fdelete-region
  17436. +Delete the text between point and mark.
  17437. +When called from a program, expects two arguments,
  17438. +positions (integers or markers) specifying the stretch to be deleted.
  17439. +
  17440. +(delete-region B E)Fwiden
  17441. +Remove restrictions (narrowing) from current buffer.
  17442. +This allows the buffer's full text to be seen and edited.
  17443. +
  17444. +(widen)Fnarrow-to-region
  17445. +Restrict editing in this buffer to the current region.
  17446. +The rest of the text becomes temporarily invisible and untouchable
  17447. +but is not deleted; if you save the buffer in a file, the invisible
  17448. +text is included in the file.  \[widen] makes all visible again.
  17449. +See also `save-restriction'.
  17450. +
  17451. +When calling from a program, pass two arguments; positions (integers
  17452. +or markers) bounding the text that should remain visible.
  17453. +
  17454. +(narrow-to-region B E)Fsave-restriction
  17455. +Execute BODY, saving and restoring current buffer's restrictions.
  17456. +The buffer's restrictions make parts of the beginning and end invisible.
  17457. +(They are set up with `narrow-to-region' and eliminated with `widen'.)
  17458. +This special form, `save-restriction', saves the current buffer's restrictions
  17459. +when it is entered, and restores them when it is exited.
  17460. +So any `narrow-to-region' within BODY lasts only until the end of the form.
  17461. +The old restrictions settings are restored
  17462. +even in case of abnormal exit (throw or error).
  17463. +
  17464. +The value returned is the value of the last form in BODY.
  17465. +
  17466. +`save-restriction' can get confused if, within the BODY, you widen
  17467. +and then make changes outside the area within the saved restrictions.
  17468. +
  17469. +Note: if you are using both `save-excursion' and `save-restriction',
  17470. +use `save-excursion' outermost:
  17471. +    (save-excursion (save-restriction ...))Fmessage
  17472. +Print a one-line message at the bottom of the screen.
  17473. +The first argument is a control string.
  17474. +It may contain %s or %d or %c to print successive following arguments.
  17475. +%s means print an argument as a string, %d means print as number in decimal,
  17476. +%c means print a number as a single character.
  17477. +The argument used by %s must be a string or a symbol;
  17478. +the argument used by %d or %c must be a number.
  17479. +If the first argument is nil, clear any existing message; let the
  17480. +minibuffer contents show.Fformat
  17481. +Format a string out of a control-string and arguments.
  17482. +The first argument is a control string.
  17483. +The other arguments are substituted into it to make the result, a string.
  17484. +It may contain %-sequences meaning to substitute the next argument.
  17485. +%s means print a string argument.  Actually, prints any object, with `princ'.
  17486. +%d means print as number in decimal (%o octal, %x hex).
  17487. +%c means print a number as a single character.
  17488. +%S means print any object as an s-expression (using prin1).
  17489. +  The argument used for %d, %o, %x or %c must be a number.
  17490. +Use %% to put a single % into the output.Fchar-equal
  17491. +Return t if two characters match, optionally ignoring case.
  17492. +Both arguments must be characters (i.e. integers).
  17493. +Case is ignored if `case-fold-search' is non-nil in the current buffer.
  17494. +
  17495. +(char-equal C1 C2)Ftranspose-regions
  17496. +Transpose region START1 to END1 with START2 to END2.
  17497. +The regions may not be overlapping, because the size of the buffer is
  17498. +never changed in a transposition.
  17499. +
  17500. +Optional fifth arg LEAVE_MARKERS, if non-nil, means don't transpose
  17501. +any markers that happen to be located in the regions.
  17502. +
  17503. +Transposing beyond buffer boundaries is an error.
  17504. +
  17505. +(transpose-regions STARTR1 ENDR1 STARTR2 ENDR2 &optional LEAVE-MARKERS)Finteractive
  17506. +Specify a way of parsing arguments for interactive use of a function.
  17507. +For example, write
  17508. +  (defun foo (arg) "Doc string" (interactive "p") ...use arg...)
  17509. +to make ARG be the prefix argument when `foo' is called as a command.
  17510. +The "call" to `interactive' is actually a declaration rather than a function;
  17511. + it tells `call-interactively' how to read arguments
  17512. + to pass to the function.
  17513. +When actually called, `interactive' just returns nil.
  17514. +
  17515. +The argument of `interactive' is usually a string containing a code letter
  17516. + followed by a prompt.  (Some code letters do not use I/O to get
  17517. + the argument and do not need prompts.)  To prompt for multiple arguments,
  17518. + give a code letter, its prompt, a newline, and another code letter, etc.
  17519. + Prompts are passed to format, and may use % escapes to print the
  17520. + arguments that have already been read.
  17521. +If the argument is not a string, it is evaluated to get a list of
  17522. + arguments to pass to the function.
  17523. +Just `(interactive)' means pass no args when calling interactively.
  17524. +
  17525. +Code letters available are:
  17526. +a -- Function name: symbol with a function definition.
  17527. +b -- Name of existing buffer.
  17528. +B -- Name of buffer, possibly nonexistent.
  17529. +c -- Character.
  17530. +C -- Command name: symbol with interactive function definition.
  17531. +d -- Value of point as number.  Does not do I/O.
  17532. +D -- Directory name.
  17533. +e -- Parametrized event (i.e., one that's a list) that invoked this command.
  17534. +     If used more than once, the Nth `e' returns the Nth parameterized event.
  17535. +     This skips events that are integers or symbols.
  17536. +f -- Existing file name.
  17537. +F -- Possibly nonexistent file name.
  17538. +k -- Key sequence (string).
  17539. +m -- Value of mark as number.  Does not do I/O.
  17540. +n -- Number read using minibuffer.
  17541. +N -- Prefix arg converted to number, or if none, do like code `n'.
  17542. +p -- Prefix arg converted to number.  Does not do I/O.
  17543. +P -- Prefix arg in raw form.  Does not do I/O.
  17544. +r -- Region: point and mark as 2 numeric args, smallest first.  Does no I/O.
  17545. +s -- Any string.
  17546. +S -- Any symbol.
  17547. +v -- Variable name: symbol that is user-variable-p.
  17548. +x -- Lisp expression read but not evaluated.
  17549. +X -- Lisp expression read and evaluated.
  17550. +In addition, if the string begins with `*'
  17551. + then an error is signaled if the buffer is read-only.
  17552. + This happens before reading any arguments.
  17553. +If the string begins with `@', then Emacs searches the key sequence
  17554. + which invoked the command for its first mouse click (or any other
  17555. + event which specifies a window), and selects that window before
  17556. + reading any arguments.  You may use both `@' and `*'; they are
  17557. + processed in the order that they appear.
  17558. +
  17559. +(interactive ARGS)Fcall-interactively
  17560. +Call FUNCTION, reading args according to its interactive calling specs.
  17561. +The function contains a specification of how to do the argument reading.
  17562. +In the case of user-defined functions, this is specified by placing a call
  17563. +to the function `interactive' at the top level of the function body.
  17564. +See `interactive'.
  17565. +
  17566. +Optional second arg RECORD-FLAG non-nil
  17567. +means unconditionally put this command in the command-history.
  17568. +Otherwise, this is done only if an arg is read using the minibuffer.
  17569. +
  17570. +(call-interactively FUNCTION &optional RECORD)Fprefix-numeric-value
  17571. +Return numeric meaning of raw prefix argument ARG.
  17572. +A raw prefix argument is what you get from `(interactive "P")'.
  17573. +Its numeric meaning is what you would get from `(interactive "p")'.
  17574. +
  17575. +(prefix-numeric-value RAW)Vprefix-arg
  17576. +The value of the prefix argument for the next editing command.
  17577. +It may be a number, or the symbol `-' for just a minus sign as arg,
  17578. +or a list whose car is a number for just one or more C-U's
  17579. +or nil if no argument has been specified.
  17580. +
  17581. +You cannot examine this variable to find the argument for this command
  17582. +since it has been set to nil by the time you can look.
  17583. +Instead, you should use the variable `current-prefix-arg', although
  17584. +normally commands can get this prefix argument with (interactive "P").Vcurrent-prefix-arg
  17585. +The value of the prefix argument for this editing command.
  17586. +It may be a number, or the symbol `-' for just a minus sign as arg,
  17587. +or a list whose car is a number for just one or more C-U's
  17588. +or nil if no argument has been specified.
  17589. +This is what `(interactive "P")' returns.Vcommand-history
  17590. +List of recent commands that read arguments from terminal.
  17591. +Each command is represented as a form to evaluate.Vcommand-debug-status
  17592. +Debugging status of current interactive command.
  17593. +Bound each time `call-interactively' is called;
  17594. +may be set by the debugger as a reminder for itself.Vmark-even-if-inactive
  17595. +*Non-nil means you can use the mark even when inactive.
  17596. +This option makes a difference in Transient Mark mode.
  17597. +When the option is non-nil, deactivation of the mark
  17598. +turns off region highlighting, but commands that use the mark
  17599. +behave as if the mark were still active.For
  17600. +Eval args until one of them yields non-nil, then return that value.
  17601. +The remaining args are not evalled at all.
  17602. +If all args return nil, return nil.Fand
  17603. +Eval args until one of them yields nil, then return nil.
  17604. +The remaining args are not evalled at all.
  17605. +If no arg yields nil, return the last arg's value.Fif
  17606. +(if COND THEN ELSE...): if COND yields non-nil, do THEN, else do ELSE...
  17607. +Returns the value of THEN or the value of the last of the ELSE's.
  17608. +THEN must be one expression, but ELSE... can be zero or more expressions.
  17609. +If COND yields nil, and there are no ELSE's, the value is nil.Fcond
  17610. +(cond CLAUSES...): try each clause until one succeeds.
  17611. +Each clause looks like (CONDITION BODY...).  CONDITION is evaluated
  17612. +and, if the value is non-nil, this clause succeeds:
  17613. +then the expressions in BODY are evaluated and the last one's
  17614. +value is the value of the cond-form.
  17615. +If no clause succeeds, cond returns nil.
  17616. +If a clause has one element, as in (CONDITION),
  17617. +CONDITION's value if non-nil is returned from the cond-form.Fprogn
  17618. +(progn BODY...): eval BODY forms sequentially and return value of last one.Fprog1
  17619. +(prog1 FIRST BODY...): eval FIRST and BODY sequentially; value from FIRST.
  17620. +The value of FIRST is saved during the evaluation of the remaining args,
  17621. +whose values are discarded.Fprog2
  17622. +(prog2 X Y BODY...): eval X, Y and BODY sequentially; value from Y.
  17623. +The value of Y is saved during the evaluation of the remaining args,
  17624. +whose values are discarded.Fsetq
  17625. +(setq SYM VAL SYM VAL ...): set each SYM to the value of its VAL.
  17626. +The symbols SYM are variables; they are literal (not evaluated).
  17627. +The values VAL are expressions; they are evaluated.
  17628. +Thus, (setq x (1+ y)) sets `x' to the value of `(1+ y)'.
  17629. +The second VAL is not computed until after the first SYM is set, and so on;
  17630. +each VAL can use the new value of variables set earlier in the `setq'.
  17631. +The return value of the `setq' form is the value of the last VAL.Fquote
  17632. +Return the argument, without evaluating it.  `(quote x)' yields `x'.Ffunction
  17633. +Like `quote', but preferred for objects which are functions.
  17634. +In byte compilation, `function' causes its argument to be compiled.
  17635. +`quote' cannot do that.Finteractive-p
  17636. +Return t if function in which this appears was called interactively.
  17637. +This means that the function was called with call-interactively (which
  17638. +includes being called as the binding of a key)
  17639. +and input is currently coming from the keyboard (not in keyboard macro).
  17640. +
  17641. +(interactive-p)Fdefun
  17642. +(defun NAME ARGLIST [DOCSTRING] BODY...): define NAME as a function.
  17643. +The definition is (lambda ARGLIST [DOCSTRING] BODY...).
  17644. +See also the function `interactive'.Fdefmacro
  17645. +(defmacro NAME ARGLIST [DOCSTRING] BODY...): define NAME as a macro.
  17646. +The definition is (macro lambda ARGLIST [DOCSTRING] BODY...).
  17647. +When the macro is called, as in (NAME ARGS...),
  17648. +the function (lambda ARGLIST BODY...) is applied to
  17649. +the list ARGS... as it appears in the expression,
  17650. +and the result should be a form to be evaluated instead of the original.Fdefvar
  17651. +(defvar SYMBOL INITVALUE DOCSTRING): define SYMBOL as a variable.
  17652. +You are not required to define a variable in order to use it,
  17653. +but the definition can supply documentation and an initial value
  17654. +in a way that tags can recognize.
  17655. +
  17656. +INITVALUE is evaluated, and used to set SYMBOL, only if SYMBOL's value is void.
  17657. +If SYMBOL is buffer-local, its default value is what is set;
  17658. + buffer-local values are not affected.
  17659. +INITVALUE and DOCSTRING are optional.
  17660. +If DOCSTRING starts with *, this variable is identified as a user option.
  17661. + This means that M-x set-variable and M-x edit-options recognize it.
  17662. +If INITVALUE is missing, SYMBOL's value is not set.Fdefconst
  17663. +(defconst SYMBOL INITVALUE DOCSTRING): define SYMBOL as a constant variable.
  17664. +The intent is that programs do not change this value, but users may.
  17665. +Always sets the value of SYMBOL to the result of evalling INITVALUE.
  17666. +If SYMBOL is buffer-local, its default value is what is set;
  17667. + buffer-local values are not affected.
  17668. +DOCSTRING is optional.
  17669. +If DOCSTRING starts with *, this variable is identified as a user option.
  17670. + This means that M-x set-variable and M-x edit-options recognize it.
  17671. +
  17672. +Note: do not use `defconst' for user options in libraries that are not
  17673. +normally loaded, since it is useful for users to be able to specify
  17674. +their own values for such variables before loading the library.
  17675. +Since `defconst' unconditionally assigns the variable,
  17676. +it would override the user's choice.Fuser-variable-p
  17677. +Returns t if VARIABLE is intended to be set and modified by users.
  17678. +(The alternative is a variable used internally in a Lisp program.)
  17679. +Determined by whether the first character of the documentation
  17680. +for the variable is "*"
  17681. +
  17682. +(user-variable-p VARIABLE)Flet*
  17683. +(let* VARLIST BODY...): bind variables according to VARLIST then eval BODY.
  17684. +The value of the last form in BODY is returned.
  17685. +Each element of VARLIST is a symbol (which is bound to nil)
  17686. +or a list (SYMBOL VALUEFORM) (which binds SYMBOL to the value of VALUEFORM).
  17687. +Each VALUEFORM can refer to the symbols already bound by this VARLIST.Flet
  17688. +(let VARLIST BODY...): bind variables according to VARLIST then eval BODY.
  17689. +The value of the last form in BODY is returned.
  17690. +Each element of VARLIST is a symbol (which is bound to nil)
  17691. +or a list (SYMBOL VALUEFORM) (which binds SYMBOL to the value of VALUEFORM).
  17692. +All the VALUEFORMs are evalled before any symbols are bound.Fwhile
  17693. +(while TEST BODY...): if TEST yields non-nil, eval BODY... and repeat.
  17694. +The order of execution is thus TEST, BODY, TEST, BODY and so on
  17695. +until TEST returns nil.Fmacroexpand
  17696. +Return result of expanding macros at top level of FORM.
  17697. +If FORM is not a macro call, it is returned unchanged.
  17698. +Otherwise, the macro is expanded and the expansion is considered
  17699. +in place of FORM.  When a non-macro-call results, it is returned.
  17700. +
  17701. +The second optional arg ENVIRONMENT species an environment of macro
  17702. +definitions to shadow the loaded ones for use in file byte-compilation.
  17703. +
  17704. +(macroexpand FORM &optional ENV)Fcatch
  17705. +(catch TAG BODY...): eval BODY allowing nonlocal exits using `throw'.
  17706. +TAG is evalled to get the tag to use.  Then the BODY is executed.
  17707. +Within BODY, (throw TAG) with same tag exits BODY and exits this `catch'.
  17708. +If no throw happens, `catch' returns the value of the last BODY form.
  17709. +If a throw happens, it specifies the value to return from `catch'.Fthrow
  17710. +(throw TAG VALUE): throw to the catch for TAG and return VALUE from it.
  17711. +Both TAG and VALUE are evalled.
  17712. +
  17713. +(throw TAG VAL)Funwind-protect
  17714. +Do BODYFORM, protecting with UNWINDFORMS.
  17715. +Usage looks like (unwind-protect BODYFORM UNWINDFORMS...).
  17716. +If BODYFORM completes normally, its value is returned
  17717. +after executing the UNWINDFORMS.
  17718. +If BODYFORM exits nonlocally, the UNWINDFORMS are executed anyway.Fcondition-case
  17719. +Regain control when an error is signaled.
  17720. +Usage looks like (condition-case VAR BODYFORM HANDLERS...).
  17721. +executes BODYFORM and returns its value if no error happens.
  17722. +Each element of HANDLERS looks like (CONDITION-NAME BODY...)
  17723. +where the BODY is made of Lisp expressions.
  17724. +
  17725. +A handler is applicable to an error
  17726. +if CONDITION-NAME is one of the error's condition names.
  17727. +If an error happens, the first applicable handler is run.
  17728. +
  17729. +The car of a handler may be a list of condition names
  17730. +instead of a single condition name.
  17731. +
  17732. +When a handler handles an error,
  17733. +control returns to the condition-case and the handler BODY... is executed
  17734. +with VAR bound to (SIGNALED-CONDITIONS . SIGNAL-DATA).
  17735. +VAR may be nil; then you do not get access to the signal information.
  17736. +
  17737. +The value of the last BODY form is returned from the condition-case.
  17738. +See also the function `signal' for more info.Fsignal
  17739. +Signal an error.  Args are ERROR-SYMBOL and associated DATA.
  17740. +This function does not return.
  17741. +
  17742. +An error symbol is a symbol with an `error-conditions' property
  17743. +that is a list of condition names.
  17744. +A handler for any of those names will get to handle this signal.
  17745. +The symbol `error' should normally be one of them.
  17746. +
  17747. +DATA should be a list.  Its elements are printed as part of the error message.
  17748. +If the signal is handled, DATA is made available to the handler.
  17749. +See also the function `condition-case'.
  17750. +
  17751. +(signal ERROR-SYMBOL DATA)Fcommandp
  17752. +T if FUNCTION makes provisions for interactive calling.
  17753. +This means it contains a description for how to read arguments to give it.
  17754. +The value is nil for an invalid function or a symbol with no function
  17755. +definition.
  17756. +
  17757. +Interactively callable functions include strings and vectors (treated
  17758. +as keyboard macros), lambda-expressions that contain a top-level call
  17759. +to `interactive', autoload definitions made by `autoload' with non-nil
  17760. +fourth argument, and some of the built-in functions of Lisp.
  17761. +
  17762. +Also, a symbol satisfies `commandp' if its function definition does so.
  17763. +
  17764. +(commandp FUNCTION)Fautoload
  17765. +Define FUNCTION to autoload from FILE.
  17766. +FUNCTION is a symbol; FILE is a file name string to pass to `load'.
  17767. +Third arg DOCSTRING is documentation for the function.
  17768. +Fourth arg INTERACTIVE if non-nil says function can be called interactively.
  17769. +Fifth arg TYPE indicates the type of the object:
  17770. +   nil or omitted says FUNCTION is a function,
  17771. +   `keymap' says FUNCTION is really a keymap, and
  17772. +   `macro' or t says FUNCTION is really a macro.
  17773. +Third through fifth args give info about the real definition.
  17774. +They default to nil.
  17775. +If FUNCTION is already defined other than as an autoload,
  17776. +this does nothing and returns nil.
  17777. +
  17778. +(autoload FUNCTION FILE &optional DOCSTRING INTERACTIVE TYPE)Feval
  17779. +Evaluate FORM and return its value.
  17780. +
  17781. +(eval FORM)Fapply
  17782. +Call FUNCTION with our remaining args, using our last arg as list of args.
  17783. +Thus, (apply '+ 1 2 '(3 4)) returns 10.Ffuncall
  17784. +Call first argument as a function, passing remaining arguments to it.
  17785. +Thus, (funcall 'cons 'x 'y) returns (x . y).Fbacktrace-debug
  17786. +Set the debug-on-exit flag of eval frame LEVEL levels down to FLAG.
  17787. +The debugger is entered when that frame exits, if the flag is non-nil.
  17788. +
  17789. +(backtrace-debug LEVEL FLAG)Fbacktrace
  17790. +Print a trace of Lisp function calls currently active.
  17791. +Output stream used is value of `standard-output'.
  17792. +
  17793. +(backtrace)Fbacktrace-frame
  17794. +Return the function and arguments N frames up from current execution point.
  17795. +If that frame has not evaluated the arguments yet (or is a special form),
  17796. +the value is (nil FUNCTION ARG-FORMS...).
  17797. +If that frame has evaluated its arguments and called its function already,
  17798. +the value is (t FUNCTION ARG-VALUES...).
  17799. +A &rest arg is represented as the tail of the list ARG-VALUES.
  17800. +FUNCTION is whatever was supplied as car of evaluated list,
  17801. +or a lambda expression for macro calls.
  17802. +If N is more than the number of frames, the value is nil.
  17803. +
  17804. +(backtrace-frame NFRAMES)Vmax-specpdl-size
  17805. +Limit on number of Lisp variable bindings & unwind-protects before error.Vmax-lisp-eval-depth
  17806. +Limit on depth in `eval', `apply' and `funcall' before error.
  17807. +This limit is to catch infinite recursions for you before they cause
  17808. +actual stack overflow in C, which would be fatal for Emacs.
  17809. +You can safely make it considerably larger than its default value,
  17810. +if that proves inconveniently small.Vquit-flag
  17811. +Non-nil causes `eval' to abort, unless `inhibit-quit' is non-nil.
  17812. +Typing C-g sets `quit-flag' non-nil, regardless of `inhibit-quit'.Vinhibit-quit
  17813. +Non-nil inhibits C-g quitting from happening immediately.
  17814. +Note that `quit-flag' will still be set by typing C-g,
  17815. +so a quit will be signalled as soon as `inhibit-quit' is nil.
  17816. +To prevent this happening, set `quit-flag' to nil
  17817. +before making `inhibit-quit' nil.Vstack-trace-on-error
  17818. +*Non-nil means automatically display a backtrace buffer
  17819. +after any error that is handled by the editor command loop.
  17820. +If the value is a list, an error only means to display a backtrace
  17821. +if one of its condition symbols appears in the list.Vdebug-on-error
  17822. +*Non-nil means enter debugger if an error is signaled.
  17823. +Does not apply to errors handled by `condition-case'.
  17824. +If the value is a list, an error only means to enter the debugger
  17825. +if one of its condition symbols appears in the list.
  17826. +See also variable `debug-on-quit'.Vdebug-on-quit
  17827. +*Non-nil means enter debugger if quit is signaled (C-g, for example).
  17828. +Does not apply if quit is handled by a `condition-case'.Vdebug-on-next-call
  17829. +Non-nil means enter debugger before next `eval', `apply' or `funcall'.Vdebugger
  17830. +Function to call to invoke debugger.
  17831. +If due to frame exit, args are `exit' and the value being returned;
  17832. + this function's value will be returned instead of that.
  17833. +If due to error, args are `error' and a list of the args to `signal'.
  17834. +If due to `apply' or `funcall' entry, one arg, `lambda'.
  17835. +If due to `eval' entry, one arg, t.Vmocklisp-arguments
  17836. +While in a mocklisp function, the list of its unevaluated args.Vrun-hooks
  17837. +Set to the function `run-hooks', if that function has been defined.
  17838. +Otherwise, nil (in a bare Emacs without preloaded Lisp code).Facos
  17839. +Return the inverse cosine of ARG.
  17840. +
  17841. +(acos ARG)Fasin
  17842. +Return the inverse sine of ARG.
  17843. +
  17844. +(asin ARG)Fatan
  17845. +Return the inverse tangent of ARG.
  17846. +
  17847. +(atan ARG)Fcos
  17848. +Return the cosine of ARG.
  17849. +
  17850. +(cos ARG)Fsin
  17851. +Return the sine of ARG.
  17852. +
  17853. +(sin ARG)Ftan
  17854. +Return the tangent of ARG.
  17855. +
  17856. +(tan ARG)Fbessel-j0
  17857. +Return the bessel function j0 of ARG.
  17858. +
  17859. +(bessel-j0 ARG)Fbessel-j1
  17860. +Return the bessel function j1 of ARG.
  17861. +
  17862. +(bessel-j1 ARG)Fbessel-jn
  17863. +Return the order N bessel function output jn of ARG.
  17864. +The first arg (the order) is truncated to an integer.
  17865. +
  17866. +(bessel-jn ARG1 ARG2)Fbessel-y0
  17867. +Return the bessel function y0 of ARG.
  17868. +
  17869. +(bessel-y0 ARG)Fbessel-y1
  17870. +Return the bessel function y1 of ARG.
  17871. +
  17872. +(bessel-y1 ARG)Fbessel-yn
  17873. +Return the order N bessel function output yn of ARG.
  17874. +The first arg (the order) is truncated to an integer.
  17875. +
  17876. +(bessel-yn ARG1 ARG2)Ferf
  17877. +Return the mathematical error function of ARG.
  17878. +
  17879. +(erf ARG)Ferfc
  17880. +Return the complementary error function of ARG.
  17881. +
  17882. +(erfc ARG)Flog-gamma
  17883. +Return the log gamma of ARG.
  17884. +
  17885. +(log-gamma ARG)Fcube-root
  17886. +Return the cube root of ARG.
  17887. +
  17888. +(cube-root ARG)Fexp
  17889. +Return the exponential base e of ARG.
  17890. +
  17891. +(exp ARG)Fexpt
  17892. +Return the exponential X ** Y.
  17893. +
  17894. +(expt ARG1 ARG2)Flog
  17895. +Return the natural logarithm of ARG.
  17896. +If second optional argument BASE is given, return log ARG using that base.
  17897. +
  17898. +(log ARG &optional BASE)Flog10
  17899. +Return the logarithm base 10 of ARG.
  17900. +
  17901. +(log10 ARG)Fsqrt
  17902. +Return the square root of ARG.
  17903. +
  17904. +(sqrt ARG)Facosh
  17905. +Return the inverse hyperbolic cosine of ARG.
  17906. +
  17907. +(acosh ARG)Fasinh
  17908. +Return the inverse hyperbolic sine of ARG.
  17909. +
  17910. +(asinh ARG)Fatanh
  17911. +Return the inverse hyperbolic tangent of ARG.
  17912. +
  17913. +(atanh ARG)Fcosh
  17914. +Return the hyperbolic cosine of ARG.
  17915. +
  17916. +(cosh ARG)Fsinh
  17917. +Return the hyperbolic sine of ARG.
  17918. +
  17919. +(sinh ARG)Ftanh
  17920. +Return the hyperbolic tangent of ARG.
  17921. +
  17922. +(tanh ARG)Fabs
  17923. +Return the absolute value of ARG.
  17924. +
  17925. +(abs ARG)Ffloat
  17926. +Return the floating point number equal to ARG.
  17927. +
  17928. +(float ARG)Flogb
  17929. +Returns largest integer <= the base 2 log of the magnitude of ARG.
  17930. +This is the same as the exponent of a float.
  17931. +
  17932. +(logb ARG)Fceiling
  17933. +Return the smallest integer no less than ARG.  (Round toward +inf.)
  17934. +
  17935. +(ceiling ARG)Ffloor
  17936. +Return the largest integer no greater than ARG.  (Round towards -inf.)
  17937. +With optional DIVISOR, return the largest integer no greater than ARG/DIVISOR.
  17938. +
  17939. +(floor ARG &optional DIVISOR)Fround
  17940. +Return the nearest integer to ARG.
  17941. +
  17942. +(round ARG)Ftruncate
  17943. +Truncate a floating point number to an int.
  17944. +Rounds the value toward zero.
  17945. +
  17946. +(truncate ARG)Ffceiling
  17947. +Return the smallest integer no less than ARG, as a float.
  17948. +(Round toward +inf.)
  17949. +
  17950. +(fceiling ARG)Fffloor
  17951. +Return the largest integer no greater than ARG, as a float.
  17952. +(Round towards -inf.)
  17953. +
  17954. +(ffloor ARG)Ffround
  17955. +Return the nearest integer to ARG, as a float.
  17956. +
  17957. +(fround ARG)Fftruncate
  17958. +Truncate a floating point number to an integral float value.
  17959. +Rounds the value toward zero.
  17960. +
  17961. +(ftruncate ARG)Fidentity
  17962. +Return the argument unchanged.
  17963. +
  17964. +(identity ARG)Frandom
  17965. +Return a pseudo-random number.
  17966. +On most systems all integers representable in Lisp are equally likely.
  17967. +  This is 24 bits' worth.
  17968. +With argument N, return random number in interval [0,N).
  17969. +With argument t, set the random number seed from the current time and pid.
  17970. +
  17971. +(random &optional LIMIT)Flength
  17972. +Return the length of vector, list or string SEQUENCE.
  17973. +A byte-code function object is also allowed.
  17974. +
  17975. +(length OBJ)Fstring-equal
  17976. +T if two strings have identical contents.
  17977. +Case is significant.
  17978. +Symbols are also allowed; their print names are used instead.
  17979. +
  17980. +(string-equal S1 S2)Fstring-lessp
  17981. +T if first arg string is less than second in lexicographic order.
  17982. +Case is significant.
  17983. +Symbols are also allowed; their print names are used instead.
  17984. +
  17985. +(string-lessp S1 S2)Fappend
  17986. +Concatenate all the arguments and make the result a list.
  17987. +The result is a list whose elements are the elements of all the arguments.
  17988. +Each argument may be a list, vector or string.
  17989. +The last argument is not copied, just used as the tail of the new list.Fconcat
  17990. +Concatenate all the arguments and make the result a string.
  17991. +The result is a string whose elements are the elements of all the arguments.
  17992. +Each argument may be a string, a list of characters (integers),
  17993. +or a vector of characters (integers).Fvconcat
  17994. +Concatenate all the arguments and make the result a vector.
  17995. +The result is a vector whose elements are the elements of all the arguments.
  17996. +Each argument may be a list, vector or string.Fcopy-sequence
  17997. +Return a copy of a list, vector or string.
  17998. +The elements of a list or vector are not copied; they are shared
  17999. +with the original.
  18000. +
  18001. +(copy-sequence ARG)Fcopy-alist
  18002. +Return a copy of ALIST.
  18003. +This is an alist which represents the same mapping from objects to objects,
  18004. +but does not share the alist structure with ALIST.
  18005. +The objects mapped (cars and cdrs of elements of the alist)
  18006. +are shared, however.
  18007. +Elements of ALIST that are not conses are also shared.
  18008. +
  18009. +(copy-alist ALIST)Fsubstring
  18010. +Return a substring of STRING, starting at index FROM and ending before TO.
  18011. +TO may be nil or omitted; then the substring runs to the end of STRING.
  18012. +If FROM or TO is negative, it counts from the end.
  18013. +
  18014. +(substring STRING FROM &optional TO)Fnthcdr
  18015. +Take cdr N times on LIST, returns the result.
  18016. +
  18017. +(nthcdr N LIST)Fnth
  18018. +Return the Nth element of LIST.
  18019. +N counts from zero.  If LIST is not that long, nil is returned.
  18020. +
  18021. +(nth N LIST)Felt
  18022. +Return element of SEQUENCE at index N.
  18023. +
  18024. +(elt SEQ N)Fmember
  18025. +Return non-nil if ELT is an element of LIST.  Comparison done with `equal'.
  18026. +The value is actually the tail of LIST whose car is ELT.
  18027. +
  18028. +(member ELT LIST)Fmemq
  18029. +Return non-nil if ELT is an element of LIST.  Comparison done with EQ.
  18030. +The value is actually the tail of LIST whose car is ELT.
  18031. +
  18032. +(memq ELT LIST)Fassq
  18033. +Return non-nil if KEY is `eq' to the car of an element of LIST.
  18034. +The value is actually the element of LIST whose car is KEY.
  18035. +Elements of LIST that are not conses are ignored.
  18036. +
  18037. +(assq KEY LIST)Fassoc
  18038. +Return non-nil if KEY is `equal' to the car of an element of LIST.
  18039. +The value is actually the element of LIST whose car is KEY.
  18040. +
  18041. +(assoc KEY LIST)Frassq
  18042. +Return non-nil if ELT is `eq' to the cdr of an element of LIST.
  18043. +The value is actually the element of LIST whose cdr is ELT.
  18044. +
  18045. +(rassq KEY LIST)Fdelq
  18046. +Delete by side effect any occurrences of ELT as a member of LIST.
  18047. +The modified LIST is returned.  Comparison is done with `eq'.
  18048. +If the first member of LIST is ELT, there is no way to remove it by side effect;
  18049. +therefore, write `(setq foo (delq element foo))'
  18050. +to be sure of changing the value of `foo'.
  18051. +
  18052. +(delq ELT LIST)Fdelete
  18053. +Delete by side effect any occurrences of ELT as a member of LIST.
  18054. +The modified LIST is returned.  Comparison is done with `equal'.
  18055. +If the first member of LIST is ELT, deleting it is not a side effect;
  18056. +it is simply using a different list.
  18057. +Therefore, write `(setq foo (delete element foo))'
  18058. +to be sure of changing the value of `foo'.
  18059. +
  18060. +(delete ELT LIST)Fnreverse
  18061. +Reverse LIST by modifying cdr pointers.
  18062. +Returns the beginning of the reversed list.
  18063. +
  18064. +(nreverse LIST)Freverse
  18065. +Reverse LIST, copying.  Returns the beginning of the reversed list.
  18066. +See also the function `nreverse', which is used more often.
  18067. +
  18068. +(reverse LIST)Fsort
  18069. +Sort LIST, stably, comparing elements using PREDICATE.
  18070. +Returns the sorted list.  LIST is modified by side effects.
  18071. +PREDICATE is called with two elements of LIST, and should return T
  18072. +if the first element is "less" than the second.
  18073. +
  18074. +(sort LIST PRED)Fget
  18075. +Return the value of SYMBOL's PROPNAME property.
  18076. +This is the last VALUE stored with `(put SYMBOL PROPNAME VALUE)'.
  18077. +
  18078. +(get SYM PROP)Fput
  18079. +Store SYMBOL's PROPNAME property with value VALUE.
  18080. +It can be retrieved with `(get SYMBOL PROPNAME)'.
  18081. +
  18082. +(put SYM PROP VAL)Fequal
  18083. +T if two Lisp objects have similar structure and contents.
  18084. +They must have the same data type.
  18085. +Conses are compared by comparing the cars and the cdrs.
  18086. +Vectors and strings are compared element by element.
  18087. +Numbers are compared by value, but integers cannot equal floats.
  18088. + (Use `=' if you want integers and floats to be able to be equal.)
  18089. +Symbols must match exactly.
  18090. +
  18091. +(equal O1 O2)Ffillarray
  18092. +Store each element of ARRAY with ITEM.  ARRAY is a vector or string.
  18093. +
  18094. +(fillarray ARRAY ITEM)Fnconc
  18095. +Concatenate any number of lists by altering them.
  18096. +Only the last argument is not altered, and need not be a list.Fmapconcat
  18097. +Apply FN to each element of SEQ, and concat the results as strings.
  18098. +In between each pair of results, stick in SEP.
  18099. +Thus, " " as SEP results in spaces between the values returned by FN.
  18100. +
  18101. +(mapconcat FN SEQ SEP)Fmapcar
  18102. +Apply FUNCTION to each element of SEQUENCE, and make a list of the results.
  18103. +The result is a list just as long as SEQUENCE.
  18104. +SEQUENCE may be a list, a vector or a string.
  18105. +
  18106. +(mapcar FN SEQ)Fy-or-n-p
  18107. +Ask user a "y or n" question.  Return t if answer is "y".
  18108. +Takes one argument, which is the string to display to ask the question.
  18109. +It should end in a space; `y-or-n-p' adds `(y or n) ' to it.
  18110. +No confirmation of the answer is requested; a single character is enough.
  18111. +Also accepts Space to mean yes, or Delete to mean no.
  18112. +
  18113. +(y-or-n-p PROMPT)Fyes-or-no-p
  18114. +Ask user a yes-or-no question.  Return t if answer is yes.
  18115. +Takes one argument, which is the string to display to ask the question.
  18116. +It should end in a space; `yes-or-no-p' adds `(yes or no) ' to it.
  18117. +The user must confirm the answer with RET,
  18118. +and can edit it until it as been confirmed.
  18119. +
  18120. +(yes-or-no-p PROMPT)Fload-average
  18121. +Return list of 1 minute, 5 minute and 15 minute load averages.
  18122. +Each of the three load averages is multiplied by 100,
  18123. +then converted to integer.
  18124. +If the 5-minute or 15-minute load averages are not available, return a
  18125. +shortened list, containing only those averages which are available.
  18126. +
  18127. +(load-average)Ffeaturep
  18128. +Returns t if FEATURE is present in this Emacs.
  18129. +Use this to conditionalize execution of lisp code based on the presence or
  18130. +absence of emacs or environment extensions.
  18131. +Use `provide' to declare that a feature is available.
  18132. +This function looks at the value of the variable `features'.
  18133. +
  18134. +(featurep FEATURE)Fprovide
  18135. +Announce that FEATURE is a feature of the current Emacs.
  18136. +
  18137. +(provide FEATURE)Frequire
  18138. +If feature FEATURE is not loaded, load it from FILENAME.
  18139. +If FEATURE is not a member of the list `features', then the feature
  18140. +is not loaded; so load the file FILENAME.
  18141. +If FILENAME is omitted, the printname of FEATURE is used as the file name.
  18142. +
  18143. +(require FEATURE &optional FILE-NAME)Vfeatures
  18144. +A list of symbols which are the features of the executing emacs.
  18145. +Used by `featurep' and `require', and altered by `provide'.Fwrite-char
  18146. +Output character CHAR to stream PRINTCHARFUN.
  18147. +PRINTCHARFUN defaults to the value of `standard-output' (which see).
  18148. +
  18149. +(write-char CH &optional PRINTCHARFUN)Fwith-output-to-temp-buffer
  18150. +Bind `standard-output' to buffer BUFNAME, eval BODY, then show that buffer.
  18151. +The buffer is cleared out initially, and marked as unmodified when done.
  18152. +All output done by BODY is inserted in that buffer by default.
  18153. +The buffer is displayed in another window, but not selected.
  18154. +The value of the last form in BODY is returned.
  18155. +If BODY does not finish normally, the buffer BUFNAME is not displayed.
  18156. +
  18157. +If variable `temp-buffer-show-function' is non-nil, call it at the end
  18158. +to get the buffer displayed.  It gets one argument, the buffer to display.Fterpri
  18159. +Output a newline to stream PRINTCHARFUN.
  18160. +If PRINTCHARFUN is omitted or nil, the value of `standard-output' is used.
  18161. +
  18162. +(terpri &optional PRINTCHARFUN)Fprin1
  18163. +Output the printed representation of OBJECT, any Lisp object.
  18164. +Quoting characters are printed when needed to make output that `read'
  18165. +can handle, whenever this is possible.
  18166. +Output stream is PRINTCHARFUN, or value of `standard-output' (which see).
  18167. +
  18168. +(prin1 OBJ &optional PRINTCHARFUN)Fprin1-to-string
  18169. +Return a string containing the printed representation of OBJECT,
  18170. +any Lisp object.  Quoting characters are used when needed to make output
  18171. +that `read' can handle, whenever this is possible, unless the optional
  18172. +second argument NOESCAPE is non-nil.
  18173. +
  18174. +(prin1-to-string OBJ &optional NOESCAPE)Fprinc
  18175. +Output the printed representation of OBJECT, any Lisp object.
  18176. +No quoting characters are used; no delimiters are printed around
  18177. +the contents of strings.
  18178. +Output stream is PRINTCHARFUN, or value of standard-output (which see).
  18179. +
  18180. +(princ OBJ &optional PRINTCHARFUN)Fprint
  18181. +Output the printed representation of OBJECT, with newlines around it.
  18182. +Quoting characters are printed when needed to make output that `read'
  18183. +can handle, whenever this is possible.
  18184. +Output stream is PRINTCHARFUN, or value of `standard-output' (which see).
  18185. +
  18186. +(print OBJ &optional PRINTCHARFUN)Fexternal-debugging-output
  18187. +Write CHARACTER to stderr.
  18188. +You can call print while debugging emacs, and pass it this function
  18189. +to make it write to the debugging output.
  18190. +
  18191. +
  18192. +(external-debugging-output CHARACTER)Vstandard-output
  18193. +Output stream `print' uses by default for outputting a character.
  18194. +This may be any function of one argument.
  18195. +It may also be a buffer (output is inserted before point)
  18196. +or a marker (output is inserted and the marker is advanced)
  18197. +or the symbol t (output appears in the minibuffer line).Vfloat-output-format
  18198. +The format descriptor string used to print floats.
  18199. +This is a %-spec like those accepted by `printf' in C,
  18200. +but with some restrictions.  It must start with the two characters `%.'.
  18201. +After that comes an integer precision specification,
  18202. +and then a letter which controls the format.
  18203. +The letters allowed are `e', `f' and `g'.
  18204. +Use `e' for exponential notation "DIG.DIGITSeEXPT"
  18205. +Use `f' for decimal point notation "DIGITS.DIGITS".
  18206. +Use `g' to choose the shorter of those two formats for the number at hand.
  18207. +The precision in any of these cases is the number of digits following
  18208. +the decimal point.  With `f', a precision of 0 means to omit the
  18209. +decimal point.  0 is not allowed with `e' or `g'.
  18210. +
  18211. +A value of nil means to use `%.17g'.Vprint-length
  18212. +Maximum length of list to print before abbreviating.
  18213. +A value of nil means no limit.Vprint-level
  18214. +Maximum depth of list nesting to print before abbreviating.
  18215. +A value of nil means no limit.Vprint-escape-newlines
  18216. +Non-nil means print newlines in strings as backslash-n.
  18217. +Also print formfeeds as backslash-f.Fread-char
  18218. +Read a character from the command input (keyboard or macro).
  18219. +It is returned as a number.
  18220. +If the user generates an event which is not a character (i.e. a mouse
  18221. +click or function key event), `read-char' signals an error.  As an
  18222. +exception, switch-frame events are put off until non-ASCII events can
  18223. +be read.
  18224. +If you want to read non-character events, or ignore them, call
  18225. +`read-event' or `read-char-exclusive' instead.
  18226. +
  18227. +(read-char)Fread-event
  18228. +Read an event object from the input stream.
  18229. +
  18230. +(read-event)Fread-char-exclusive
  18231. +Read a character from the command input (keyboard or macro).
  18232. +It is returned as a number.  Non character events are ignored.
  18233. +
  18234. +(read-char-exclusive)Fget-file-char
  18235. +Don't use this yourself.
  18236. +
  18237. +(get-file-char)Fload
  18238. +Execute a file of Lisp code named FILE.
  18239. +First try FILE with `.elc' appended, then try with `.el',
  18240. + then try FILE unmodified.
  18241. +This function searches the directories in `load-path'.
  18242. +If optional second arg NOERROR is non-nil,
  18243. + report no error if FILE doesn't exist.
  18244. +Print messages at start and end of loading unless
  18245. + optional third arg NOMESSAGE is non-nil.
  18246. +If optional fourth arg NOSUFFIX is non-nil, don't try adding
  18247. + suffixes `.elc' or `.el' to the specified name FILE.
  18248. +Return t if file exists.
  18249. +
  18250. +(load STR &optional NOERROR NOMESSAGE NOSUFFIX)Feval-buffer
  18251. +Execute the current buffer as Lisp code.
  18252. +Programs can pass two arguments, BUFFER and PRINTFLAG.
  18253. +BUFFER is the buffer to evaluate (nil means use current buffer).
  18254. +PRINTFLAG controls printing of output:
  18255. +nil means discard it; anything else is stream for print.
  18256. +
  18257. +If there is no error, point does not move.  If there is an error,
  18258. +point remains at the end of the last character read from the buffer.
  18259. +
  18260. +(eval-buffer &optional BUFNAME PRINTFLAG)Feval-current-buffer
  18261. +Execute the current buffer as Lisp code.
  18262. +Programs can pass argument PRINTFLAG which controls printing of output:
  18263. +nil means discard it; anything else is stream for print.
  18264. +
  18265. +If there is no error, point does not move.  If there is an error,
  18266. +point remains at the end of the last character read from the buffer.
  18267. +
  18268. +(eval-current-buffer &optional PRINTFLAG)Feval-region
  18269. +Execute the region as Lisp code.
  18270. +When called from programs, expects two arguments,
  18271. +giving starting and ending indices in the current buffer
  18272. +of the text to be executed.
  18273. +Programs can pass third argument PRINTFLAG which controls output:
  18274. +nil means discard it; anything else is stream for printing it.
  18275. +
  18276. +If there is no error, point does not move.  If there is an error,
  18277. +point remains at the end of the last character read from the buffer.
  18278. +
  18279. +(eval-region B E &optional PRINTFLAG)Fread
  18280. +Read one Lisp expression as text from STREAM, return as Lisp object.
  18281. +If STREAM is nil, use the value of `standard-input' (which see).
  18282. +STREAM or the value of `standard-input' may be:
  18283. + a buffer (read from point and advance it)
  18284. + a marker (read from where it points and advance it)
  18285. + a function (call it with no arguments for each character,
  18286. +     call it with a char as argument to push a char back)
  18287. + a string (takes text from string, starting at the beginning)
  18288. + t (read text line using minibuffer and use it).
  18289. +
  18290. +(read &optional READCHARFUN)Fread-from-string
  18291. +Read one Lisp expression which is represented as text by STRING.
  18292. +Returns a cons: (OBJECT-READ . FINAL-STRING-INDEX).
  18293. +START and END optionally delimit a substring of STRING from which to read;
  18294. + they default to 0 and (length STRING) respectively.
  18295. +
  18296. +(read-from-string STRING &optional START END)Fintern
  18297. +Return the canonical symbol whose name is STRING.
  18298. +If there is none, one is created by this function and returned.
  18299. +A second optional argument specifies the obarray to use;
  18300. +it defaults to the value of `obarray'.
  18301. +
  18302. +(intern STR &optional OBARRAY)Fintern-soft
  18303. +Return the canonical symbol whose name is STRING, or nil if none exists.
  18304. +A second optional argument specifies the obarray to use;
  18305. +it defaults to the value of `obarray'.
  18306. +
  18307. +(intern-soft STR &optional OBARRAY)Fmapatoms
  18308. +Call FUNCTION on every symbol in OBARRAY.
  18309. +OBARRAY defaults to the value of `obarray'.
  18310. +
  18311. +(mapatoms FUNCTION &optional OBARRAY)Vobarray
  18312. +Symbol table for use by `intern' and `read'.
  18313. +It is a vector whose length ought to be prime for best results.
  18314. +The vector's contents don't make sense if examined from Lisp programs;
  18315. +to find all the symbols in an obarray, use `mapatoms'.Vvalues
  18316. +List of values of all expressions which were read, evaluated and printed.
  18317. +Order is reverse chronological.Vstandard-input
  18318. +Stream for read to get input from.
  18319. +See documentation of `read' for possible values.Vload-path
  18320. +*List of directories to search for files to load.
  18321. +Each element is a string (directory name) or nil (try default directory).
  18322. +Initialized based on EMACSLOADPATH environment variable, if any,
  18323. +otherwise to default specified by file `paths.h' when Emacs was built.Vload-in-progress
  18324. +Non-nil iff inside of `load'.Vafter-load-alist
  18325. +An alist of expressions to be evalled when particular files are loaded.
  18326. +Each element looks like (FILENAME FORMS...).
  18327. +When `load' is run and the file-name argument is FILENAME,
  18328. +the FORMS in the corresponding element are executed at the end of loading.
  18329. +
  18330. +FILENAME must match exactly!  Normally FILENAME is the name of a library,
  18331. +with no directory specified, since that is how `load' is normally called.
  18332. +An error in FORMS does not undo the load,
  18333. +but does prevent execution of the rest of the FORMS.Vload-history
  18334. +Alist mapping source file names to symbols and features.
  18335. +Each alist element is a list that starts with a file name,
  18336. +except for one element (optional) that starts with nil and describes
  18337. +definitions evaluated from buffers not visiting files.
  18338. +The remaining elements of each list are symbols defined as functions
  18339. +or variables, and cons cells `(provide . FEATURE)' and `(require . FEATURE)'.Vcurrent-load-list
  18340. +Used for internal purposes by `load'.Fmake-abbrev-table
  18341. +Create a new, empty abbrev table object.
  18342. +
  18343. +(make-abbrev-table)Fclear-abbrev-table
  18344. +Undefine all abbrevs in abbrev table TABLE, leaving it empty.
  18345. +
  18346. +(clear-abbrev-table TABLE)Fdefine-abbrev
  18347. +Define an abbrev in TABLE named NAME, to expand to EXPANSION and call HOOK.
  18348. +NAME and EXPANSION are strings.
  18349. +To undefine an abbrev, define it with EXPANSION = nil.
  18350. +If HOOK is non-nil, it should be a function of no arguments;
  18351. +it is called after EXPANSION is inserted.
  18352. +
  18353. +(define-abbrev TABLE NAME EXPANSION &optional HOOK COUNT)Fdefine-global-abbrev
  18354. +Define ABBREV as a global abbreviation for EXPANSION.
  18355. +
  18356. +(define-global-abbrev NAME EXPANSION)Fdefine-mode-abbrev
  18357. +Define ABBREV as a mode-specific abbreviation for EXPANSION.
  18358. +
  18359. +(define-mode-abbrev NAME EXPANSION)Fabbrev-symbol
  18360. +Return the symbol representing abbrev named ABBREV.
  18361. +This symbol's name is ABBREV, but it is not the canonical symbol of that name;
  18362. +it is interned in an abbrev-table rather than the normal obarray.
  18363. +The value is nil if that abbrev is not defined.
  18364. +Optional second arg TABLE is abbrev table to look it up in.
  18365. +The default is to try buffer's mode-specific abbrev table, then global table.
  18366. +
  18367. +(abbrev-symbol ABBREV &optional TABLE)Fabbrev-expansion
  18368. +Return the string that ABBREV expands into in the current buffer.
  18369. +Optionally specify an abbrev table as second arg;
  18370. +then ABBREV is looked up in that table only.
  18371. +
  18372. +(abbrev-expansion ABBREV &optional TABLE)Fexpand-abbrev
  18373. +Expand the abbrev before point, if there is an abbrev there.
  18374. +Effective when explicitly called even when `abbrev-mode' is nil.
  18375. +Returns t if expansion took place.
  18376. +
  18377. +(expand-abbrev)Funexpand-abbrev
  18378. +Undo the expansion of the last abbrev that expanded.
  18379. +This differs from ordinary undo in that other editing done since then
  18380. +is not undone.
  18381. +
  18382. +(unexpand-abbrev)Finsert-abbrev-table-description
  18383. +Insert before point a full description of abbrev table named NAME.
  18384. +NAME is a symbol whose value is an abbrev table.
  18385. +If optional 2nd arg HUMAN is non-nil, a human-readable description is inserted.
  18386. +Otherwise the description is an expression,
  18387. +a call to `define-abbrev-table', which would
  18388. +define the abbrev table NAME exactly as it is currently defined.
  18389. +
  18390. +(insert-abbrev-table-description NAME &optional READABLE)Fdefine-abbrev-table
  18391. +Define TABNAME (a symbol) as an abbrev table name.
  18392. +Define abbrevs in it according to DEFINITIONS, which is a list of elements
  18393. +of the form (ABBREVNAME EXPANSION HOOK USECOUNT).
  18394. +
  18395. +(define-abbrev-table TABNAME DEFNS)Vabbrev-table-name-list
  18396. +List of symbols whose values are abbrev tables.Vglobal-abbrev-table
  18397. +The abbrev table whose abbrevs affect all buffers.
  18398. +Each buffer may also have a local abbrev table.
  18399. +If it does, the local table overrides the global one
  18400. +for any particular abbrev defined in both.Vfundamental-mode-abbrev-table
  18401. +The abbrev table of mode-specific abbrevs for Fundamental Mode.Vlast-abbrev
  18402. +The abbrev-symbol of the last abbrev expanded.  See `abbrev-symbol'.Vlast-abbrev-text
  18403. +The exact text of the last abbrev expanded.
  18404. +nil if the abbrev has already been unexpanded.Vlast-abbrev-location
  18405. +The location of the start of the last abbrev expanded.Vabbrev-start-location
  18406. +Buffer position for `expand-abbrev' to use as the start of the abbrev.
  18407. +nil means use the word before point as the abbrev.
  18408. +Calling `expand-abbrev' sets this to nil.Vabbrev-start-location-buffer
  18409. +Buffer that `abbrev-start-location' has been set for.
  18410. +Trying to expand an abbrev in any other buffer clears `abbrev-start-location'.Vlocal-abbrev-table
  18411. +Local (mode-specific) abbrev table of current buffer.Vabbrevs-changed
  18412. +Set non-nil by defining or altering any word abbrevs.
  18413. +This causes `save-some-buffers' to offer to save the abbrevs.Vabbrev-all-caps
  18414. +*Set non-nil means expand multi-word abbrevs all caps if abbrev was so.Vpre-abbrev-expand-hook
  18415. +Function or functions to be called before abbrev expansion is done.
  18416. +This is the first thing that `expand-abbrev' does, and so this may change
  18417. +the current abbrev table before abbrev lookup happens.Fsyntax-table-p
  18418. +Return t if ARG is a syntax table.
  18419. +Any vector of 256 elements will do.
  18420. +
  18421. +(syntax-table-p OBJ)Fsyntax-table
  18422. +Return the current syntax table.
  18423. +This is the one specified by the current buffer.
  18424. +
  18425. +(syntax-table)Fstandard-syntax-table
  18426. +Return the standard syntax table.
  18427. +This is the one used for new buffers.
  18428. +
  18429. +(standard-syntax-table)Fcopy-syntax-table
  18430. +Construct a new syntax table and return it.
  18431. +It is a copy of the TABLE, which defaults to the standard syntax table.
  18432. +
  18433. +(copy-syntax-table &optional TABLE)Fset-syntax-table
  18434. +Select a new syntax table for the current buffer.
  18435. +One argument, a syntax table.
  18436. +
  18437. +(set-syntax-table TABLE)Fchar-syntax
  18438. +Return the syntax code of CHAR, described by a character.
  18439. +For example, if CHAR is a word constituent, the character `?w' is returned.
  18440. +The characters that correspond to various syntax codes
  18441. +are listed in the documentation of `modify-syntax-entry'.
  18442. +
  18443. +(char-syntax CH)Fmatching-paren
  18444. +Return the matching parenthesis of CHAR, or nil if none.
  18445. +
  18446. +(matching-paren CH)Fmodify-syntax-entry
  18447. +Set syntax for character CHAR according to string S.
  18448. +The syntax is changed only for table TABLE, which defaults to
  18449. + the current buffer's syntax table.
  18450. +The first character of S should be one of the following:
  18451. +  Space or -  whitespace syntax.    w   word constituent.
  18452. +  _           symbol constituent.   .   punctuation.
  18453. +  (           open-parenthesis.     )   close-parenthesis.
  18454. +  "           string quote.         \   escape.
  18455. +  $           paired delimiter.     '   expression quote or prefix operator.
  18456. +  <           comment starter.      >   comment ender.
  18457. +  /           character-quote.      @   inherit from `standard-syntax-table'.
  18458. +
  18459. +Only single-character comment start and end sequences are represented thus.
  18460. +Two-character sequences are represented as described below.
  18461. +The second character of S is the matching parenthesis,
  18462. + used only if the first character is `(' or `)'.
  18463. +Any additional characters are flags.
  18464. +Defined flags are the characters 1, 2, 3, 4, b, and p.
  18465. + 1 means C is the start of a two-char comment start sequence.
  18466. + 2 means C is the second character of such a sequence.
  18467. + 3 means C is the start of a two-char comment end sequence.
  18468. + 4 means C is the second character of such a sequence.
  18469. +
  18470. +There can be up to two orthogonal comment sequences. This is to support
  18471. +language modes such as C++.  By default, all comment sequences are of style
  18472. +a, but you can set the comment sequence style to b (on the second character
  18473. +of a comment-start, or the first character of a comment-end sequence) using
  18474. +this flag:
  18475. + b means C is part of comment sequence b.
  18476. +
  18477. + p means C is a prefix character for `backward-prefix-chars';
  18478. +   such characters are treated as whitespace when they occur
  18479. +   between expressions.
  18480. +
  18481. +(modify-syntax-entry CHAR S &optional TABLE)Fdescribe-syntax
  18482. +Describe the syntax specifications in the syntax table.
  18483. +The descriptions are inserted in a buffer, which is then displayed.
  18484. +
  18485. +(describe-syntax)Fforward-word
  18486. +Move point forward ARG words (backward if ARG is negative).
  18487. +Normally returns t.
  18488. +If an edge of the buffer is reached, point is left there
  18489. +and nil is returned.
  18490. +
  18491. +(forward-word COUNT)Fforward-comment
  18492. +Move forward across up to N comments.  If N is negative, move backward.
  18493. +Stop scanning if we find something other than a comment or whitespace.
  18494. +Set point to where scanning stops.
  18495. +If N comments are found as expected, with nothing except whitespace
  18496. +between them, return t; otherwise return nil.
  18497. +
  18498. +(forward-comment COUNT)Fscan-lists
  18499. +Scan from character number FROM by COUNT lists.
  18500. +Returns the character number of the position thus found.
  18501. +
  18502. +If DEPTH is nonzero, paren depth begins counting from that value,
  18503. +only places where the depth in parentheses becomes zero
  18504. +are candidates for stopping; COUNT such places are counted.
  18505. +Thus, a positive value for DEPTH means go out levels.
  18506. +
  18507. +Comments are ignored if `parse-sexp-ignore-comments' is non-nil.
  18508. +
  18509. +If the beginning or end of (the accessible part of) the buffer is reached
  18510. +and the depth is wrong, an error is signaled.
  18511. +If the depth is right but the count is not used up, nil is returned.
  18512. +
  18513. +(scan-lists FROM COUNT DEPTH)Fscan-sexps
  18514. +Scan from character number FROM by COUNT balanced expressions.
  18515. +If COUNT is negative, scan backwards.
  18516. +Returns the character number of the position thus found.
  18517. +
  18518. +Comments are ignored if `parse-sexp-ignore-comments' is non-nil.
  18519. +
  18520. +If the beginning or end of (the accessible part of) the buffer is reached
  18521. +in the middle of a parenthetical grouping, an error is signaled.
  18522. +If the beginning or end is reached between groupings
  18523. +but before count is used up, nil is returned.
  18524. +
  18525. +(scan-sexps FROM COUNT)Fbackward-prefix-chars
  18526. +Move point backward over any number of chars with prefix syntax.
  18527. +This includes chars with "quote" or "prefix" syntax (' or p).
  18528. +
  18529. +(backward-prefix-chars)Fparse-partial-sexp
  18530. +Parse Lisp syntax starting at FROM until TO; return status of parse at TO.
  18531. +Parsing stops at TO or when certain criteria are met;
  18532. + point is set to where parsing stops.
  18533. +If fifth arg STATE is omitted or nil,
  18534. + parsing assumes that FROM is the beginning of a function.
  18535. +Value is a list of eight elements describing final state of parsing:
  18536. + 0. depth in parens.
  18537. + 1. character address of start of innermost containing list; nil if none.
  18538. + 2. character address of start of last complete sexp terminated.
  18539. + 3. non-nil if inside a string.
  18540. +    (it is the character that will terminate the string.)
  18541. + 4. t if inside a comment.
  18542. + 5. t if following a quote character.
  18543. + 6. the minimum paren-depth encountered during this scan.
  18544. + 7. t if in a comment of style `b'.
  18545. +If third arg TARGETDEPTH is non-nil, parsing stops if the depth
  18546. +in parentheses becomes equal to TARGETDEPTH.
  18547. +Fourth arg STOPBEFORE non-nil means stop when come to
  18548. + any character that starts a sexp.
  18549. +Fifth arg STATE is an eight-list like what this function returns.
  18550. +It is used to initialize the state of the parse.  Its second and third
  18551. +elements are ignored.
  18552. +Sixth args COMMENTSTOP non-nil means stop at the start of a comment.
  18553. +
  18554. +(parse-partial-sexp FROM TO &optional TARGETDEPTH STOPBEFORE STATE COMMENTSTOP)Vparse-sexp-ignore-comments
  18555. +Non-nil means `forward-sexp', etc., should treat comments as whitespace.Vwords-include-escapes
  18556. +Non-nil means `forward-word', etc., should treat escape chars part of words.Fml-if
  18557. +Mocklisp version of `if'.Fml-nargs
  18558. +Number of arguments to currently executing mocklisp function.
  18559. +
  18560. +(ml-nargs)Fml-arg
  18561. +Argument number N to currently executing mocklisp function.
  18562. +
  18563. +(ml-arg N &optional PROMPT)Fml-interactive
  18564. +True if currently executing mocklisp function was called interactively.
  18565. +
  18566. +(ml-interactive)Fml-provide-prefix-argument
  18567. +Evaluate second argument, using first argument as prefix arg value.Fml-prefix-argument-loop
  18568. +Fml-substr
  18569. +Return a substring of STRING, starting at index FROM and of length LENGTH.
  18570. +If either FROM or LENGTH is negative, the length of STRING is added to it.
  18571. +
  18572. +(ml-substr STRING FROM TO)Finsert-string
  18573. +Mocklisp-compatibility insert function.
  18574. +Like the function `insert' except that any argument that is a number
  18575. +is converted into a string by expressing it in decimal.Fbyte-code
  18576. +Function used internally in byte-compiled code.
  18577. +The first argument is a string of byte code; the second, a vector of constants;
  18578. +the third, the maximum stack depth used in this function.
  18579. +If the third argument is incorrect, Emacs may crash.
  18580. +
  18581. +(byte-code BYTESTR VECTOR MAXDEPTH)Vbyte-code-meter
  18582. +A vector of vectors which holds a histogram of byte-code usage.
  18583. +(aref (aref byte-code-meter 0) CODE) indicates how many times the byte
  18584. +opcode CODE has been executed.
  18585. +(aref (aref byte-code-meter CODE1) CODE2), where CODE1 is not 0,
  18586. +indicates how many times the byte opcodes CODE1 and CODE2 have been
  18587. +executed in succession.Vbyte-metering-on
  18588. +If non-nil, keep profiling information on byte code usage.
  18589. +The variable byte-code-meter indicates how often each byte opcode is used.
  18590. +If a symbol has a property named `byte-code-meter' whose value is an
  18591. +integer, it is incremented each time that symbol's function is called.Fprocessp
  18592. +Return t if OBJECT is a process.
  18593. +
  18594. +(processp OBJ)Fget-process
  18595. +Return the process named NAME, or nil if there is none.
  18596. +
  18597. +(get-process NAME)Fget-buffer-process
  18598. +Return the (or, a) process associated with BUFFER.
  18599. +BUFFER may be a buffer or the name of one.
  18600. +
  18601. +(get-buffer-process NAME)Fdelete-process
  18602. +Delete PROCESS: kill it and forget about it immediately.
  18603. +PROCESS may be a process, a buffer, the name of a process or buffer, or
  18604. +nil, indicating the current buffer's process.
  18605. +
  18606. +(delete-process PROC)Fprocess-status
  18607. +Return the status of PROCESS: a symbol, one of these:
  18608. +run  -- for a process that is running.
  18609. +stop -- for a process stopped but continuable.
  18610. +exit -- for a process that has exited.
  18611. +signal -- for a process that has got a fatal signal.
  18612. +open -- for a network stream connection that is open.
  18613. +closed -- for a network stream connection that is closed.
  18614. +nil -- if arg is a process name and no such process exists.
  18615. +PROCESS may be a process, a buffer, the name of a process or buffer, or
  18616. +nil, indicating the current buffer's process.
  18617. +
  18618. +(process-status PROC)Fprocess-exit-status
  18619. +Return the exit status of PROCESS or the signal number that killed it.
  18620. +If PROCESS has not yet exited or died, return 0.
  18621. +
  18622. +(process-exit-status PROC)Fprocess-id
  18623. +Return the process id of PROCESS.
  18624. +This is the pid of the Unix process which PROCESS uses or talks to.
  18625. +For a network connection, this value is nil.
  18626. +
  18627. +(process-id PROC)Fprocess-name
  18628. +Return the name of PROCESS, as a string.
  18629. +This is the name of the program invoked in PROCESS,
  18630. +possibly modified to make it unique among process names.
  18631. +
  18632. +(process-name PROC)Fprocess-command
  18633. +Return the command that was executed to start PROCESS.
  18634. +This is a list of strings, the first string being the program executed
  18635. +and the rest of the strings being the arguments given to it.
  18636. +For a non-child channel, this is nil.
  18637. +
  18638. +(process-command PROC)Fset-process-buffer
  18639. +Set buffer associated with PROCESS to BUFFER (a buffer, or nil).
  18640. +
  18641. +(set-process-buffer PROC BUFFER)Fprocess-buffer
  18642. +Return the buffer PROCESS is associated with.
  18643. +Output from PROCESS is inserted in this buffer
  18644. +unless PROCESS has a filter.
  18645. +
  18646. +(process-buffer PROC)Fprocess-mark
  18647. +Return the marker for the end of the last output from PROCESS.
  18648. +
  18649. +(process-mark PROC)Fset-process-filter
  18650. +Give PROCESS the filter function FILTER; nil means no filter.
  18651. +t means stop accepting output from the process.
  18652. +When a process has a filter, each time it does output
  18653. +the entire string of output is passed to the filter.
  18654. +The filter gets two arguments: the process and the string of output.
  18655. +If the process has a filter, its buffer is not used for output.
  18656. +
  18657. +(set-process-filter PROC FILTER)Fprocess-filter
  18658. +Returns the filter function of PROCESS; nil if none.
  18659. +See `set-process-filter' for more info on filter functions.
  18660. +
  18661. +(process-filter PROC)Fset-process-sentinel
  18662. +Give PROCESS the sentinel SENTINEL; nil for none.
  18663. +The sentinel is called as a function when the process changes state.
  18664. +It gets two arguments: the process, and a string describing the change.
  18665. +
  18666. +(set-process-sentinel PROC SENTINEL)Fprocess-sentinel
  18667. +Return the sentinel of PROCESS; nil if none.
  18668. +See `set-process-sentinel' for more info on sentinels.
  18669. +
  18670. +(process-sentinel PROC)Fset-process-window-size
  18671. +Tell PROCESS that it has logical window size HEIGHT and WIDTH.
  18672. +
  18673. +(set-process-window-size PROC HEIGHT WIDTH)Fprocess-kill-without-query
  18674. +Say no query needed if PROCESS is running when Emacs is exited.
  18675. +Optional second argument if non-nil says to require a query.
  18676. +Value is t if a query was formerly required.
  18677. +
  18678. +(process-kill-without-query PROC &optional VALUE)Fprocess-connection
  18679. +Return the connection type of `PROCESS'.
  18680. +The value is `nil' for a pipe,
  18681. +`t' or `pty' for a pty, or `stream' for a socket connection.
  18682. +
  18683. +(process-connection PROCESS)Flist-processes
  18684. +Display a list of all processes.
  18685. +(Any processes listed as Exited or Signaled are actually eliminated
  18686. +after the listing is made.)
  18687. +
  18688. +(list-processes)Fprocess-list
  18689. +Return a list of all processes.
  18690. +
  18691. +(process-list)Fstart-process
  18692. +Start a program in a subprocess.  Return the process object for it.
  18693. +Args are NAME BUFFER PROGRAM &rest PROGRAM-ARGS
  18694. +NAME is name for process.  It is modified if necessary to make it unique.
  18695. +BUFFER is the buffer or (buffer-name) to associate with the process.
  18696. + Process output goes at end of that buffer, unless you specify
  18697. + an output stream or filter function to handle the output.
  18698. + BUFFER may be also nil, meaning that this process is not associated
  18699. + with any buffer
  18700. +Third arg is program file name.  It is searched for as in the shell.
  18701. +Remaining arguments are strings to give program as arguments.Fopen-network-stream
  18702. +Open a TCP connection for a service to a host.
  18703. +Returns a subprocess-object to represent the connection.
  18704. +Input and output work as for subprocesses; `delete-process' closes it.
  18705. +Args are NAME BUFFER HOST SERVICE.
  18706. +NAME is name for process.  It is modified if necessary to make it unique.
  18707. +BUFFER is the buffer (or buffer-name) to associate with the process.
  18708. + Process output goes at end of that buffer, unless you specify
  18709. + an output stream or filter function to handle the output.
  18710. + BUFFER may be also nil, meaning that this process is not associated
  18711. + with any buffer
  18712. +Third arg is name of the host to connect to, or its IP address.
  18713. +Fourth arg SERVICE is name of the service desired, or an integer
  18714. + specifying a port number to connect to.
  18715. +
  18716. +(open-network-stream NAME BUFFER HOST SERVICE)Faccept-process-output
  18717. +Allow any pending output from subprocesses to be read by Emacs.
  18718. +It is read into the process' buffers or given to their filter functions.
  18719. +Non-nil arg PROCESS means do not return until some output has been received
  18720. +from PROCESS.
  18721. +Non-nil second arg TIMEOUT and third arg TIMEOUT-MSECS are number of
  18722. +seconds and microseconds to wait; return after that much time whether
  18723. +or not there is input.
  18724. +Return non-nil iff we received any output before the timeout expired.
  18725. +
  18726. +(accept-process-output &optional PROC TIMEOUT TIMEOUT-MSECS)Fwaiting-for-user-input-p
  18727. +Returns non-nil if emacs is waiting for input from the user.
  18728. +This is intended for use by asynchronous process output filters and sentinels.
  18729. +
  18730. +(waiting-for-user-input-p)Fprocess-send-region
  18731. +Send current contents of region as input to PROCESS.
  18732. +PROCESS may be a process, a buffer, the name of a process or buffer, or
  18733. +nil, indicating the current buffer's process.
  18734. +Called from program, takes three arguments, PROCESS, START and END.
  18735. +If the region is more than 500 characters long,
  18736. +it is sent in several bunches.  This may happen even for shorter regions.
  18737. +Output from processes can arrive in between bunches.
  18738. +
  18739. +(process-send-region PROCESS START END)Fprocess-send-string
  18740. +Send PROCESS the contents of STRING as input.
  18741. +PROCESS may be a process, a buffer, the name of a process or buffer, or
  18742. +nil, indicating the current buffer's process.
  18743. +If STRING is more than 500 characters long,
  18744. +it is sent in several bunches.  This may happen even for shorter strings.
  18745. +Output from processes can arrive in between bunches.
  18746. +
  18747. +(process-send-string PROCESS STRING)Finterrupt-process
  18748. +Interrupt process PROCESS.  May be process or name of one.
  18749. +PROCESS may be a process, a buffer, or the name of a process or buffer.
  18750. +nil or no arg means current buffer's process.
  18751. +Second arg CURRENT-GROUP non-nil means send signal to
  18752. +the current process-group of the process's controlling terminal
  18753. +rather than to the process's own process group.
  18754. +If the process is a shell, this means interrupt current subjob
  18755. +rather than the shell.
  18756. +
  18757. +(interrupt-process &optional PROCESS CURRENT-GROUP)Fkill-process
  18758. +Kill process PROCESS.  May be process or name of one.
  18759. +See function `interrupt-process' for more details on usage.
  18760. +
  18761. +(kill-process &optional PROCESS CURRENT-GROUP)Fquit-process
  18762. +Send QUIT signal to process PROCESS.  May be process or name of one.
  18763. +See function `interrupt-process' for more details on usage.
  18764. +
  18765. +(quit-process &optional PROCESS CURRENT-GROUP)Fstop-process
  18766. +Stop process PROCESS.  May be process or name of one.
  18767. +See function `interrupt-process' for more details on usage.
  18768. +
  18769. +(stop-process &optional PROCESS CURRENT-GROUP)Fcontinue-process
  18770. +Continue process PROCESS.  May be process or name of one.
  18771. +See function `interrupt-process' for more details on usage.
  18772. +
  18773. +(continue-process &optional PROCESS CURRENT-GROUP)Fsignal-process
  18774. +Send the process with number PID the signal with code CODE.
  18775. +Both PID and CODE are integers.
  18776. +
  18777. +(signal-process PID SIG)Fprocess-send-eof
  18778. +Make PROCESS see end-of-file in its input.
  18779. +Eof comes after any text already sent to it.
  18780. +PROCESS may be a process, a buffer, the name of a process or buffer, or
  18781. +nil, indicating the current buffer's process.
  18782. +If PROCESS is a network connection, or is a process communicating
  18783. +through a pipe (as opposed to a pty), then you cannot send any more
  18784. +text to PROCESS after you call this function.
  18785. +
  18786. +(process-send-eof &optional PROCESS)Vdelete-exited-processes
  18787. +*Non-nil means delete processes immediately when they exit.
  18788. +nil means don't delete them until `list-processes' is run.Vprocess-connection-type
  18789. +Control type of device used to communicate with subprocesses.
  18790. +Values are nil to use a pipe, or t or `pty' to use a pty.
  18791. +The value has no effect if the system has no ptys or if all ptys are busy:
  18792. +then a pipe is used in any case.
  18793. +The value takes effect when `start-process' is called.Fcall-process
  18794. +Call PROGRAM synchronously in separate process.
  18795. +The program's input comes from file INFILE (nil means `/dev/null').
  18796. +Insert output in BUFFER before point; t means current buffer;
  18797. + nil for BUFFER means discard it; 0 means discard and don't wait.
  18798. +Fourth arg DISPLAY non-nil means redisplay buffer as output is inserted.
  18799. +Remaining arguments are strings passed as command arguments to PROGRAM.
  18800. +If BUFFER is 0, returns immediately with value nil.
  18801. +Otherwise waits for PROGRAM to terminate
  18802. +and returns a numeric exit status or a signal description string.
  18803. +If you quit, the process is killed with SIGINT, or SIGKILL if you quit again.Fcall-process-region
  18804. +Send text from START to END to a synchronous process running PROGRAM.
  18805. +Delete the text if fourth arg DELETE is non-nil.
  18806. +Insert output in BUFFER before point; t means current buffer;
  18807. + nil for BUFFER means discard it; 0 means discard and don't wait.
  18808. +Sixth arg DISPLAY non-nil means redisplay buffer as output is inserted.
  18809. +Remaining args are passed to PROGRAM at startup as command args.
  18810. +If BUFFER is nil, returns immediately with value nil.
  18811. +Otherwise waits for PROGRAM to terminate
  18812. +and returns a numeric exit status or a signal description string.
  18813. +If you quit, the process is killed with SIGINT, or SIGKILL if you quit again.Fgetenv
  18814. +Return the value of environment variable VAR, as a string.
  18815. +VAR should be a string.  Value is nil if VAR is undefined in the environment.
  18816. +This function consults the variable ``process-environment'' for its value.
  18817. +
  18818. +(getenv VAR)Vbinary-process-input
  18819. +*If non-nil then new subprocesses are assumed to take binary input.Vbinary-process-output
  18820. +*If non-nil then new subprocesses are assumed to produce binary output.Vshell-file-name
  18821. +*File name to load inferior shells from.
  18822. +Initialized from the SHELL environment variable.Vexec-path
  18823. +*List of directories to search programs to run in subprocesses.
  18824. +Each element is a string (directory name) or nil (try default directory).Vexec-directory
  18825. +Directory of architecture-dependent files that come with GNU Emacs,
  18826. +especially executable programs intended for Emacs to invoke.Vdata-directory
  18827. +Directory of architecture-independent files that come with GNU Emacs,
  18828. +intended for Emacs to use.Vdoc-directory
  18829. +Directory containing the DOC file that comes with GNU Emacs.
  18830. +This is usually the same as data-directory.Vconfigure-info-directory
  18831. +For internal use by the build procedure only.
  18832. +This is the name of the directory in which the build procedure installed
  18833. +Emacs's info files; the default value for Info-default-directory-list
  18834. +includes this.Vprocess-environment
  18835. +List of environment variables for subprocesses to inherit.
  18836. +Each element should be a string of the form ENVVARNAME=VALUE.
  18837. +The environment which Emacs inherits is placed in this variable
  18838. +when Emacs starts.Famiga-cut
  18839. +Copy string into Amiga clipboard.
  18840. +
  18841. +(amiga-cut ARG)Famiga-paste
  18842. +Returns text currently in the Amiga clipboard, or NIL if there is none.
  18843. +
  18844. +(amiga-paste)Vamiga-new-clip
  18845. +Set to t every time a new clip is put in the Amiga clipboardFamiga-put-icon
  18846. +Create an icon for FILE.
  18847. +If FORCE is non-nil create it unconditionally, otherwise only if one doesn't exist.
  18848. +Returns t if an icon was created, nil otherwise.
  18849. +
  18850. +(amiga-put-icon FILE FORCE)Vamiga-initialized
  18851. +Vamiga-malloc-bytes-used
  18852. +Number of malloc bytes used when emacs was dumpedVamiga-create-icons
  18853. +If non-nil, create icons when saving files.Vamiga-process-stack-size
  18854. +Size of stack for called processes. 0 means same size as emacs stack.Famiga-mouse-events
  18855. +Return number of pending mouse events from Intuition.
  18856. +
  18857. +(amiga-mouse-events)Famiga-proc-mouse-event
  18858. +Pulls a mouse event out of the mouse event buffer and dispatches
  18859. +the appropriate function to act upon this event.
  18860. +
  18861. +(amiga-proc-mouse-event)Famiga-get-mouse-event
  18862. +Get next mouse event out of mouse event buffer (com-letter (x y)).
  18863. +ARG non-nil means return nil immediately if no pending event;
  18864. +otherwise, wait for an event.
  18865. +
  18866. +(amiga-get-mouse-event ARG)Famiga-get-wb-event
  18867. +Get next Workbench event out of workbench event buffer (a file name).
  18868. +ARG non-nil means return nil immediately if no pending event;
  18869. +otherwise, wait for an event.
  18870. +
  18871. +(amiga-get-wb-event ARG)Famiga-set-foreground-color
  18872. +Use PEN as foreground color
  18873. +
  18874. +(amiga-set-foreground-color PEN)Famiga-set-background-color
  18875. +Use PEN as background color
  18876. +
  18877. +(amiga-set-background-color PEN)Famiga-set-inverse-fill-pen
  18878. +Use PEN's color for inverse fills (0-7 or 8 for reverse)
  18879. +
  18880. +(amiga-set-inverse-fill-pen PEN)Famiga-set-inverse-text-pen
  18881. +Use PEN's color for inverse fills (0-7 or 8 for reverse)
  18882. +
  18883. +(amiga-set-inverse-text-pen PEN)Famiga-set-font
  18884. +Set font used for window to FONT with given HEIGHT.
  18885. +The font used must be non-proportional.
  18886. +
  18887. +(amiga-set-font WFONT HEIGHT)Famiga-set-geometry
  18888. +Set Emacs window geometry and screen.
  18889. +First 4 parameters are the (X,Y) position of the top-left corner of the window
  18890. +and its WIDTH and HEIGHT. These must be big enough for an 11x4 characters window.
  18891. +If nil is given for any of these, that means to keep the same value as before.
  18892. +The optional argument SCREEN specifies which screen to use, nil stands for the
  18893. +same screen as the window is on, t stands for the default public screen (normally
  18894. +the Workbench), a string specifies a given public screen.
  18895. +If optional argument BACKDROP is t, a backdrop window is used.Famiga-get-window-geometry
  18896. +Get Emacs window geometry.
  18897. +a list returned is of the form:  (iconified x y width height backdrop)
  18898. +where x, y, width, height are integers, backdrop is t or nil and iconified
  18899. +is t if the window is iconified and nil otherwise
  18900. +
  18901. +(amiga-get-window-geometry)Famiga-get-screen-geometry
  18902. +Get geometry of the screen emacs window resides on.
  18903. +a list returned is of the form:  (name x y width height)
  18904. +where name is a string, x, y, width, height are integers.
  18905. +Only the public screen name is returned if the window is not currently open.
  18906. +In this last case, the name may be nil if the window will be opened on the
  18907. +default public screen.
  18908. +
  18909. +(amiga-get-screen-geometry)Famiga-iconify
  18910. +Toggle the emacs iconification state.
  18911. +
  18912. +(amiga-iconify)Famiga-set-icon-pos
  18913. +Set the X Y position of the icon for emacs when iconified.
  18914. +
  18915. +(amiga-set-icon-pos LISP-OBJECT X LISP-OBJECT Y)Famiga-activate-window
  18916. +Makes emacs window the currently active one.
  18917. +
  18918. +(amiga-activate-window)Famiga-window-to-front
  18919. +Pulls the emacs window to the front (including screen)
  18920. +
  18921. +(amiga-window-to-front)Famiga-window-to-back
  18922. +Pushes the emacs window to the back (including screen)
  18923. +
  18924. +(amiga-window-to-back)Famiga-popup-font-request
  18925. +Open an ASL Font Requester and return the value as cons of font name and font size.
  18926. +
  18927. +(amiga-popup-font-request)Vamiga-mouse-item
  18928. +Encoded representation of last mouse click, corresponding to
  18929. +numerical entries in amiga-mouse-map.Vamiga-mouse-pos
  18930. +Current x-y position of mouse by row, column as specified by font.Vamiga-remap-bsdel
  18931. +*If true, map DEL to Ctrl-D and Backspace to DEL. 
  18932. +This is the most convenient (and default) setting. If nil, don't remap.Vamiga-remap-numeric-keypad
  18933. +*If true, numeric keypad keys are prefixed with C-x C-^ K.
  18934. +This enables you to remap them, but causes problems with functions like
  18935. +isearch-forward-regexp on some keyboards. Default to true.Vamiga-mouse-initialized
  18936. +Set to true once lisp has been setup to process mouse commands.
  18937. +No mouse processing request (C-X C-^ M) will be queued while this is nil.Vamiga-wb-initialized
  18938. +Set to true once lisp has been setup to process workbench commands.
  18939. +No workbench processing request (C-X C-^ W) will be queued while this is nil.Famiga-arexx-wait
  18940. +Wait for an ARexx event (command or reply) before proceeding.
  18941. +
  18942. +(amiga-arexx-wait)Famiga-arexx-check-command
  18943. +Return t if command ID has finished, nil otherwise.
  18944. +
  18945. +(amiga-arexx-check-command ID)Famiga-arexx-get-next-msg
  18946. +Returns the oldest arexx msg sent to emacs rexx port.
  18947. +When you are through with this message call (amiga-arexx-reply).
  18948. +if the msg is not replied this function will continue to
  18949. +return that msg until it has been replied to.
  18950. +
  18951. +(amiga-arexx-get-next-msg)Famiga-arexx-get-msg-results
  18952. +Returns the results from MSGID. will be a list of the form:
  18953. +  (msgid resultcode secondary)
  18954. +
  18955. +If resultcode is 0 then secondary will be a string or nil.
  18956. +else resulcode will be greater than 0 and secondary will be
  18957. +an error-code (int).
  18958. +
  18959. +If MSGID has not yet completed nil is returned.
  18960. +if MSGID has been dealt with or is invalid and error will occur.
  18961. +
  18962. +(amiga-arexx-get-msg-results MSGID)Famiga-arexx-reply
  18963. +Replies to the first arexx message (the one got via amiga-arexx-get-event)
  18964. +with RC as return code.
  18965. +If RC=0, TEXT is the result, otherwise it is the error text. It can be nil.
  18966. +
  18967. +(amiga-arexx-reply RC TEXT)Famiga-arexx-send-command
  18968. +Sends a command to ARexx for execution.
  18969. +If the second arg is non-nil, the command is directly interpreted.
  18970. +Returns an integer that uniquely identifies this message.  This must
  18971. +then be used to get the results from the command.
  18972. +NOTE: this is very different from old way things worked.
  18973. +      earlier versions of emacs discarded successful results
  18974. +      and errors always got replied to becuase they caused failures
  18975. +      Neither of these are true now.This function is also no longer interactive.
  18976. +Use (amiga-arexx-do-command)
  18977. +
  18978. +
  18979. +(amiga-arexx-send-command STR &optional AS-FILE)Vamiga-arexx-initialized
  18980. +Set this to t when Emacs is ready to respond to ARexx messages.
  18981. +Fsun-window-init
  18982. +One time setup for using Sun Windows with mouse.
  18983. +Unless optional argument FORCE is non-nil, is a noop after its first call.
  18984. +Returns a number representing the file descriptor of the open Sun Window,
  18985. +or -1 if can not open it.
  18986. +
  18987. +(sun-window-init &optional FORCE)Fsit-for-millisecs
  18988. +Like sit-for, but ARG is milliseconds. 
  18989. +Perform redisplay, then wait for ARG milliseconds or until
  18990. +input is available.  Returns t if wait completed with no input.
  18991. +Redisplay does not happen if input is available before it starts.
  18992. +
  18993. +(sit-for-millisecs N)Fsleep-for-millisecs
  18994. +Pause, without updating display, for ARG milliseconds.
  18995. +
  18996. +(sleep-for-millisecs N)Fupdate-display
  18997. +Perform redisplay.
  18998. +
  18999. +(update-display)Fsun-change-cursor-icon
  19000. +Change the Sun mouse cursor icon.  ICON is a lisp vector whose 1st element
  19001. +is the X offset of the cursor hot-point, whose 2nd element is the Y offset
  19002. +of the cursor hot-point and whose 3rd element is the cursor pixel data
  19003. +expressed as a string.  If ICON is nil then the original arrow cursor is used
  19004. +
  19005. +(sun-change-cursor-icon ICON)Fsun-set-selection
  19006. +Set the current sunwindow selection to STRING.
  19007. +
  19008. +(sun-set-selection STR)Fsun-get-selection
  19009. +Return the current sunwindows selection as a string.
  19010. +
  19011. +(sun-get-selection)Fsun-menu-internal
  19012. +Set up a SunView pop-up menu and return the user's choice.
  19013. +Arguments WINDOW, X, Y, BUTTON, and MENU.
  19014. +*** User code should generally use sun-menu-evaluate ***
  19015. +
  19016. +Arguments WINDOW, X, Y, BUTTON, and MENU.
  19017. +Put MENU up in WINDOW at position X, Y.
  19018. +The BUTTON argument specifies the button to be released that selects an item:
  19019. +   1 = LEFT BUTTON
  19020. +   2 = MIDDLE BUTTON
  19021. +   4 = RIGHT BUTTON
  19022. +The MENU argument is a vector containing (STRING . VALUE) pairs.
  19023. +The VALUE of the selected item is returned.
  19024. +If the VALUE of the first pair is nil, then the first STRING will be used
  19025. +as a menu label.
  19026. +
  19027. +(sun-menu-internal WINDOW X-POSITION Y-POSITION BUTTON MENU)Vonly-global-abbrevs
  19028. +*t means user plans to use global abbrevs only.
  19029. +Makes the commands to define mode-specific abbrevs define global ones instead.Fabbrev-mode
  19030. +Toggle abbrev mode.
  19031. +With argument ARG, turn abbrev mode on iff ARG is positive.
  19032. +In abbrev mode, inserting an abbreviation causes it to expand
  19033. +and be replaced by its expansion.Vedit-abbrevs-map
  19034. +Keymap used in edit-abbrevs.Fkill-all-abbrevs
  19035. +Undefine all defined abbrevs.Finsert-abbrevs
  19036. +Insert after point a description of all defined abbrevs.
  19037. +Mark is set after the inserted text.Flist-abbrevs
  19038. +Display a list of all defined abbrevs.Fedit-abbrevs-mode
  19039. +Major mode for editing the list of abbrev definitions.
  19040. +\{edit-abbrevs-map}Fedit-abbrevs
  19041. +Alter abbrev definitions by editing a list of them.
  19042. +Selects a buffer containing a list of abbrev definitions.
  19043. +You can edit them and type \<edit-abbrevs-map>\[edit-abbrevs-redefine] to redefine abbrevs
  19044. +according to your editing.
  19045. +Buffer contains a header line for each abbrev table,
  19046. + which is the abbrev table name in parentheses.
  19047. +This is followed by one line per abbrev in that table:
  19048. +NAME   USECOUNT   EXPANSION   HOOK
  19049. +where NAME and EXPANSION are strings with quotes,
  19050. +USECOUNT is an integer, and HOOK is any valid function
  19051. +or may be omitted (it is usually omitted).Fedit-abbrevs-redefine
  19052. +Redefine abbrevs according to current buffer contents.Fdefine-abbrevs
  19053. +Define abbrevs according to current visible buffer contents.
  19054. +See documentation of `edit-abbrevs' for info on the format of the
  19055. +text you must have in the buffer.
  19056. +With argument, eliminate all abbrev definitions except
  19057. +the ones defined from the buffer now.Fread-abbrev-file
  19058. +Read abbrev definitions from file written with `write-abbrev-file'.
  19059. +Optional argument FILE is the name of the file to read;
  19060. +it defaults to the value of `abbrev-file-name'.
  19061. +Optional second argument QUIETLY non-nil means don't print anything.Fquietly-read-abbrev-file
  19062. +Read abbrev definitions from file written with write-abbrev-file.
  19063. +Optional argument FILE is the name of the file to read;
  19064. +it defaults to the value of `abbrev-file-name'.
  19065. +Does not print anything.Fwrite-abbrev-file
  19066. +Write all abbrev definitions to a file of Lisp code.
  19067. +The file written can be loaded in another session to define the same abbrevs.
  19068. +The argument FILE is the file name to write.Fadd-mode-abbrev
  19069. +Define mode-specific abbrev for last word(s) before point.
  19070. +Argument is how many words before point form the expansion;
  19071. +or zero means the region is the expansion.
  19072. +A negative argument means to undefine the specified abbrev.
  19073. +Reads the abbreviation in the minibuffer.
  19074. +
  19075. +Don't use this function in a Lisp program; use `define-abbrev' instead.Fadd-global-abbrev
  19076. +Define global (all modes) abbrev for last word(s) before point.
  19077. +The prefix argument specifies the number of words before point that form the
  19078. +expansion; or zero means the region is the expansion.
  19079. +A negative argument means to undefine the specified abbrev.
  19080. +This command uses the minibuffer to read the abbreviation.
  19081. +
  19082. +Don't use this function in a Lisp program; use `define-abbrev' instead.Finverse-add-mode-abbrev
  19083. +Define last word before point as a mode-specific abbrev.
  19084. +With prefix argument N, defines the Nth word before point.
  19085. +This command uses the minibuffer to read the expansion.
  19086. +Expands the abbreviation after defining it.Finverse-add-global-abbrev
  19087. +Define last word before point as a global (mode-independent) abbrev.
  19088. +With prefix argument N, defines the Nth word before point.
  19089. +This command uses the minibuffer to read the expansion.
  19090. +Expands the abbreviation after defining it.Fabbrev-prefix-mark
  19091. +Mark current point as the beginning of an abbrev.
  19092. +Abbrev to be expanded starts here rather than at beginning of word.
  19093. +This way, you can expand an abbrev with a prefix: insert the prefix,
  19094. +use this command, then insert the abbrev.Fexpand-region-abbrevs
  19095. +For abbrev occurrence in the region, offer to expand it.
  19096. +The user is asked to type y or n for each occurrence.
  19097. +A prefix argument means don't query; expand all abbrevs.
  19098. +If called from a Lisp program, arguments are START END &optional NOQUERY.VBuffer-menu-mode-map
  19099. +FBuffer-menu-mode
  19100. +Major mode for editing a list of buffers.
  19101. +Each line describes one of the buffers in Emacs.
  19102. +Letters do not insert themselves; instead, they are commands.
  19103. +\<Buffer-menu-mode-map>
  19104. +\[Buffer-menu-mouse-select] -- select buffer you click on, in place of the buffer menu.
  19105. +\[Buffer-menu-this-window] -- select current line's buffer in place of the buffer menu.
  19106. +\[Buffer-menu-other-window] -- select that buffer in another window,
  19107. +  so the buffer menu buffer remains visible in its window.
  19108. +\[Buffer-menu-switch-other-window] -- make another window display that buffer.
  19109. +\[Buffer-menu-mark] -- mark current line's buffer to be displayed.
  19110. +\[Buffer-menu-select] -- select current line's buffer.
  19111. +  Also show buffers marked with m, in other windows.
  19112. +\[Buffer-menu-1-window] -- select that buffer in full-frame window.
  19113. +\[Buffer-menu-2-window] -- select that buffer in one window,
  19114. +  together with buffer selected before this one in another window.
  19115. +\[Buffer-menu-visit-tags-table] -- visit-tags-table this buffer.
  19116. +\[Buffer-menu-not-modified] -- clear modified-flag on that buffer.
  19117. +\[Buffer-menu-save] -- mark that buffer to be saved, and move down.
  19118. +\[Buffer-menu-delete] -- mark that buffer to be deleted, and move down.
  19119. +\[Buffer-menu-delete-backwards] -- mark that buffer to be deleted, and move up.
  19120. +\[Buffer-menu-execute] -- delete or save marked buffers.
  19121. +\[Buffer-menu-unmark] -- remove all kinds of marks from current line.
  19122. +  With prefix argument, also move up one line.
  19123. +\[Buffer-menu-backup-unmark] -- back up a line and remove marks.
  19124. +\[Buffer-menu-toggle-read-only] -- toggle read-only status of buffer on this line.FBuffer-menu-buffer
  19125. +Return buffer described by this line of buffer menu.Fbuffer-menu
  19126. +Make a menu of buffers so you can save, delete or select them.
  19127. +With argument, show only buffers that are visiting files.
  19128. +Type ? after invocation to get help on commands available.
  19129. +Type q immediately to make the buffer menu go away and to restore
  19130. +previous window configuration.FBuffer-menu-quit
  19131. +Quit the buffer menu.FBuffer-menu-mark
  19132. +Mark buffer on this line for being displayed by \<Buffer-menu-mode-map>\[Buffer-menu-select] command.FBuffer-menu-unmark
  19133. +Cancel all requested operations on buffer on this line and move down.
  19134. +Optional ARG means move up.FBuffer-menu-backup-unmark
  19135. +Move up and cancel all requested operations on buffer on line above.FBuffer-menu-delete
  19136. +Mark buffer on this line to be deleted by \<Buffer-menu-mode-map>\[Buffer-menu-execute] command.FBuffer-menu-delete-backwards
  19137. +Mark buffer on this line to be deleted by \<Buffer-menu-mode-map>\[Buffer-menu-execute] command
  19138. +and then move up one lineFBuffer-menu-save
  19139. +Mark buffer on this line to be saved by \<Buffer-menu-mode-map>\[Buffer-menu-execute] command.FBuffer-menu-not-modified
  19140. +Mark buffer on this line as unmodified (no changes to save).FBuffer-menu-execute
  19141. +Save and/or delete buffers marked with \<Buffer-menu-mode-map>\[Buffer-menu-save] or \<Buffer-menu-mode-map>\[Buffer-menu-delete] commands.FBuffer-menu-select
  19142. +Select this line's buffer; also display buffers marked with `>'.
  19143. +You can mark buffers with the \<Buffer-menu-mode-map>\[Buffer-menu-mark] command.FBuffer-menu-visit-tags-table
  19144. +Visit the tags table in the buffer on this line.  See `visit-tags-table'.FBuffer-menu-1-window
  19145. +Select this line's buffer, alone, in full frame.FBuffer-menu-mouse-select
  19146. +Select the buffer whose line you click on.FBuffer-menu-this-window
  19147. +Select this line's buffer in this window.FBuffer-menu-other-window
  19148. +Select this line's buffer in other window, leaving buffer menu visible.FBuffer-menu-switch-other-window
  19149. +Make the other window select this line's buffer.
  19150. +The current window remains selected.FBuffer-menu-2-window
  19151. +Select this line's buffer, with previous buffer in second window.FBuffer-menu-toggle-read-only
  19152. +Toggle read-only status of buffer on this line, perhaps via version control.Fdefsubst
  19153. +Define an inline function.  The syntax is just like that of `defun'.Fmake-obsolete
  19154. +Make the byte-compiler warn that FUNCTION is obsolete.
  19155. +The warning will say that NEW should be used instead.
  19156. +If NEW is a string, that is the `use instead' message.Fmake-obsolete-variable
  19157. +Make the byte-compiler warn that VARIABLE is obsolete,
  19158. +and NEW should be used instead.  If NEW is a string, then that is the
  19159. +`use instead' message.Fdont-compile
  19160. +Like `progn', but the body always runs interpreted (not compiled).
  19161. +If you think you need this, you're probably making a mistake somewhere.Feval-when-compile
  19162. +Like `progn', but evaluates the body at compile time.
  19163. +The result of the body appears to the compiler as a quoted constant.Feval-and-compile
  19164. +Like `progn', but evaluates the body at compile time and at load time.Vc-mode-abbrev-table
  19165. +Abbrev table in use in C mode.Vc-mode-map
  19166. +Keymap used in C mode.Fc-macro-expand
  19167. +Display the result of expanding all C macros occurring in the region.
  19168. +The expansion is entirely correct because it uses the C preprocessor.Vc-mode-syntax-table
  19169. +Syntax table in use in C-mode buffers.Vc-indent-level
  19170. +*Indentation of C statements with respect to containing block.Vc-brace-imaginary-offset
  19171. +*Imagined indentation of a C open brace that actually follows a statement.Vc-brace-offset
  19172. +*Extra indentation for braces, compared with other text in same context.Vc-argdecl-indent
  19173. +*Indentation level of declarations of C function arguments.Vc-label-offset
  19174. +*Offset of C label lines and case statements relative to usual indentation.Vc-continued-statement-offset
  19175. +*Extra indent for lines not starting new statements.Vc-continued-brace-offset
  19176. +*Extra indent for substatements that start with open-braces.
  19177. +This is in addition to c-continued-statement-offset.Vc-auto-newline
  19178. +*Non-nil means automatically newline before and after braces,
  19179. +and after colons and semicolons, inserted in C code.
  19180. +If you do not want a leading newline before braces then use:
  19181. +  (define-key c-mode-map "{" 'electric-c-semi)Vc-tab-always-indent
  19182. +*Non-nil means TAB in C mode should always reindent the current line,
  19183. +regardless of where in the line point is when the TAB command is used.Fc-mode
  19184. +Major mode for editing C code.
  19185. +Expression and list commands understand all C brackets.
  19186. +Tab indents for C code.
  19187. +Comments are delimited with /* ... */.
  19188. +Paragraphs are separated by blank lines only.
  19189. +Delete converts tabs to spaces as it moves back.
  19190. +\{c-mode-map}
  19191. +Variables controlling indentation style:
  19192. + c-tab-always-indent
  19193. +    Non-nil means TAB in C mode should always reindent the current line,
  19194. +    regardless of where in the line point is when the TAB command is used.
  19195. + c-auto-newline
  19196. +    Non-nil means automatically newline before and after braces,
  19197. +    and after colons and semicolons, inserted in C code.
  19198. + c-indent-level
  19199. +    Indentation of C statements within surrounding block.
  19200. +    The surrounding block's indentation is the indentation
  19201. +    of the line on which the open-brace appears.
  19202. + c-continued-statement-offset
  19203. +    Extra indentation given to a substatement, such as the
  19204. +    then-clause of an if or body of a while.
  19205. + c-continued-brace-offset
  19206. +    Extra indentation given to a brace that starts a substatement.
  19207. +    This is in addition to c-continued-statement-offset.
  19208. + c-brace-offset
  19209. +    Extra indentation for line if it starts with an open brace.
  19210. + c-brace-imaginary-offset
  19211. +    An open brace following other text is treated as if it were
  19212. +    this far to the right of the start of its line.
  19213. + c-argdecl-indent
  19214. +    Indentation level of declarations of C function arguments.
  19215. + c-label-offset
  19216. +    Extra indentation for line that is a label, or case or default.
  19217. +
  19218. +Settings for K&R and BSD indentation styles are
  19219. +  c-indent-level                5    8
  19220. +  c-continued-statement-offset  5    8
  19221. +  c-brace-offset               -5   -8
  19222. +  c-argdecl-indent              0    8
  19223. +  c-label-offset               -5   -8
  19224. +
  19225. +Turning on C mode calls the value of the variable c-mode-hook with no args,
  19226. +if that value is non-nil.Fc-fill-paragraph
  19227. +Like \[fill-paragraph] but handle C comments.
  19228. +If any of the current line is a comment or within a comment,
  19229. +fill the comment or the paragraph of it that point is in,
  19230. +preserving the comment indentation or line-starting decorations.Felectric-c-brace
  19231. +Insert character and correct line's indentation.Felectric-c-sharp-sign
  19232. +Insert character and correct line's indentation.Felectric-c-semi
  19233. +Insert character and correct line's indentation.Felectric-c-terminator
  19234. +Insert character and correct line's indentation.Fc-indent-command
  19235. +Indent current line as C code, or in some cases insert a tab character.
  19236. +If `c-tab-always-indent' is non-nil (the default), always indent current line.
  19237. +Otherwise, indent the current line only if point is at the left margin or
  19238. +in the line's indentation; otherwise insert a tab.
  19239. +
  19240. +A numeric argument, regardless of its value, means indent rigidly all the
  19241. +lines of the expression starting after point so that this line becomes
  19242. +properly indented.  The relative indentation among the lines of the
  19243. +expression are preserved.Fc-indent-line
  19244. +Indent current line as C code.
  19245. +Return the amount the indentation changed by.Fcalculate-c-indent
  19246. +Return appropriate indentation for current line as C code.
  19247. +In usual case returns an integer: the column to indent to.
  19248. +Returns nil if line starts inside a string, t if in a comment.Fcalculate-c-indent-within-comment
  19249. +Return the indentation amount for line inside a block comment.
  19250. +Optional arg AFTER-STAR means, if lines in the comment have a leading star,
  19251. +return the indentation of the text that would follow this star.Fc-backward-to-start-of-if
  19252. +Move to the start of the last "unbalanced" `if'.Fc-backward-to-start-of-do
  19253. +If point follows a `do' statement, move to beginning of it and return t.
  19254. +Otherwise return nil and don't move point.Fc-beginning-of-statement
  19255. +Go to the beginning of the innermost C statement.
  19256. +With prefix arg, go back N - 1 statements.  If already at the beginning of a
  19257. +statement then go to the beginning of the preceding one.
  19258. +If within a string or comment, or next to a comment (only whitespace between),
  19259. +move by sentences instead of statements.Fc-end-of-statement
  19260. +Go to the end of the innermost C statement.
  19261. +With prefix arg, go forward N - 1 statements.
  19262. +Move forward to end of the next statement if already at end.
  19263. +If within a string or comment, move by sentences instead of statements.Fmark-c-function
  19264. +Put mark at end of C function, point at beginning.Findent-c-exp
  19265. +Indent each line of the C grouping following point.Fset-c-style
  19266. +Set C-mode variables to use one of several different indentation styles.
  19267. +The arguments are a string representing the desired style
  19268. +and a flag which, if non-nil, means to set the style globally.
  19269. +(Interactively, the flag comes from the prefix argument.)
  19270. +Available styles are GNU, K&R, BSD and Whitesmith.Vc-backslash-column
  19271. +*Minimum column for end-of-line backslashes of macro definitions.Fc-backslash-region
  19272. +Insert, align, or delete end-of-line backslashes on the lines in the region.
  19273. +With no argument, inserts backslashes and aligns existing backslashes.
  19274. +With an argument, deletes the backslashes.
  19275. +
  19276. +This function does not modify the last line of the region if the region ends 
  19277. +right at the start of the following line; it does not modify blank lines
  19278. +at the start of the region.  So you can put the region around an entire macro
  19279. +definition and conveniently use this command.Fc-up-conditional
  19280. +Move back to the containing preprocessor conditional, leaving mark behind.
  19281. +A prefix argument acts as a repeat count.  With a negative argument,
  19282. +move forward to the end of the containing preprocessor conditional.
  19283. +When going backwards, `#elif' is treated like `#else' followed by `#if'.
  19284. +When going forwards, `#elif' is ignored.Fc-backward-conditional
  19285. +Move back across a preprocessor conditional, leaving mark behind.
  19286. +A prefix argument acts as a repeat count.  With a negative argument,
  19287. +move forward across a preprocessor conditional.Fc-forward-conditional
  19288. +Move forward across a preprocessor conditional, leaving mark behind.
  19289. +A prefix argument acts as a repeat count.  With a negative argument,
  19290. +move backward across a preprocessor conditional.Vdelete-auto-save-files
  19291. +*Non-nil means delete auto-save file when a buffer is saved or killed.Vdirectory-abbrev-alist
  19292. +*Alist of abbreviations for file directories.
  19293. +A list of elements of the form (FROM . TO), each meaning to replace
  19294. +FROM with TO when it appears in a directory name.  This replacement is
  19295. +done when setting up the default directory of a newly visited file.
  19296. +*Every* FROM string should start with `^'.
  19297. +
  19298. +Do not use `~' in the TO strings.
  19299. +They should be ordinary absolute directory names.
  19300. +
  19301. +Use this feature when you have directories which you normally refer to
  19302. +via absolute symbolic links.  Make TO the name of the link, and FROM
  19303. +the name it is linked to.Vmake-backup-files
  19304. +*Non-nil means make a backup of a file the first time it is saved.
  19305. +This can be done by renaming the file or by copying.
  19306. +
  19307. +Renaming means that Emacs renames the existing file so that it is a
  19308. +backup file, then writes the buffer into a new file.  Any other names
  19309. +that the old file had will now refer to the backup file.  The new file
  19310. +is owned by you and its group is defaulted.
  19311. +
  19312. +Copying means that Emacs copies the existing file into the backup
  19313. +file, then writes the buffer on top of the existing file.  Any other
  19314. +names that the old file had will now refer to the new (edited) file.
  19315. +The file's owner and group are unchanged.
  19316. +
  19317. +The choice of renaming or copying is controlled by the variables
  19318. +`backup-by-copying', `backup-by-copying-when-linked' and
  19319. +`backup-by-copying-when-mismatch'.  See also `backup-inhibited'.Vbackup-inhibited
  19320. +Non-nil means don't make a backup, regardless of the other parameters.
  19321. +This variable is intended for use by making it local to a buffer.
  19322. +But it is local only if you make it local.Vbackup-by-copying
  19323. +*Non-nil means always use copying to create backup files.
  19324. +See documentation of variable `make-backup-files'.Vbackup-by-copying-when-linked
  19325. +*Non-nil means use copying to create backups for files with multiple names.
  19326. +This causes the alternate names to refer to the latest version as edited.
  19327. +This variable is relevant only if `backup-by-copying' is nil.Vbackup-by-copying-when-mismatch
  19328. +*Non-nil means create backups by copying if this preserves owner or group.
  19329. +Renaming may still be used (subject to control of other variables)
  19330. +when it would not result in changing the owner or group of the file;
  19331. +that is, for files which are owned by you and whose group matches
  19332. +the default for a new file created there by you.
  19333. +This variable is relevant only if `backup-by-copying' is nil.Vbackup-enable-predicate
  19334. +Predicate that looks at a file name and decides whether to make backups.
  19335. +Called with an absolute file name as argument, it returns t to enable backup.Vbuffer-offer-save
  19336. +*Non-nil in a buffer means offer to save the buffer on exit
  19337. +even if the buffer is not visiting a file.
  19338. +Automatically local in all buffers.Vfind-file-existing-other-name
  19339. +*Non-nil means find a file under alternative names, in existing buffers.
  19340. +This means if any existing buffer is visiting the file you want
  19341. +under another name, you get the existing buffer instead of a new buffer.Vfind-file-visit-truename
  19342. +*Non-nil means visit a file under its truename.
  19343. +The truename of a file is found by chasing all links
  19344. +both at the file level and at the levels of the containing directories.Vbuffer-file-truename
  19345. +The abbreviated truename of the file visited in the current buffer.
  19346. +That is, (abbreviated-file-name (file-truename buffer-file-name)).
  19347. +This variable is automatically local in all buffers, when non-nil.Vbuffer-file-number
  19348. +The device number and file number of the file visited in the current buffer.
  19349. +The value is a list of the form (FILENUM DEVNUM).
  19350. +This pair of numbers uniquely identifies the file.
  19351. +If the buffer is visiting a new file, the value is nil.Vfile-precious-flag
  19352. +*Non-nil means protect against I/O errors while saving files.
  19353. +Some modes set this non-nil in particular buffers.Vversion-control
  19354. +*Control use of version numbers for backup files.
  19355. +t means make numeric backup versions unconditionally.
  19356. +nil means make them for files that have some already.
  19357. +`never' means do not make them.Vdired-kept-versions
  19358. +*When cleaning directory, number of versions to keep.Vdelete-old-versions
  19359. +*If t, delete excess backup versions silently.
  19360. +If nil, ask confirmation.  Any other value prevents any trimming.Vkept-old-versions
  19361. +*Number of oldest versions to keep when a new numbered backup is made.Vkept-new-versions
  19362. +*Number of newest versions to keep when a new numbered backup is made.
  19363. +Includes the new backup.  Must be > 0Vrequire-final-newline
  19364. +*Value of t says silently ensure a file ends in a newline when it is saved.
  19365. +Non-nil but not t says ask user whether to add a newline when there isn't one.
  19366. +nil means don't add newlines.Vauto-save-default
  19367. +*Non-nil says by default do auto-saving of every file-visiting buffer.Vauto-save-visited-file-name
  19368. +*Non-nil says auto-save a buffer in the file it is visiting, when practical.
  19369. +Normally auto-save files are written under other names.Vsave-abbrevs
  19370. +*Non-nil means save word abbrevs too when files are saved.
  19371. +Loading an abbrev file sets this to t.Vfind-file-run-dired
  19372. +*Non-nil says run dired if `find-file' is given the name of a directory.Vfind-file-not-found-hooks
  19373. +List of functions to be called for `find-file' on nonexistent file.
  19374. +These functions are called as soon as the error is detected.
  19375. +`buffer-file-name' is already set up.
  19376. +The functions are called in the order given until one of them returns non-nil.Vfind-file-hooks
  19377. +List of functions to be called after a buffer is loaded from a file.
  19378. +The buffer's local variables (if any) will have been processed before the
  19379. +functions are called.Vwrite-file-hooks
  19380. +List of functions to be called before writing out a buffer to a file.
  19381. +If one of them returns non-nil, the file is considered already written
  19382. +and the rest are not called.
  19383. +These hooks are considered to pertain to the visited file.
  19384. +So this list is cleared if you change the visited file name.
  19385. +See also `write-contents-hooks'.
  19386. +Don't make this variable buffer-local; instead, use `local-write-file-hooks'.Vlocal-write-file-hooks
  19387. +Just like `write-file-hooks', except intended for per-buffer use.
  19388. +The functions in this list are called before the ones in
  19389. +`write-file-hooks'.Vwrite-contents-hooks
  19390. +List of functions to be called before writing out a buffer to a file.
  19391. +If one of them returns non-nil, the file is considered already written
  19392. +and the rest are not called.
  19393. +These hooks are considered to pertain to the buffer's contents,
  19394. +not to the particular visited file; thus, `set-visited-file-name' does
  19395. +not clear this variable, but changing the major mode does clear it.
  19396. +See also `write-file-hooks'.Venable-local-variables
  19397. +*Control use of local-variables lists in files you visit.
  19398. +The value can be t, nil or something else.
  19399. +A value of t means local-variables lists are obeyed;
  19400. +nil means they are ignored; anything else means query.
  19401. +
  19402. +The command \[normal-mode] always obeys local-variables lists
  19403. +and ignores this variable.Venable-local-eval
  19404. +*Control processing of the "variable" `eval' in a file's local variables.
  19405. +The value can be t, nil or something else.
  19406. +A value of t means obey `eval' variables;
  19407. +nil means ignore them; anything else means query.
  19408. +
  19409. +The command \[normal-mode] always obeys local-variables lists
  19410. +and ignores this variable.Vbackup-char
  19411. +Character to add to file names to make backup names.Vautosave-char
  19412. +Character to add to file names to make autosave names.Vbufferfile-char
  19413. +Character to add to buffer names to make file names.Fpwd
  19414. +Show the current default directory.Vcd-path
  19415. +Value of the CDPATH environment variable, as a list.
  19416. +Not actually set up until the first time you you use it.Fparse-colon-path
  19417. +Explode a colon-separated list of paths into a string list.Fcd-absolute
  19418. +Change current directory to given absolute file name DIR.Fcd
  19419. +Make DIR become the current buffer's default directory.
  19420. +If your environment includes a `CDPATH' variable, try each one of that
  19421. +colon-separated list of directories when resolving a relative directory name.Fload-file
  19422. +Load the Lisp file named FILE.Fload-library
  19423. +Load the library named LIBRARY.
  19424. +This is an interface to the function `load'.Ffile-local-copy
  19425. +Copy the file FILE into a temporary file on this machine.
  19426. +Returns the name of the local copy, or nil, if FILE is directly
  19427. +accessible.Ffile-truename
  19428. +Return the truename of FILENAME, which should be absolute.
  19429. +The truename of a file name is found by chasing symbolic links
  19430. +both at the level of the file and at the level of the directories
  19431. +containing it, until no links are left at any level.
  19432. +
  19433. +The arguments COUNTER and PREV-DIRS are used only in recursive calls.
  19434. +Do not specify them in other calls.Ffile-chase-links
  19435. +Chase links in FILENAME until a name that is not a link.
  19436. +Does not examine containing directories for links,
  19437. +unlike `file-truename'.Fswitch-to-buffer-other-window
  19438. +Select buffer BUFFER in another window.Fswitch-to-buffer-other-frame
  19439. +Switch to buffer BUFFER in another frame.Ffind-file
  19440. +Edit file FILENAME.
  19441. +Switch to a buffer visiting file FILENAME,
  19442. +creating one if none already exists.Ffind-file-other-window
  19443. +Edit file FILENAME, in another window.
  19444. +May create a new window, or reuse an existing one.
  19445. +See the function `display-buffer'.Ffind-file-other-frame
  19446. +Edit file FILENAME, in another frame.
  19447. +May create a new frame, or reuse an existing one.
  19448. +See the function `display-buffer'.Ffind-file-read-only
  19449. +Edit file FILENAME but don't allow changes.
  19450. +Like \[find-file] but marks buffer as read-only.
  19451. +Use \[toggle-read-only] to permit editing.Ffind-file-read-only-other-window
  19452. +Edit file FILENAME in another window but don't allow changes.
  19453. +Like \[find-file-other-window] but marks buffer as read-only.
  19454. +Use \[toggle-read-only] to permit editing.Ffind-file-read-only-other-frame
  19455. +Edit file FILENAME in another frame but don't allow changes.
  19456. +Like \[find-file-other-frame] but marks buffer as read-only.
  19457. +Use \[toggle-read-only] to permit editing.Ffind-alternate-file
  19458. +Find file FILENAME, select its buffer, kill previous buffer.
  19459. +If the current buffer now contains an empty file that you just visited
  19460. +(presumably by mistake), use this command to visit the file you really want.Fcreate-file-buffer
  19461. +Create a suitably named buffer for visiting FILENAME, and return it.
  19462. +FILENAME (sans directory) is used unchanged if that name is free;
  19463. +otherwise a string <2> or <3> or ... is appended to get an unused name.Fgenerate-new-buffer
  19464. +Create and return a buffer with a name based on NAME.
  19465. +Choose the buffer's name using `generate-new-buffer-name'.Vautomount-dir-prefix
  19466. +Regexp to match the automounter prefix in a directory name.Vabbreviated-home-dir
  19467. +The user's homedir abbreviated according to `directory-abbrev-list'.Fabbreviate-file-name
  19468. +Return a version of FILENAME shortened using `directory-abbrev-alist'.
  19469. +This also substitutes "~" for the user's home directory.
  19470. +Type \[describe-variable] directory-abbrev-alist RET for more information.Vfind-file-not-true-dirname-list
  19471. +*List of logical names for which visiting shouldn't save the true dirname.
  19472. +On VMS, when you visit a file using a logical name that searches a path,
  19473. +you may or may not want the visited file name to record the specific
  19474. +directory where the file was found.  If you *do not* want that, add the logical
  19475. +name to this list as a string.Ffind-buffer-visiting
  19476. +Return the buffer visiting file FILENAME (a string).
  19477. +This is like `get-file-buffer', except that it checks for any buffer
  19478. +visiting the same file, possibly under a different name.
  19479. +If there is no such live buffer, return nil.Ffind-file-noselect
  19480. +Read file FILENAME into a buffer and return the buffer.
  19481. +If a buffer exists visiting FILENAME, return that one, but
  19482. +verify that the file has not changed since visited or saved.
  19483. +The buffer is not selected, just returned to the caller.Fafter-find-file
  19484. +Called after finding a file and by the default revert function.
  19485. +Sets buffer mode, parses local variables.
  19486. +Optional args ERROR, WARN, and NOAUTO: ERROR non-nil means there was an
  19487. +error in reading the file.  WARN non-nil means warn if there
  19488. +exists an auto-save file more recent than the visited file.
  19489. +NOAUTO means don't mess with auto-save mode.
  19490. +Fourth arg AFTER-FIND-FILE-FROM-REVERT-BUFFER non-nil
  19491. + means this call was from `revert-buffer'.
  19492. +Finishes by calling the functions in `find-file-hooks'.Fnormal-mode
  19493. +Choose the major mode for this buffer automatically.
  19494. +Also sets up any specified local variables of the file.
  19495. +Uses the visited file name, the -*- line, and the local variables spec.
  19496. +
  19497. +This function is called automatically from `find-file'.  In that case,
  19498. +we may set up specified local variables depending on the value of
  19499. +`enable-local-variables': if it is t, we do; if it is nil, we don't;
  19500. +otherwise, we query.  `enable-local-variables' is ignored if you
  19501. +run `normal-mode' explicitly.Vauto-mode-alist
  19502. +Alist of filename patterns vs corresponding major mode functions.
  19503. +Each element looks like (REGEXP . FUNCTION) or (REGEXP FUNCTION).
  19504. +Visiting a file whose name matches REGEXP causes FUNCTION to be called.
  19505. +If the element has the form (REGEXP FUNCTION), then after calling
  19506. +FUNCTION, we delete the suffix that matched REGEXP and search the list
  19507. +again for another match.Vinterpreter-mode-alist
  19508. +Alist mapping interpreter names to major modes.
  19509. +This alist applies to files whose first line starts with `#!'.
  19510. +Each element looks like (INTERPRETER . MODE).
  19511. +The car of each element is compared with
  19512. +the name of the interpreter specified in the first line.
  19513. +If it matches, mode MODE is selected.Vinhibit-first-line-modes-regexps
  19514. +List of regexps; if one matches a file name, don't look for `-*-'.Vuser-init-file
  19515. +File name including directory of user's initialization file.Fset-auto-mode
  19516. +Select major mode appropriate for current buffer.
  19517. +This checks for a -*- mode tag in the buffer's text,
  19518. +compares the filename against the entries in `auto-mode-alist',
  19519. +or checks the interpreter that runs this file against
  19520. +`interpreter-mode-alist'.
  19521. +
  19522. +It does not check for the `mode:' local variable in the
  19523. +Local Variables section of the file; for that, use `hack-local-variables'.
  19524. +
  19525. +If `enable-local-variables' is nil, this function does not check for a
  19526. +-*- mode tag.Fhack-local-variables
  19527. +Parse and put into effect this buffer's local variables spec.Vignored-local-variables
  19528. +Variables to be ignored in a file's local variable spec.Fset-visited-file-name
  19529. +Change name of file visited in current buffer to FILENAME.
  19530. +The next time the buffer is saved it will go in the newly specified file.
  19531. +nil or empty string as argument means make buffer not be visiting any file.
  19532. +Remember to delete the initial contents of the minibuffer
  19533. +if you wish to pass an empty string as the argument.Fwrite-file
  19534. +Write current buffer into file FILENAME.
  19535. +Makes buffer visit that file, and marks it not modified.
  19536. +If the buffer is already visiting a file, you can specify
  19537. +a directory name as FILENAME, to write a file of the same
  19538. +old name in that directory.Fbackup-buffer
  19539. +Make a backup of the disk file visited by the current buffer, if appropriate.
  19540. +This is normally done before saving the buffer the first time.
  19541. +If the value is non-nil, it is the result of `file-modes' on the original
  19542. +file; this means that the caller, after saving the buffer, should change
  19543. +the modes of the new file to agree with the old modes.Ffile-name-sans-versions
  19544. +Return FILENAME sans backup versions or strings.
  19545. +This is a separate procedure so your site-init or startup file can
  19546. +redefine it.
  19547. +If the optional argument KEEP-BACKUP-VERSION is non-nil,
  19548. +we do not remove backup version numbers, only true file version numbers.Fmake-backup-file-name
  19549. +Create the non-numeric backup file name for FILE.
  19550. +This is a separate function so you can redefine it for customization.Fbackup-file-name-p
  19551. +Return non-nil if FILE is a backup file name (numeric or not).
  19552. +This is a separate function so you can redefine it for customization.
  19553. +You may need to redefine `file-name-sans-versions' as well.Fbackup-extract-version
  19554. +Given the name of a numeric backup file, return the backup number.
  19555. +Uses the free variable `bv-length', whose value should be
  19556. +the index in the name where the version number begins.Ffind-backup-file-name
  19557. +Find a file name for a backup file, and suggestions for deletions.
  19558. +Value is a list whose car is the name for the backup file
  19559. + and whose cdr is a list of old versions to consider deleting now.Ffile-nlinks
  19560. +Return number of names file FILENAME has.Ffile-relative-name
  19561. +Convert FILENAME to be relative to DIRECTORY (default: default-directory).Fsave-buffer
  19562. +Save current buffer in visited file if modified.  Versions described below.
  19563. +By default, makes the previous version into a backup file
  19564. + if previously requested or if this is the first save.
  19565. +With 1 or 3 \[universal-argument]'s, marks this version
  19566. + to become a backup when the next save is done.
  19567. +With 2 or 3 \[universal-argument]'s,
  19568. + unconditionally makes the previous version into a backup file.
  19569. +With argument of 0, never makes the previous version into a backup file.
  19570. +
  19571. +If a file's name is FOO, the names of its numbered backup versions are
  19572. + FOO.~i~ for various integers i.  A non-numbered backup file is called FOO~.
  19573. +Numeric backups (rather than FOO~) will be made if value of
  19574. + `version-control' is not the atom `never' and either there are already
  19575. + numeric versions of the file being backed up, or `version-control' is
  19576. + non-nil.
  19577. +We don't want excessive versions piling up, so there are variables
  19578. + `kept-old-versions', which tells Emacs how many oldest versions to keep,
  19579. + and `kept-new-versions', which tells how many newest versions to keep.
  19580. + Defaults are 2 old versions and 2 new.
  19581. +`dired-kept-versions' controls dired's clean-directory (.) command.
  19582. +If `delete-old-versions' is nil, system will query user
  19583. + before trimming versions.  Otherwise it does it silently.Fdelete-auto-save-file-if-necessary
  19584. +Delete auto-save file for current buffer if `delete-auto-save-files' is t.
  19585. +Normally delete only if the file was written by this Emacs since
  19586. +the last real save, but optional arg FORCE non-nil means delete anyway.Fbasic-save-buffer
  19587. +Save the current buffer in its visited file, if it has been modified.Fsave-some-buffers
  19588. +Save some modified file-visiting buffers.  Asks user about each one.
  19589. +Optional argument (the prefix) non-nil means save all with no questions.
  19590. +Optional second argument EXITING means ask about certain non-file buffers
  19591. + as well as about file buffers.Fnot-modified
  19592. +Mark current buffer as unmodified, not needing to be saved.
  19593. +With prefix arg, mark buffer as modified, so \[save-buffer] will save.Ftoggle-read-only
  19594. +Change whether this buffer is visiting its file read-only.
  19595. +With arg, set read-only iff arg is positive.Finsert-file
  19596. +Insert contents of file FILENAME into buffer after point.
  19597. +Set mark after the inserted text.
  19598. +
  19599. +This function is meant for the user to run interactively.
  19600. +Don't call it from programs!  Use `insert-file-contents' instead.
  19601. +(Its calling sequence is different; see its documentation).Fappend-to-file
  19602. +Append the contents of the region to the end of file FILENAME.
  19603. +When called from a function, expects three arguments,
  19604. +START, END and FILENAME.  START and END are buffer positions
  19605. +saying what text to write.Ffile-newest-backup
  19606. +Return most recent backup file for FILENAME or nil if no backups exist.Frename-uniquely
  19607. +Rename current buffer to a similar name not already taken.
  19608. +This function is useful for creating multiple shell process buffers
  19609. +or multiple mail buffers, etc.Fmake-directory
  19610. +Create the directory DIR and any nonexistent parent dirs.
  19611. +Interactively, the default choice of directory to create
  19612. +is the current default directory for file names.
  19613. +That is useful when you have visited a file in a nonexistint directory.
  19614. +
  19615. +Noninteractively, the second (optional) argument PARENTS says whether
  19616. +to create parent directories if they don't exist.Vrevert-buffer-function
  19617. +Function to use to revert this buffer, or nil to do the default.
  19618. +The function receives two arguments IGNORE-AUTO and NOCONFIRM,
  19619. +which are the arguments that `revert-buffer' received.Vrevert-buffer-insert-file-contents-function
  19620. +Function to use to insert contents when reverting this buffer.
  19621. +Gets two args, first the nominal file name to use,
  19622. +and second, t if reading the auto-save file.Frevert-buffer
  19623. +Replace the buffer text with the text of the visited file on disk.
  19624. +This undoes all changes since the file was visited or saved.
  19625. +With a prefix argument, offer to revert from latest auto-save file, if
  19626. +that is more recent than the visited file.
  19627. +
  19628. +When called from lisp, The first argument is IGNORE-AUTO; only offer
  19629. +to revert from the auto-save file when this is nil.  Note that the
  19630. +sense of this argument is the reverse of the prefix argument, for the
  19631. +sake of backward compatibility.  IGNORE-AUTO is optional, defaulting
  19632. +to nil.
  19633. +
  19634. +Optional second argument NOCONFIRM means don't ask for confirmation at
  19635. +all.
  19636. +
  19637. +If the value of `revert-buffer-function' is non-nil, it is called to
  19638. +do the work.
  19639. +
  19640. +The default revert function runs the hook `before-revert-hook' at the
  19641. +beginning and `after-revert-hook' at the end.Frecover-file
  19642. +Visit file FILE, but get contents from its last auto-save file.Fkill-some-buffers
  19643. +For each buffer, ask whether to kill it.Fauto-save-mode
  19644. +Toggle auto-saving of contents of current buffer.
  19645. +With prefix argument ARG, turn auto-saving on if positive, else off.Frename-auto-save-file
  19646. +Adjust current buffer's auto save file name for current conditions.
  19647. +Also rename any existing auto save file, if it was made in this session.Fmake-auto-save-file-name
  19648. +Return file name to use for auto-saves of current buffer.
  19649. +Does not consider `auto-save-visited-file-name' as that variable is checked
  19650. +before calling this function.  You can redefine this for customization.
  19651. +See also `auto-save-file-name-p'.Fauto-save-file-name-p
  19652. +Return non-nil if FILENAME can be yielded by `make-auto-save-file-name'.
  19653. +FILENAME should lack slashes.  You can redefine this for customization.Vlist-directory-brief-switches
  19654. +*Switches for list-directory to pass to `ls' for brief listing,Vlist-directory-verbose-switches
  19655. +*Switches for list-directory to pass to `ls' for verbose listing,Flist-directory
  19656. +Display a list of files in or matching DIRNAME, a la `ls'.
  19657. +DIRNAME is globbed by the shell if necessary.
  19658. +Prefix arg (second arg if noninteractive) means supply -l switch to `ls'.
  19659. +Actions controlled by variables `list-directory-brief-switches'
  19660. +and `list-directory-verbose-switches'.Vinsert-directory-program
  19661. +Absolute or relative name of the `ls' program used by `insert-directory'.Finsert-directory
  19662. +Insert directory listing for FILE, formatted according to SWITCHES.
  19663. +Leaves point after the inserted text.
  19664. +SWITCHES may be a string of options, or a list of strings.
  19665. +Optional third arg WILDCARD means treat FILE as shell wildcard.
  19666. +Optional fourth arg FULL-DIRECTORY-P means file is a directory and
  19667. +switches do not contain `d', so that a full listing is expected.
  19668. +
  19669. +This works by running a directory listing program
  19670. +whose name is in the variable `insert-directory-program'.
  19671. +If WILDCARD, it also runs the shell specified by `shell-file-name'.Vkill-emacs-query-functions
  19672. +Functions to call with no arguments to query about killing Emacs.
  19673. +If any of these functions returns nil, killing Emacs is cancelled.Fsave-buffers-kill-emacs
  19674. +Offer to save each buffer, then kill this Emacs process.
  19675. +With prefix arg, silently save all file-visiting buffers, then kill.Vfill-individual-varying-indent
  19676. +*Controls criterion for a new paragraph in `fill-individual-paragraphs'.
  19677. +Non-nil means changing indent doesn't end a paragraph.
  19678. +That mode can handle paragraphs with extra indentation on the first line,
  19679. +but it requires separator lines between paragraphs.
  19680. +A value of nil means that any change in indentation starts a new paragraph.Vsentence-end-double-space
  19681. +*Non-nil means a single space does not end a sentence.Fset-fill-prefix
  19682. +Set the fill prefix to the current line up to point.
  19683. +Filling expects lines to start with the fill prefix and
  19684. +reinserts the fill prefix in each resulting line.Vadaptive-fill-mode
  19685. +*Non-nil means determine a paragraph's fill prefix from its text.Vadaptive-fill-regexp
  19686. +*Regexp to match text at start of line that constitutes indentation.
  19687. +If Adaptive Fill mode is enabled, whatever text matches this pattern
  19688. +on the second line of a paragraph is used as the standard indentation
  19689. +for the paragraph.Ffill-region-as-paragraph
  19690. +Fill region as one paragraph: break lines to fit `fill-column'.
  19691. +Prefix arg means justify too.
  19692. +If `sentence-end-double-space' is non-nil, then period followed by one
  19693. +space does not end a sentence, so don't break a line there.
  19694. +From program, pass args FROM, TO and JUSTIFY-FLAG.Ffill-paragraph
  19695. +Fill paragraph at or after point.  Prefix arg means justify as well.
  19696. +If `sentence-end-double-space' is non-nil, then period followed by one
  19697. +space does not end a sentence, so don't break a line there.Ffill-region
  19698. +Fill each of the paragraphs in the region.
  19699. +Prefix arg (non-nil third arg, if called from program) means justify as well.
  19700. +If `sentence-end-double-space' is non-nil, then period followed by one
  19701. +space does not end a sentence, so don't break a line there.Fjustify-current-line
  19702. +Add spaces to line point is in, so it ends at `fill-column'.Ffill-nonuniform-paragraphs
  19703. +Fill paragraphs within the region, allowing varying indentation within each.
  19704. +This command divides the region into "paragraphs",
  19705. +only at paragraph-separator lines, then fills each paragraph
  19706. +using as the fill prefix the smallest indentation of any line
  19707. +in the paragraph.
  19708. +
  19709. +When calling from a program, pass range to fill as first two arguments.
  19710. +
  19711. +Optional third and fourth arguments JUSTIFY-FLAG and MAIL-FLAG:
  19712. +JUSTIFY-FLAG to justify paragraphs (prefix arg),
  19713. +MAIL-FLAG for a mail message, i. e. don't fill header lines.Ffill-individual-paragraphs
  19714. +Fill paragraphs of uniform indentation within the region.
  19715. +This command divides the region into "paragraphs", 
  19716. +treating every change in indentation level as a paragraph boundary,
  19717. +then fills each paragraph using its indentation level as the fill prefix.
  19718. +
  19719. +When calling from a program, pass range to fill as first two arguments.
  19720. +
  19721. +Optional third and fourth arguments JUSTIFY-FLAG and MAIL-FLAG:
  19722. +JUSTIFY-FLAG to justify paragraphs (prefix arg),
  19723. +MAIL-FLAG for a mail message, i. e. don't fill header lines.Vpi
  19724. +The value of Pi (3.1415926...)Ve
  19725. +The value of e (2.7182818...)Vdegrees-to-radians
  19726. +Degrees to radian conversion constantVradians-to-degrees
  19727. +Radian to degree conversion constantFdegrees-to-radians
  19728. +Convert ARG from degrees to radians.Fradians-to-degrees
  19729. +Convert ARG from radians to degrees.Vhelp-map
  19730. +Keymap for characters following the Help key.Ffinder-by-keyword
  19731. +Find packages matching a given keyword.Fhelp-with-tutorial
  19732. +Select the Emacs learn-by-doing tutorial.Fdescribe-key-briefly
  19733. +Print the name of the function KEY invokes.  KEY is a string.Fprint-help-return-message
  19734. +Display or return message saying how to restore windows after help command.
  19735. +Computes a message and applies the optional argument FUNCTION to it.
  19736. +If FUNCTION is nil, applies `message' to it, thus printing it.Fdescribe-key
  19737. +Display documentation of the function invoked by KEY.  KEY is a string.Fdescribe-mode
  19738. +Display documentation of current major mode and minor modes.
  19739. +For this to work correctly for a minor mode, the mode's indicator variable
  19740. +(listed in `minor-mode-alist') must also be a function whose documentation
  19741. +describes the minor mode.Fdescribe-distribution
  19742. +Display info on how to obtain the latest version of GNU Emacs.Fdescribe-copying
  19743. +Display info on how you may redistribute copies of GNU Emacs.Fdescribe-project
  19744. +Display info on the GNU project.Fdescribe-no-warranty
  19745. +Display info on all the kinds of warranty Emacs does NOT have.Fdescribe-prefix-bindings
  19746. +Describe the bindings of the prefix used to reach this command.
  19747. +The prefix described consists of all but the last event
  19748. +of the key sequence that ran this command.Fview-emacs-news
  19749. +Display info on recent changes to Emacs.Fview-lossage
  19750. +Display last 100 input keystrokes.Fhelp-for-help
  19751. +You have typed \[help-command], the help character.  Type a Help option:
  19752. +(Use \<help-map>\[scroll-up] or \[scroll-down] to scroll through this text.
  19753. +Type \<help-map>\[help-quit] to exit the Help command.)
  19754. +
  19755. +a  command-apropos.  Give a substring, and see a list of commands
  19756. +    (functions interactively callable) that contain
  19757. +    that substring.  See also the  apropos  command.
  19758. +b  describe-bindings.  Display table of all key bindings.
  19759. +c  describe-key-briefly.  Type a command key sequence;
  19760. +    it prints the function name that sequence runs.
  19761. +f  describe-function.  Type a function name and get documentation of it.
  19762. +C-f Info-goto-emacs-command-node.  Type a function name;
  19763. +    it takes you to the Info node for that command.
  19764. +i  info. The  info  documentation reader.
  19765. +k  describe-key.  Type a command key sequence;
  19766. +    it displays the full documentation.
  19767. +C-k Info-goto-emacs-key-command-node.  Type a command key sequence;
  19768. +    it takes you to the Info node for the command bound to that key.
  19769. +l  view-lossage.  Shows last 100 characters you typed.
  19770. +m  describe-mode.  Print documentation of current major mode,
  19771. +    which describes the commands peculiar to it.
  19772. +n  view-emacs-news.  Shows emacs news file.
  19773. +p  finder-by-keyword. Find packages matching a given topic keyword.
  19774. +s  describe-syntax.  Display contents of syntax table, plus explanations
  19775. +t  help-with-tutorial.  Select the Emacs learn-by-doing tutorial.
  19776. +v  describe-variable.  Type name of a variable;
  19777. +    it displays the variable's documentation and value.
  19778. +w  where-is.  Type command name; it prints which keystrokes
  19779. +    invoke that command.
  19780. +C-c print Emacs copying permission (General Public License).
  19781. +C-d print Emacs ordering information.
  19782. +C-n print news of recent Emacs changes.
  19783. +C-p print information about the GNU project.
  19784. +C-w print information on absence of warranty for GNU Emacs.Fdescribe-function
  19785. +Display the full documentation of FUNCTION (a symbol).Fdescribe-variable
  19786. +Display the full documentation of VARIABLE (a symbol).
  19787. +Returns the documentation as a string, also.Fwhere-is
  19788. +Print message listing key sequences that invoke specified command.
  19789. +Argument is a command definition, usually a symbol with a function definition.Fcommand-apropos
  19790. +Like apropos but lists only symbols that are names of commands
  19791. +(interactively callable functions).  Argument REGEXP is a regular expression
  19792. +that is matched against command symbol names.  Returns list of symbols and
  19793. +documentation found.Flocate-library
  19794. +Show the full path name of Emacs library LIBRARY.
  19795. +This command searches the directories in `load-path' like `M-x load-library'
  19796. +to find the file that `M-x load-library RET LIBRARY RET' would load.
  19797. +Optional second arg NOSUFFIX non-nil means don't add suffixes `.elc' or `.el'
  19798. +to the specified name LIBRARY (a la calling `load' instead of `load-library').Vindent-line-function
  19799. +Function to indent current line.Findent-according-to-mode
  19800. +Indent line in proper way for current major mode.Findent-for-tab-command
  19801. +Indent line in proper way for current major mode.Findent-rigidly
  19802. +Indent all lines starting in the region sideways by ARG columns.
  19803. +Called from a program, takes three arguments, START, END and ARG.Vindent-region-function
  19804. +Function which is short cut to indent region using indent-according-to-mode.
  19805. +A value of nil means really run indent-according-to-mode on each line.Findent-region
  19806. +Indent each nonblank line in the region.
  19807. +With no argument, indent each line using `indent-according-to-mode',
  19808. +or use `indent-region-function' to do the whole region if that's non-nil.
  19809. +If there is a fill prefix, make each line start with the fill prefix.
  19810. +With argument COLUMN, indent each line to that column.
  19811. +Called from a program, takes three args: START, END and COLUMN.Findent-relative-maybe
  19812. +Indent a new line like previous nonblank line.Findent-relative
  19813. +Space out to under next indent point in previous nonblank line.
  19814. +An indent point is a non-whitespace character following whitespace.
  19815. +If the previous nonblank line has no indent points beyond the
  19816. +column point starts at, `tab-to-tab-stop' is done instead.Vtab-stop-list
  19817. +*List of tab stop positions used by `tab-to-tab-stops'.
  19818. +This should be a list of integers, ordered from smallest to largest.Vedit-tab-stops-map
  19819. +Keymap used in `edit-tab-stops'.Vedit-tab-stops-buffer
  19820. +Buffer whose tab stops are being edited--in case
  19821. +the variable `tab-stop-list' is local in that buffer.Fedit-tab-stops
  19822. +Edit the tab stops used by `tab-to-tab-stop'.
  19823. +Creates a buffer *Tab Stops* containing text describing the tab stops.
  19824. +A colon indicates a column where there is a tab stop.
  19825. +You can add or remove colons and then do \<edit-tab-stops-map>\[edit-tab-stops-note-changes] to make changes take effect.Fedit-tab-stops-note-changes
  19826. +Put edited tab stops into effect.Ftab-to-tab-stop
  19827. +Insert spaces or tabs to next defined tab-stop column.
  19828. +The variable `tab-stop-list' is a list of columns at which there are tab stops.
  19829. +Use \[edit-tab-stops] to edit them interactively.Fmove-to-tab-stop
  19830. +Move point to next defined tab-stop column.
  19831. +The variable `tab-stop-list' is a list of columns at which there are tab stops.
  19832. +Use \[edit-tab-stops] to edit them interactively.Vsearch-exit-option
  19833. +*Non-nil means random control characters terminate incremental search.Vsearch-slow-window-lines
  19834. +*Number of lines in slow search display windows.
  19835. +These are the short windows used during incremental search on slow terminals.
  19836. +Negative means put the slow search window at the top (normally it's at bottom)
  19837. +and the value is minus the number of lines.Vsearch-slow-speed
  19838. +*Highest terminal speed at which to use "slow" style incremental search.
  19839. +This is the style where a one-line window is created to show the line
  19840. +that the search has reached.Vsearch-upper-case
  19841. +*If non-nil, upper case chars disable case fold searching.
  19842. +That is, upper and lower case chars must match exactly.
  19843. +This applies no matter where the chars come from, but does not
  19844. +apply to chars in regexps that are prefixed with `\'.
  19845. +If this value is `not-yanks', yanked text is always downcased.Vsearch-nonincremental-instead
  19846. +*If non-nil, do a nonincremental search instead if exiting immediately.
  19847. +Actually, `isearch-edit-string' is called to let you enter the search
  19848. +string, and RET terminates editing and does a nonincremental search.Vsearch-whitespace-regexp
  19849. +*If non-nil, regular expression to match a sequence of whitespace chars.
  19850. +You might want to use something like "[ \t\r\n]+" instead.Vsearch-highlight
  19851. +*Non-nil means incremental search highlights the current match.Visearch-mode-hook
  19852. +Function(s) to call after starting up an incremental search.Visearch-mode-end-hook
  19853. +Function(s) to call after terminating an incremental search.Vsearch-ring
  19854. +List of search string sequences.Vregexp-search-ring
  19855. +List of regular expression search string sequences.Vsearch-ring-max
  19856. +*Maximum length of search ring before oldest elements are thrown away.Vregexp-search-ring-max
  19857. +*Maximum length of regexp search ring before oldest elements are thrown away.Vsearch-ring-yank-pointer
  19858. +Index in `search-ring' of last string reused.
  19859. +nil if none yet.Vregexp-search-ring-yank-pointer
  19860. +Index in `regexp-search-ring' of last string reused.
  19861. +nil if none yet.Vsearch-ring-update
  19862. +*Non-nil if advancing or retreating in the search ring should cause search.
  19863. +Default value, nil, means edit the string instead.Visearch-mode-map
  19864. +Keymap for isearch-mode.Vminibuffer-local-isearch-map
  19865. +Keymap for editing isearch strings in the minibuffer.Fisearch-forward
  19866. +Do incremental search forward.
  19867. +With a prefix argument, do an incremental regular expression search instead.
  19868. +\<isearch-mode-map>
  19869. +As you type characters, they add to the search string and are found.
  19870. +The following non-printing keys are bound in `isearch-mode-map'.  
  19871. +
  19872. +Type \[isearch-delete-char] to cancel characters from end of search string.
  19873. +Type \[isearch-exit] to exit, leaving point at location found.
  19874. +Type LFD (C-j) to match end of line.
  19875. +Type \[isearch-repeat-forward] to search again forward, \[isearch-repeat-backward] to search again backward.
  19876. +Type \[isearch-yank-word] to yank word from buffer onto end of search string and search for it.
  19877. +Type \[isearch-yank-line] to yank rest of line onto end of search string and search for it.
  19878. +Type \[isearch-quote-char] to quote control character to search for it.
  19879. +\[isearch-abort] while searching or when search has failed cancels input back to what has
  19880. + been found successfully.
  19881. +\[isearch-abort] when search is successful aborts and moves point to starting point.
  19882. +
  19883. +Also supported is a search ring of the previous 16 search strings.
  19884. +Type \[isearch-ring-advance] to search for the next item in the search ring.
  19885. +Type \[isearch-ring-retreat] to search for the previous item in the search ring.
  19886. +Type \[isearch-complete] to complete the search string using the search ring.
  19887. +
  19888. +The above keys, bound in `isearch-mode-map', are often controlled by 
  19889. + options; do M-x apropos on search-.* to find them.
  19890. +Other control and meta characters terminate the search
  19891. + and are then executed normally (depending on `search-exit-option').
  19892. +
  19893. +If this function is called non-interactively, it does not return to
  19894. +the calling function until the search is done.Fisearch-forward-regexp
  19895. +Do incremental search forward for regular expression.
  19896. +With a prefix argument, do a regular string search instead.
  19897. +Like ordinary incremental search except that your input
  19898. +is treated as a regexp.  See \[isearch-forward] for more info.Fisearch-backward
  19899. +Do incremental search backward.
  19900. +With a prefix argument, do a regular expression search instead.
  19901. +See \[isearch-forward] for more information.Fisearch-backward-regexp
  19902. +Do incremental search backward for regular expression.
  19903. +With a prefix argument, do a regular string search instead.
  19904. +Like ordinary incremental search except that your input
  19905. +is treated as a regexp.  See \[isearch-forward] for more info.Fisearch-mode
  19906. +Start isearch minor mode.  Called by isearch-forward, etc.Fisearch-exit
  19907. +Exit search normally.
  19908. +However, if this is the first command after starting incremental
  19909. +search and `search-nonincremental-instead' is non-nil, do a
  19910. +nonincremental search instead via `isearch-edit-string'.Fisearch-edit-string
  19911. +Edit the search string in the minibuffer.
  19912. +The following additional command keys are active while editing.
  19913. +\<minibuffer-local-isearch-map>
  19914. +\[exit-minibuffer] to resume incremental searching with the edited string.
  19915. +\[isearch-nonincremental-exit-minibuffer] to do one nonincremental search.
  19916. +\[isearch-forward-exit-minibuffer] to resume isearching forward.
  19917. +\[isearch-reverse-exit-minibuffer] to resume isearching backward.
  19918. +\[isearch-ring-advance-edit] to replace the search string with the next item in the search ring.
  19919. +\[isearch-ring-retreat-edit] to replace the search string with the previous item in the search ring.
  19920. +\[isearch-complete-edit] to complete the search string using the search ring.
  19921. +\<isearch-mode-map>
  19922. +If first char entered is \[isearch-yank-word], then do word search instead.Fisearch-abort
  19923. +Abort incremental search mode if searching is successful, signalling quit.
  19924. +Otherwise, revert to previous successful search and continue searching.
  19925. +Use `isearch-exit' to quit without signalling.Fisearch-repeat-forward
  19926. +Repeat incremental search forwards.Fisearch-repeat-backward
  19927. +Repeat incremental search backwards.Fisearch-toggle-regexp
  19928. +Toggle regexp searching on or off.Fisearch-toggle-case-fold
  19929. +Toggle case folding in searching on or off.Fisearch-delete-char
  19930. +Discard last input item and move point back.  
  19931. +If no previous match was done, just beep.Fisearch-yank-kill
  19932. +Pull string from kill ring into search string.Fisearch-yank-word
  19933. +Pull next word from buffer into search string.Fisearch-yank-line
  19934. +Pull rest of line from buffer into search string.Fisearch-*-char
  19935. +Handle * and ? specially in regexps.Fisearch-|-char
  19936. +If in regexp search, jump to the barrier.Fisearch-other-meta-char
  19937. +Exit the search normally and reread this key sequence.
  19938. +But only if `search-exit-option' is non-nil, the default.
  19939. +If it is the symbol `edit', the search string is edited in the minibuffer
  19940. +and the meta character is unread so that it applies to editing the string.Fisearch-quote-char
  19941. +Quote special characters for incremental search.Fisearch-return-char
  19942. +Convert return into newline for incremental search.
  19943. +Obsolete.Fisearch-printing-char
  19944. +Add this ordinary printing character to the search string and search.Fisearch-whitespace-chars
  19945. +Match all whitespace chars, if in regexp mode.
  19946. +If you want to search for just a space, type C-q SPC.Fisearch-ring-advance
  19947. +Advance to the next search string in the ring.Fisearch-ring-retreat
  19948. +Retreat to the previous search string in the ring.Fisearch-ring-advance-edit
  19949. +Insert the next element of the search history into the minibuffer.Fisearch-ring-retreat-edit
  19950. +Inserts the previous element of the search history into the minibuffer.Fisearch-complete
  19951. +Complete the search string from the strings on the search ring.
  19952. +The completed string is then editable in the minibuffer.
  19953. +If there is no completion possible, say so and continue searching.Fisearch-complete-edit
  19954. +Same as `isearch-complete' except in the minibuffer.Fisearch-no-upper-case-p
  19955. +Return t if there are no upper case chars in STRING.
  19956. +If REGEXP-FLAG is non-nil, disregard letters preceeded by `\' (but not `\\')
  19957. +since they have special meaning in a regexp.Vlisp-mode-syntax-table
  19958. +Vemacs-lisp-mode-syntax-table
  19959. +Vlisp-mode-abbrev-table
  19960. +Vshared-lisp-mode-map
  19961. +Keymap for commands shared by all sorts of Lisp modes.Vemacs-lisp-mode-map
  19962. +Keymap for Emacs Lisp mode.
  19963. +All commands in shared-lisp-mode-map are inherited by this map.Femacs-lisp-mode
  19964. +Major mode for editing Lisp code to run in Emacs.
  19965. +Commands:
  19966. +Delete converts tabs to spaces as it moves back.
  19967. +Blank lines separate paragraphs.  Semicolons start comments.
  19968. +\{emacs-lisp-mode-map}
  19969. +Entry to this mode calls the value of `emacs-lisp-mode-hook'
  19970. +if that value is non-nil.Vlisp-mode-map
  19971. +Keymap for ordinary Lisp mode.
  19972. +All commands in `shared-lisp-mode-map' are inherited by this map.Flisp-mode
  19973. +Major mode for editing Lisp code for Lisps other than GNU Emacs Lisp.
  19974. +Commands:
  19975. +Delete converts tabs to spaces as it moves back.
  19976. +Blank lines separate paragraphs.  Semicolons start comments.
  19977. +\{lisp-mode-map}
  19978. +Note that `run-lisp' may be used either to start an inferior Lisp job
  19979. +or to switch back to an existing one.
  19980. +
  19981. +Entry to this mode calls the value of `lisp-mode-hook'
  19982. +if that value is non-nil.Flisp-eval-defun
  19983. +Send the current defun to the Lisp process made by \[run-lisp].Vlisp-interaction-mode-map
  19984. +Keymap for Lisp Interaction moe.
  19985. +All commands in `shared-lisp-mode-map' are inherited by this map.Flisp-interaction-mode
  19986. +Major mode for typing and evaluating Lisp forms.
  19987. +Like Lisp mode except that \[eval-print-last-sexp] evals the Lisp expression
  19988. +before point, and prints its value into the buffer, advancing point.
  19989. +
  19990. +Commands:
  19991. +Delete converts tabs to spaces as it moves back.
  19992. +Paragraphs are separated only by blank lines.
  19993. +Semicolons start comments.
  19994. +\{lisp-interaction-mode-map}
  19995. +Entry to this mode calls the value of `lisp-interaction-mode-hook'
  19996. +if that value is non-nil.Feval-print-last-sexp
  19997. +Evaluate sexp before point; print value into current buffer.Feval-last-sexp
  19998. +Evaluate sexp before point; print value in minibuffer.
  19999. +With argument, print output into current buffer.Feval-defun
  20000. +Evaluate defun that point is in or before.
  20001. +Print value in minibuffer.
  20002. +With argument, insert value in current buffer after the defun.Vlisp-indent-offset
  20003. +Vlisp-indent-function
  20004. +Flisp-indent-line
  20005. +Indent current line as Lisp code.
  20006. +With argument, indent any additional lines of the same expression
  20007. +rigidly along with this one.Fcalculate-lisp-indent
  20008. +Return appropriate indentation for current line as Lisp code.
  20009. +In usual case returns an integer: the column to indent to.
  20010. +Can instead return a list, whose car is the column to indent to.
  20011. +This means that following lines at the same level of indentation
  20012. +should not necessarily be indented the same way.
  20013. +The second element of the list is the buffer position
  20014. +of the start of the containing expression.Vlisp-body-indent
  20015. +Number of columns to indent the second line of a `(def...)' form.Findent-sexp
  20016. +Indent each line of the list starting just after point.
  20017. +If optional arg ENDPOS is given, indent each line, stopping when
  20018. +ENDPOS is encountered.Flisp-fill-paragraph
  20019. +Like \[fill-paragraph], but handle Emacs Lisp comments.
  20020. +If any of the current line is a comment, fill the comment or the
  20021. +paragraph of it that point is in, preserving the comment's indentation
  20022. +and initial semicolons.Findent-code-rigidly
  20023. +Indent all lines of code, starting in the region, sideways by ARG columns.
  20024. +Does not affect lines starting inside comments or strings, assuming that
  20025. +the start of the region is not inside them.
  20026. +
  20027. +Called from a program, takes args START, END, COLUMNS and NOCHANGE-REGEXP.
  20028. +The last is a regexp which, if matched at the beginning of a line,
  20029. +means don't indent that line.Vdefun-prompt-regexp
  20030. +*Non-nil => regexp to ignore, before the character that starts a defun.
  20031. +This is only necessary if the opening paren or brace is not in column 0.
  20032. +See `beginning-of-defun'.Vparens-require-spaces
  20033. +Non-nil => `insert-parentheses' should insert whitespace as needed.Fforward-sexp
  20034. +Move forward across one balanced expression (sexp).
  20035. +With argument, do it that many times.  Negative arg -N means
  20036. +move backward across N balanced expressions.Fbackward-sexp
  20037. +Move backward across one balanced expression (sexp).
  20038. +With argument, do it that many times.  Negative arg -N means
  20039. +move forward across N balanced expressions.Fmark-sexp
  20040. +Set mark ARG sexps from point.
  20041. +The place mark goes is the same place \[forward-sexp] would
  20042. +move to with the same argument.Fforward-list
  20043. +Move forward across one balanced group of parentheses.
  20044. +With argument, do it that many times.
  20045. +Negative arg -N means move backward across N groups of parentheses.Fbackward-list
  20046. +Move backward across one balanced group of parentheses.
  20047. +With argument, do it that many times.
  20048. +Negative arg -N means move forward across N groups of parentheses.Fdown-list
  20049. +Move forward down one level of parentheses.
  20050. +With argument, do this that many times.
  20051. +A negative argument means move backward but still go down a level.
  20052. +In Lisp programs, an argument is required.Fbackward-up-list
  20053. +Move backward out of one level of parentheses.
  20054. +With argument, do this that many times.
  20055. +A negative argument means move forward but still to a less deep spot.
  20056. +In Lisp programs, an argument is required.Fup-list
  20057. +Move forward out of one level of parentheses.
  20058. +With argument, do this that many times.
  20059. +A negative argument means move backward but still to a less deep spot.
  20060. +In Lisp programs, an argument is required.Fkill-sexp
  20061. +Kill the sexp (balanced expression) following the cursor.
  20062. +With argument, kill that many sexps after the cursor.
  20063. +Negative arg -N means kill N sexps before the cursor.Fbackward-kill-sexp
  20064. +Kill the sexp (balanced expression) preceding the cursor.
  20065. +With argument, kill that many sexps before the cursor.
  20066. +Negative arg -N means kill N sexps after the cursor.Fbeginning-of-defun
  20067. +Move backward to the beginning of a defun.
  20068. +With argument, do it that many times.  Negative arg -N
  20069. +means move forward to Nth following beginning of defun.
  20070. +Returns t unless search stops due to beginning or end of buffer.
  20071. +
  20072. +Normally a defun starts when there is an char with open-parenthesis
  20073. +syntax at the beginning of a line.  If `defun-prompt-regexp' is
  20074. +non-nil, then a string which matches that regexp may precede the
  20075. +open-parenthesis, and point ends up at the beginning of the line.Fbeginning-of-defun-raw
  20076. +Move point to the character that starts a defun.
  20077. +This is identical to beginning-of-defun, except that point does not move
  20078. +to the beginning of the line when `defun-prompt-regexp' is non-nil.Fend-of-defun
  20079. +Move forward to next end of defun.  With argument, do it that many times.
  20080. +Negative argument -N means move back to Nth preceding end of defun.
  20081. +
  20082. +An end of a defun occurs right after the close-parenthesis that matches
  20083. +the open-parenthesis that starts a defun; see `beginning-of-defun'.Fmark-defun
  20084. +Put mark at end of this defun, point at beginning.
  20085. +The defun marked is the one that contains point or follows point.Finsert-parentheses
  20086. +Put parentheses around next ARG sexps.  Leave point after open-paren.
  20087. +No argument is equivalent to zero: just insert `()' and leave point between.
  20088. +If `parens-require-spaces' is non-nil, this command also inserts a space
  20089. +before and after, depending on the surrounding characters.Fmove-past-close-and-reindent
  20090. +Move past next `)', delete indentation before it, then indent after it.Flisp-complete-symbol
  20091. +Perform completion on Lisp symbol preceding point.
  20092. +Compare that symbol against the known Lisp symbols.
  20093. +
  20094. +The context determines which symbols are considered.
  20095. +If the symbol starts just after an open-parenthesis, only symbols
  20096. +with function definitions are considered.  Otherwise, all symbols with
  20097. +function definitions, values or properties are considered.Vminor-mode-alist
  20098. +Alist saying how to show minor modes in the mode line.
  20099. +Each element looks like (VARIABLE STRING);
  20100. +STRING is included in the mode line iff VARIABLE's value is non-nil.
  20101. +
  20102. +Actually, STRING need not be a string; any possible mode-line element
  20103. +is okay.  See `mode-line-format'.Fprompt-for-change-log-name
  20104. +Prompt for a change log name.Ffind-change-log
  20105. +Find a change log file for \[add-change-log-entry] and return the name.
  20106. +Optional arg FILE-NAME is a name to try first.
  20107. +If FILE-NAME is nil, use the value of `change-log-default-name' if non-nil.
  20108. +Failing that, use "ChangeLog" in the current directory.
  20109. +If the file does not exist in the named directory, successive parent
  20110. +directories are tried.
  20111. +
  20112. +Once a file is found, `change-log-default-name' is set locally in the
  20113. +current buffer to the complete file name.Fadd-change-log-entry
  20114. +Find change log file and add an entry for today.
  20115. +Optional arg (interactive prefix) non-nil means prompt for user name and site.
  20116. +Second arg is file name of change log.  If nil, uses `change-log-default-name'.
  20117. +Third arg OTHER-WINDOW non-nil means visit in other window.
  20118. +Fourth arg NEW-ENTRY non-nil means always create a new entry at the front;
  20119. +never append to an existing entry.Fadd-change-log-entry-other-window
  20120. +Find change log file in other window and add an entry for today.
  20121. +Optional arg (interactive prefix) non-nil means prompt for user name and site.
  20122. +Second arg is file name of change log.  If nil, uses `change-log-default-name'.Fchange-log-mode
  20123. +Major mode for editing change logs; like Indented Text Mode.
  20124. +Prevents numeric backups and sets `left-margin' to 8 and `fill-column' to 74.
  20125. +New log entries are usually made with \[add-change-log-entry] or \[add-change-log-entry-other-window].
  20126. +Each entry behaves as a paragraph, and the entries for one day as a page.
  20127. +Runs `change-log-mode-hook'.Fadd-log-current-defun
  20128. +Return name of function definition point is in, or nil.
  20129. +
  20130. +Understands C, Lisp, LaTeX ("functions" are chapters, sections, ...),
  20131. +Texinfo (@node titles), and Fortran.
  20132. +
  20133. +Other modes are handled by a heuristic that looks in the 10K before
  20134. +point for uppercase headings starting in the first column or
  20135. +identifiers followed by `:' or `=', see variable
  20136. +`add-log-current-defun-header-regexp'.
  20137. +
  20138. +Has a preference of looking backwards.Vad-start-advice-on-load
  20139. +*Non-nil will start Advice magic when this file gets loaded.
  20140. +Also see function `ad-start-advice'.Vad-activate-on-definition
  20141. +*Non-nil means automatic advice activation at function definition.
  20142. +Set this variable to t if you want to enable forward advice (which is
  20143. +automatic advice activation of a previously undefined function at the
  20144. +point the function gets defined/loaded/autoloaded).  The value of this
  20145. +variable takes effect only during the execution of `ad-start-advice'. 
  20146. +If non-nil it will enable definition hooks regardless of the value
  20147. +of `ad-enable-definition-hooks'.Vad-redefinition-action
  20148. +*Defines what to do with redefinitions during de/activation.
  20149. +Redefinition occurs if a previously activated function that already has an
  20150. +original definition associated with it gets redefined and then de/activated.
  20151. +In such a case we can either accept the current definition as the new
  20152. +original definition, discard the current definition and replace it with the
  20153. +old original, or keep it and raise an error.  The values `accept', `discard',
  20154. +`error' or `warn' govern what will be done.  `warn' is just like `accept' but
  20155. +it additionally prints a warning message.  All other values will be
  20156. +interpreted as `error'.Vad-definition-hooks
  20157. +*List of hooks to be run after a function definition.
  20158. +The variable `ad-defined-function' will be bound to the name of
  20159. +the currently defined function when the hook function is run.Vad-enable-definition-hooks
  20160. +*Non-nil will enable hooks to be run on function definition.
  20161. +Setting this variable is a noop unless the value of
  20162. +`ad-activate-on-definition' (which see) is nil.Fad-add-advice
  20163. +Adds a piece of ADVICE to FUNCTION's list of advices in CLASS.
  20164. +If FUNCTION already has one or more pieces of advice of the specified
  20165. +CLASS then POSITION determines where the new piece will go.  The value
  20166. +of POSITION can either be `first', `last' or a number where 0 corresponds
  20167. +to `first'.  Numbers outside the range will be mapped to the closest
  20168. +extreme position.  If there was already a piece of ADVICE with the same
  20169. +name, then the position argument will be ignored and the old advice
  20170. +will be overwritten with the new one.
  20171. +    If the FUNCTION was not advised already, then its advice info will be 
  20172. +initialized.  Redefining a piece of advice whose name is part of the cache-id
  20173. +will clear the cache.Fdefadvice
  20174. +Defines a piece of advice for FUNCTION (a symbol).
  20175. +The syntax of `defadvice' is as follows:
  20176. +
  20177. +  (defadvice FUNCTION (CLASS NAME [POSITION] [ARGLIST] FLAG...)
  20178. +    [DOCSTRING] [INTERACTIVE-FORM]
  20179. +    BODY... )
  20180. +
  20181. +FUNCTION ::= Name of the function to be advised.
  20182. +CLASS ::= `before' | `around' | `after' | `activation' | `deactivation'.
  20183. +NAME ::= Non-nil symbol that names this piece of advice.
  20184. +POSITION ::= `first' | `last' | NUMBER. Optional, defaults to `first',
  20185. +    see also `ad-add-advice'.
  20186. +ARGLIST ::= An optional argument list to be used for the advised function
  20187. +    instead of the argument list of the original.  The first one found in
  20188. +    before/around/after-advices will be used.
  20189. +FLAG ::= `protect'|`disable'|`activate'|`compile'|`preactivate'|`freeze'.
  20190. +    All flags can be specified with unambiguous initial substrings.
  20191. +DOCSTRING ::= Optional documentation for this piece of advice.
  20192. +INTERACTIVE-FORM ::= Optional interactive form to be used for the advised
  20193. +    function.  The first one found in before/around/after-advices will be used.
  20194. +BODY ::= Any s-expression.
  20195. +
  20196. +Semantics of the various flags:
  20197. +`protect': The piece of advice will be protected against non-local exits in
  20198. +any code that precedes it.  If any around-advice of a function is protected
  20199. +then automatically all around-advices will be protected (the complete onion).
  20200. +
  20201. +`activate': All advice of FUNCTION will be activated immediately if
  20202. +FUNCTION has been properly defined prior to this application of `defadvice'.
  20203. +
  20204. +`compile': In conjunction with `activate' specifies that the resulting
  20205. +advised function should be compiled.
  20206. +
  20207. +`disable': The defined advice will be disabled, hence, it will not be used 
  20208. +during activation until somebody enables it.
  20209. +
  20210. +`preactivate': Preactivates the advised FUNCTION at macro-expansion/compile
  20211. +time.  This generates a compiled advised definition according to the current
  20212. +advice state that will be used during activation if appropriate.  Only use
  20213. +this if the `defadvice' gets actually compiled.
  20214. +
  20215. +`freeze': Expands the `defadvice' into a redefining `defun/defmacro' according
  20216. +to the current advice state.  No other advice information will be saved.
  20217. +Frozen advices cannot be undone, they behave like a hard redefinition of
  20218. +the advised function.  `freeze' implies `activate' and `preactivate'.  The
  20219. +documentation of the advised function can be dumped onto the `DOC' file
  20220. +during preloading.
  20221. +
  20222. +Look at the file `advice.el' for comprehensive documentation.Fad-start-advice
  20223. +Redefines some primitives to start the advice magic.
  20224. +If `ad-activate-on-definition' is t then advice information will
  20225. +automatically get activated whenever an advised function gets defined or
  20226. +redefined.  This will enable goodies such as forward advice and
  20227. +automatically enable function definition hooks.  If its value is nil but
  20228. +the value of `ad-enable-definition-hooks' is t then definition hooks
  20229. +will be enabled without having automatic advice activation, otherwise
  20230. +function definition hooks will be disabled too.  If definition hooks are
  20231. +enabled then functions stored in `ad-definition-hooks' are run whenever
  20232. +a function gets defined or redefined.Vappt-issue-message
  20233. +*Non-nil means check for appointments in the diary buffer.
  20234. +To be detected, the diary entry must have the time
  20235. +as the first thing on a line.Vappt-message-warning-time
  20236. +*Time in minutes before an appointment that the warning begins.Vappt-audible
  20237. +*Non-nil means beep to indicate appointment.Vappt-visible
  20238. +*Non-nil means display appointment message in echo area.Vappt-display-mode-line
  20239. +*Non-nil means display minutes to appointment and time on the mode line.Vappt-msg-window
  20240. +*Non-nil means display appointment message in another window.Vappt-display-duration
  20241. +*The number of seconds an appointment message is displayed.Vappt-display-diary
  20242. +*Non-nil means to display the next days diary on the screen. 
  20243. +This will occur at midnight when the appointment list is updated.Fapropos
  20244. +Show all symbols whose names contain matches for REGEXP.
  20245. +If optional argument DO-ALL is non-nil (prefix argument if interactive),
  20246. +or if `apropos-do-all' is non-nil, does more (time-consuming) work such as
  20247. +showing key bindings.  Optional argument PRED is called with each symbol, and
  20248. +if it returns nil, the symbol is not shown.
  20249. +
  20250. +Returns list of symbols and documentation found.Fsuper-apropos
  20251. +Show symbols whose names/documentation contain matches for REGEXP.
  20252. +If optional argument DO-ALL is non-nil (prefix argument if interactive),
  20253. +or if `apropos-do-all' is non-nil, does more (time-consuming) work such as
  20254. +showing key bindings and documentation that is not stored in the documentation
  20255. +file.
  20256. +
  20257. +Returns list of symbols and documentation found.Fasm-mode
  20258. +Major mode for editing typical assembler code.
  20259. +Features a private abbrev table and the following bindings:
  20260. +
  20261. +\[asm-colon]    outdent a preceding label, tab to next tab stop.
  20262. +\[tab-to-tab-stop]    tab to next tab stop.
  20263. +\[asm-newline]    newline, then tab to next tab stop.
  20264. +\[asm-comment]    smart placement of assembler comments.
  20265. +
  20266. +The character used for making comments is set by the variable
  20267. +`asm-comment-char' (which defaults to `?;').
  20268. +
  20269. +Alternatively, you may set this variable in `asm-set-comment-hook', which is
  20270. +called near the beginning of mode initialization.
  20271. +
  20272. +Turning on Asm mode runs the hook `asm-mode-hook' at the end of initialization.
  20273. +
  20274. +Special commands:
  20275. +\{asm-mode-map}
  20276. +Fupdate-file-autoloads
  20277. +Update the autoloads for FILE in `generated-autoload-file'
  20278. +(which FILE might bind in its local variables).Fupdate-autoloads-here
  20279. +Update sections of the current buffer generated by \[update-file-autoloads].Fupdate-directory-autoloads
  20280. +Run \[update-file-autoloads] on each .el file in DIR.Fbatch-update-autoloads
  20281. +Update the autoloads for the files or directories on the command line.
  20282. +Runs \[update-file-autoloads] on files and \[update-directory-autoloads]
  20283. +on directories.  Must be used only with -batch, and kills Emacs on completion.
  20284. +Each file will be processed even if an error occurred previously.
  20285. +For example, invoke `emacs -batch -f batch-update-autoloads *.el'.Fawk-mode
  20286. +Major mode for editing AWK code.
  20287. +This is much like C mode except for the syntax of comments.  It uses
  20288. +the same keymap as C mode and has the same variables for customizing
  20289. +indentation.  It has its own abbrev table and its own syntax table.
  20290. +
  20291. +Turning on AWK mode calls the value of the variable `awk-mode-hook'
  20292. +with no args, if that value is non-nil.Fbackquote
  20293. +Argument STRUCTURE describes a template to build.
  20294. +
  20295. +The whole structure acts as if it were quoted except for certain
  20296. +places where expressions are evaluated and inserted or spliced in.
  20297. +
  20298. +For example:
  20299. +
  20300. +b                 => (ba bb bc)        ; assume b has this value
  20301. +(` (a b c))       => (a b c)        ; backquote acts like quote
  20302. +(` (a (, b) c))   => (a (ba bb bc) c)    ; insert the value of b
  20303. +(` (a (,@ b) c))  => (a ba bb bc c)    ; splice in the value of b
  20304. +
  20305. +Vectors work just like lists.  Nested backquotes are permitted.Fbibtex-mode
  20306. +Major mode for editing bibtex files.
  20307. +
  20308. +\{bibtex-mode-map}
  20309. +
  20310. +A command such as \[bibtex-Book] will outline the fields for a BibTeX book entry.
  20311. +
  20312. +The optional fields start with the string OPT, and thus ignored by BibTeX.
  20313. +The OPT string may be removed from a field with \[bibtex-remove-OPT].
  20314. +\[bibtex-kill-optional-field] kills the current optional field entirely.
  20315. +\[bibtex-remove-double-quotes] removes the double-quotes around the text of
  20316. +the current field.  \[bibtex-empty-field] replaces the text of the current
  20317. +field with the default "".
  20318. +
  20319. +The command \[bibtex-clean-entry] cleans the current entry, i.e. (i) removes
  20320. +double-quotes from entirely numerical fields, (ii) removes OPT from all
  20321. +non-empty optional fields, (iii) removes all empty optional fields, and (iv)
  20322. +checks that no non-optional fields are empty.
  20323. +
  20324. +Use \[bibtex-find-text] to position the dot at the end of the current field.
  20325. +Use \[bibtex-next-field] to move to end of the next field.
  20326. +
  20327. +The following may be of interest as well:
  20328. +
  20329. +  Functions:
  20330. +    find-bibtex-duplicates
  20331. +    find-bibtex-entry-location
  20332. +    hide-bibtex-entry-bodies
  20333. +    sort-bibtex-entries
  20334. +    validate-bibtex-buffer
  20335. +
  20336. +  Variables:
  20337. +    bibtex-clean-entry-zap-empty-opts
  20338. +    bibtex-entry-field-alist
  20339. +    bibtex-include-OPTannote
  20340. +    bibtex-include-OPTcrossref
  20341. +    bibtex-include-OPTkey
  20342. +    bibtex-maintain-sorted-entries
  20343. +    bibtex-mode-user-optional-fields
  20344. +
  20345. +Fields:
  20346. +    address
  20347. +           Publisher's address
  20348. +    annote
  20349. +           Long annotation used for annotated bibliographies (begins sentence)
  20350. +    author
  20351. +           Name(s) of author(s), in BibTeX name format
  20352. +    booktitle
  20353. +           Book title when the thing being referenced isn't the whole book.
  20354. +           For book entries, the title field should be used instead.
  20355. +    chapter
  20356. +           Chapter number
  20357. +    crossref
  20358. +       The database key of the entry being cross referenced.
  20359. +    edition
  20360. +           Edition of a book (e.g., "second")
  20361. +    editor
  20362. +           Name(s) of editor(s), in BibTeX name format.
  20363. +           If there is also an author field, then the editor field should be
  20364. +           for the book or collection that the work appears in
  20365. +    howpublished
  20366. +            How something strange has been published (begins sentence)
  20367. +    institution
  20368. +           Sponsoring institution
  20369. +    journal
  20370. +           Journal name (macros are provided for many)
  20371. +    key
  20372. +           Alphabetizing and labeling key (needed when no author or editor)
  20373. +    month
  20374. +           Month (macros are provided)
  20375. +    note
  20376. +           To help the reader find a reference (begins sentence)
  20377. +    number
  20378. +           Number of a journal or technical report
  20379. +    organization
  20380. +           Organization (sponsoring a conference)
  20381. +    pages
  20382. +           Page number or numbers (use `--' to separate a range)
  20383. +    publisher
  20384. +           Publisher name
  20385. +    school
  20386. +           School name (for theses)
  20387. +    series
  20388. +           The name of a series or set of books.
  20389. +           An individual book will will also have it's own title
  20390. +    title
  20391. +           The title of the thing being referenced
  20392. +    type
  20393. +           Type of a technical report (e.g., "Research Note") to be used
  20394. +           instead of the default "Technical Report"
  20395. +    volume
  20396. +           Volume of a journal or multivolume work
  20397. +    year
  20398. +           Year---should contain only numerals
  20399. +---------------------------------------------------------
  20400. +Entry to this mode calls the value of bibtex-mode-hook if that value is
  20401. +non-nil.Fblackbox
  20402. +Play blackbox.  Optional prefix argument is the number of balls;
  20403. +the default is 4.
  20404. +
  20405. +What is blackbox?
  20406. +
  20407. +Blackbox is a game of hide and seek played on an 8 by 8 grid (the
  20408. +Blackbox).  Your opponent (Emacs, in this case) has hidden several
  20409. +balls (usually 4) within this box.  By shooting rays into the box and
  20410. +observing where they emerge it is possible to deduce the positions of
  20411. +the hidden balls.  The fewer rays you use to find the balls, the lower
  20412. +your score.
  20413. +
  20414. +Overview of play:
  20415. +
  20416. +\<blackbox-mode-map>To play blackbox, type \[blackbox].  An optional prefix argument
  20417. +specifies the number of balls to be hidden in the box; the default is
  20418. +four.
  20419. +
  20420. +The cursor can be moved around the box with the standard cursor
  20421. +movement keys.
  20422. +
  20423. +To shoot a ray, move the cursor to the edge of the box and press SPC.
  20424. +The result will be determined and the playfield updated.
  20425. +
  20426. +You may place or remove balls in the box by moving the cursor into the
  20427. +box and pressing \[bb-romp].
  20428. +
  20429. +When you think the configuration of balls you have placed is correct,
  20430. +press \[bb-done].  You will be informed whether you are correct or
  20431. +not, and be given your score.  Your score is the number of letters and
  20432. +numbers around the outside of the box plus five for each incorrectly
  20433. +placed ball.  If you placed any balls incorrectly, they will be
  20434. +indicated with `x', and their actual positions indicated with `o'.
  20435. +
  20436. +Details:
  20437. +
  20438. +There are three possible outcomes for each ray you send into the box:
  20439. +
  20440. +    Detour: the ray is deflected and emerges somewhere other than
  20441. +        where you sent it in.  On the playfield, detours are
  20442. +        denoted by matching pairs of numbers -- one where the
  20443. +        ray went in, and the other where it came out.
  20444. +
  20445. +    Reflection: the ray is reflected and emerges in the same place
  20446. +        it was sent in.  On the playfield, reflections are
  20447. +        denoted by the letter `R'.
  20448. +
  20449. +    Hit:    the ray strikes a ball directly and is absorbed.  It does
  20450. +        not emerge from the box.  On the playfield, hits are
  20451. +        denoted by the letter `H'.
  20452. +
  20453. +The rules for how balls deflect rays are simple and are best shown by
  20454. +example.
  20455. +
  20456. +As a ray approaches a ball it is deflected ninety degrees.  Rays can
  20457. +be deflected multiple times.  In the diagrams below, the dashes
  20458. +represent empty box locations and the letter `O' represents a ball.
  20459. +The entrance and exit points of each ray are marked with numbers as
  20460. +described under "Detour" above.  Note that the entrance and exit
  20461. +points are always interchangeable.  `*' denotes the path taken by the
  20462. +ray.
  20463. +
  20464. +Note carefully the relative positions of the ball and the ninety
  20465. +degree deflection it causes.
  20466. +
  20467. +    1                                            
  20468. +  - * - - - - - -         - - - - - - - -         - - - - - - - -       
  20469. +  - * - - - - - -         - - - - - - - -         - - - - - - - -       
  20470. +1 * * - - - - - -         - - - - - - - -         - O - - - - O -       
  20471. +  - - O - - - - -         - - O - - - - -         - - * * * * - -
  20472. +  - - - - - - - -         - - - * * * * * 2     3 * * * - - * - -
  20473. +  - - - - - - - -         - - - * - - - -         - - - O - * - -      
  20474. +  - - - - - - - -         - - - * - - - -         - - - - * * - -       
  20475. +  - - - - - - - -         - - - * - - - -         - - - - * - O -       
  20476. +                                2                         3
  20477. +
  20478. +As mentioned above, a reflection occurs when a ray emerges from the same point
  20479. +it was sent in.  This can happen in several ways:
  20480. +
  20481. +                                                                           
  20482. +  - - - - - - - -         - - - - - - - -          - - - - - - - -
  20483. +  - - - - O - - -         - - O - O - - -          - - - - - - - -
  20484. +R * * * * - - - -         - - - * - - - -          O - - - - - - -
  20485. +  - - - - O - - -         - - - * - - - -        R - - - - - - - -
  20486. +  - - - - - - - -         - - - * - - - -          - - - - - - - -
  20487. +  - - - - - - - -         - - - * - - - -          - - - - - - - -
  20488. +  - - - - - - - -       R * * * * - - - -          - - - - - - - -
  20489. +  - - - - - - - -         - - - - O - - -          - - - - - - - -
  20490. +
  20491. +In the first example, the ray is deflected downwards by the upper
  20492. +ball, then left by the lower ball, and finally retraces its path to
  20493. +its point of origin.  The second example is similar.  The third
  20494. +example is a bit anomalous but can be rationalized by realizing the
  20495. +ray never gets a chance to get into the box.  Alternatively, the ray
  20496. +can be thought of as being deflected downwards and immediately
  20497. +emerging from the box.
  20498. +
  20499. +A hit occurs when a ray runs straight into a ball:
  20500. +
  20501. +  - - - - - - - -         - - - - - - - -          - - - - - - - -
  20502. +  - - - - - - - -         - - - - - - - -          - - - - O - - -
  20503. +  - - - - - - - -         - - - - O - - -        H * * * * - - - -
  20504. +  - - - - - - - -       H * * * * O - - -          - - - * - - - -
  20505. +  - - - - - - - -         - - - - O - - -          - - - O - - - -
  20506. +H * * * O - - - -         - - - - - - - -          - - - - - - - -
  20507. +  - - - - - - - -         - - - - - - - -          - - - - - - - -
  20508. +  - - - - - - - -         - - - - - - - -          - - - - - - - -
  20509. +
  20510. +Be sure to compare the second example of a hit with the first example of
  20511. +a reflection.Vbookmark-map
  20512. +Keymap containing bindings to bookmark functions.
  20513. +It is not bound to any key by default: to bind it
  20514. +so that you have a bookmark prefix, just use `global-set-key' and bind a
  20515. +key of your choice to `bookmark-map'.  All interactive bookmark
  20516. +functions have a binding in this keymap.Fbookmark-set
  20517. +Set a bookmark named NAME inside a file.  
  20518. +With prefix arg, will not overwrite a bookmark that has the same name
  20519. +as NAME if such a bookmark already exists, but instead will "push"
  20520. +the new bookmark onto the bookmark alist.  Thus the most recently set
  20521. +bookmark with name NAME would be the one in effect at any given time,
  20522. +but the others are still there, should you decide to delete the most
  20523. +recent one.
  20524. +
  20525. +To yank words from the text of the buffer and use them as part of the
  20526. +bookmark name, type C-w while setting a bookmark.  Successive C-w's
  20527. +yank successive words.
  20528. +
  20529. +Typing C-v inserts the name of the current file being visited. Typing
  20530. +C-u inserts the name of the last bookmark used in the buffer (as an
  20531. +aid in using a single bookmark name to track your progress through a
  20532. +large file).  If no bookmark was used, then C-u behaves like C-v and
  20533. +inserts the name of the file being visited.
  20534. +
  20535. +Use \[bookmark-delete] to remove bookmarks (you give it a name,
  20536. +and it removes only the first instance of a bookmark with that name from
  20537. +the list of bookmarks.)Fbookmark-jump
  20538. +Jump to bookmark BOOKMARK (a point in some file).  
  20539. +You may have a problem using this function if the value of variable
  20540. +`bookmark-alist' is nil.  If that happens, you need to load in some
  20541. +bookmarks.  See help on function `bookmark-load' for more about
  20542. +this.
  20543. +
  20544. +If the file pointed to by BOOKMARK no longer exists, you will be asked
  20545. +if you wish to give the bookmark a new location, and bookmark-jump
  20546. +will then jump to the new location, as well as recording it in place
  20547. +of the old one in the permanent bookmark record.Fbookmark-relocate
  20548. +Relocate BOOKMARK -- prompts for a filename, and makes an already
  20549. +existing bookmark point to that file, instead of the one it used to
  20550. +point at.  Useful when a file has been renamed after a bookmark was
  20551. +set in it.Fbookmark-locate
  20552. +Insert the name of the file associated with BOOKMARK.
  20553. +Optional second arg NO-INSERTION means merely return the filename as a
  20554. +string.Fbookmark-rename
  20555. +Change the name of OLD-BOOKMARK to NEWNAME.  
  20556. +If called from keyboard, prompts for OLD-BOOKMARK and NEWNAME.
  20557. +If called from menubar, OLD-BOOKMARK is selected from a menu, and
  20558. +prompts for NEWNAME. 
  20559. +If called from Lisp, prompts for NEWNAME if only OLD-BOOKMARK was
  20560. +passed as an argument.  If called with two strings, then no prompting
  20561. +is done.  You must pass at least OLD-BOOKMARK when calling from Lisp.
  20562. +
  20563. +While you are entering the new name, consecutive C-w's insert
  20564. +consectutive words from the text of the buffer into the new bookmark
  20565. +name, and C-v inserts the name of the file.Fbookmark-insert
  20566. +Insert the text of the file pointed to by bookmark BOOKMARK.  
  20567. +You may have a problem using this function if the value of variable
  20568. +`bookmark-alist' is nil.  If that happens, you need to load in some
  20569. +bookmarks.  See help on function `bookmark-load' for more about
  20570. +this.Fbookmark-delete
  20571. +Delete the bookmark named NAME from the bookmark list.  
  20572. +Removes only the first instance of a bookmark with that name.  If
  20573. +there are one or more other bookmarks with the same name, they will
  20574. +not be deleted.  Defaults to the "current" bookmark (that is, the
  20575. +one most recently used in this file, if any).Fbookmark-write
  20576. +Write bookmarks to a file (for which the user will be prompted
  20577. +interactively).  Don't use this in Lisp programs; use bookmark-save
  20578. +instead.Fbookmark-save
  20579. +Save currently defined bookmarks.
  20580. +Saves by default in the file defined by the variable
  20581. +`bookmark-file'.  With a prefix arg, save it in file FILE.
  20582. +
  20583. +If you are calling this from Lisp, the two arguments are PREFIX-ARG
  20584. +and FILE, and if you just want it to write to the default file, then
  20585. +pass no arguments.  Or pass in nil and FILE, and it will save in FILE
  20586. +instead.  If you pass in one argument, and it is non-nil, then the
  20587. +user will be interactively queried for a file to save in.
  20588. +
  20589. +When you want to load in the bookmarks from a file, use
  20590. +`bookmark-load', \[bookmark-load].  That function will prompt you
  20591. +for a file, defaulting to the file defined by variable
  20592. +`bookmark-file'.Fbookmark-load
  20593. +Load bookmarks from FILE (which must be in bookmark format).
  20594. +Appends loaded bookmarks to the front of the list of bookmarks.  If
  20595. +optional second argument REVERT is non-nil, existing bookmarks are
  20596. +destroyed.  Optional third arg NO-MSG means don't display any messages
  20597. +while loading.
  20598. +
  20599. +If you load a file that doesn't contain a proper bookmark alist, you
  20600. +will corrupt Emacs's bookmark list.  Generally, you should only load
  20601. +in files that were created with the bookmark functions in the first
  20602. +place.  Your own personal bookmark file, `~/.emacs-bkmrks', is
  20603. +maintained automatically by Emacs; you shouldn't need to load it
  20604. +explicitly.Flist-bookmarks
  20605. +Display a list of existing bookmarks.
  20606. +The list is displayed in a buffer named `*Bookmark List*'.
  20607. +The leftmost column displays a D if the bookmark is flagged for
  20608. +deletion, or > if it is flagged for displaying.Fbookmark-menu-bar-insert
  20609. +Insert the text of the file pointed to by bookmark BOOKMARK.  
  20610. +You may have a problem using this function if the value of variable
  20611. +`bookmark-alist' is nil.  If that happens, you need to load in some
  20612. +bookmarks.  See help on function `bookmark-load' for more about
  20613. +this.Fbookmark-menu-bar-jump
  20614. +Jump to bookmark BOOKMARK (a point in some file).  
  20615. +You may have a problem using this function if the value of variable
  20616. +`bookmark-alist' is nil.  If that happens, you need to load in some
  20617. +bookmarks.  See help on function `bookmark-load' for more about
  20618. +this.Fbookmark-menu-bar-locate
  20619. +Insert the name of the  file associated with BOOKMARK. 
  20620. +(This is not the same as the contents of that file).Fbookmark-menu-bar-rename
  20621. +Change the name of OLD-BOOKMARK to NEWNAME.  
  20622. +If called from keyboard, prompts for OLD-BOOKMARK and NEWNAME.
  20623. +If called from menubar, OLD-BOOKMARK is selected from a menu, and
  20624. +prompts for NEWNAME. 
  20625. +If called from Lisp, prompts for NEWNAME if only OLD-BOOKMARK was
  20626. +passed as an argument.  If called with two strings, then no prompting
  20627. +is done.  You must pass at least OLD-BOOKMARK when calling from Lisp.
  20628. +
  20629. +While you are entering the new name, consecutive C-w's insert
  20630. +consectutive words from the text of the buffer into the new bookmark
  20631. +name, and C-v inserts the name of the file.Fbookmark-menu-bar-delete
  20632. +Delete the bookmark named NAME from the bookmark list.  
  20633. +Removes only the first instance of a bookmark with that name.  If
  20634. +there are one or more other bookmarks with the same name, they will
  20635. +not be deleted.  Defaults to the "current" bookmark (that is, the
  20636. +one most recently used in this file, if any).Fbyte-recompile-directory
  20637. +Recompile every `.el' file in DIRECTORY that needs recompilation.
  20638. +This is if a `.elc' file exists but is older than the `.el' file.
  20639. +Files in subdirectories of DIRECTORY are processed also.
  20640. +
  20641. +If the `.elc' file does not exist, normally the `.el' file is *not* compiled.
  20642. +But a prefix argument (optional second arg) means ask user,
  20643. +for each such `.el' file, whether to compile it.  Prefix argument 0 means
  20644. +don't ask and compile the file anyway.
  20645. +
  20646. +A nonzero prefix argument also means ask about each subdirectory.Fbyte-compile-file
  20647. +Compile a file of Lisp code named FILENAME into a file of byte code.
  20648. +The output file's name is made by appending `c' to the end of FILENAME.
  20649. +With prefix arg (noninteractively: 2nd arg), load the file after compiling.Fcompile-defun
  20650. +Compile and evaluate the current top-level form.
  20651. +Print the result in the minibuffer.
  20652. +With argument, insert value in current buffer after the form.Fbyte-compile
  20653. +If FORM is a symbol, byte-compile its function definition.
  20654. +If FORM is a lambda or a macro, byte-compile it as a function.Fdisplay-call-tree
  20655. +Display a call graph of a specified file.
  20656. +This lists which functions have been called, what functions called
  20657. +them, and what functions they call.  The list includes all functions
  20658. +whose definitions have been compiled in this Emacs session, as well as
  20659. +all functions called by those functions.
  20660. +
  20661. +The call graph does not include macros, inline functions, or
  20662. +primitives that the byte-code interpreter knows about directly (eq,
  20663. +cons, etc.).
  20664. +
  20665. +The call tree also lists those functions which are not known to be called
  20666. +(that is, to which no calls have been compiled), and which cannot be
  20667. +invoked interactively.Fbatch-byte-compile
  20668. +Run `byte-compile-file' on the files remaining on the command line.
  20669. +Use this from the command line, with `-batch';
  20670. +it won't work in an interactive Emacs.
  20671. +Each file is processed even if an error occurred previously.
  20672. +For example, invoke "emacs -batch -f batch-byte-compile $emacs/ ~/*.el"Fbatch-byte-recompile-directory
  20673. +Runs `byte-recompile-directory' on the dirs remaining on the command line.
  20674. +Must be used only with `-batch', and kills Emacs on completion.
  20675. +For example, invoke `emacs -batch -f batch-byte-recompile-directory .'.Vcalendar-week-start-day
  20676. +*The day of the week on which a week in the calendar begins.
  20677. +0 means Sunday (default), 1 means Monday, and so on.Vview-diary-entries-initially
  20678. +*Non-nil means display current date's diary entries on entry.
  20679. +The diary is displayed in another window when the calendar is first displayed,
  20680. +if the current date is visible.  The number of days of diary entries displayed
  20681. +is governed by the variable `number-of-diary-entries'.Vnumber-of-diary-entries
  20682. +*Specifies how many days of diary entries are to be displayed initially.
  20683. +This variable affects the diary display when the command M-x diary is used,
  20684. +or if the value of the variable `view-diary-entries-initially' is t.  For
  20685. +example, if the default value 1 is used, then only the current day's diary
  20686. +entries will be displayed.  If the value 2 is used, then both the current
  20687. +day's and the next day's entries will be displayed.
  20688. +
  20689. +The value can also be a vector such as [0 2 2 2 2 4 1]; this value
  20690. +says to display no diary entries on Sunday, the display the entries
  20691. +for the current date and the day after on Monday through Thursday,
  20692. +display Friday through Monday's entries on Friday, and display only
  20693. +Saturday's entries on Saturday.
  20694. +
  20695. +This variable does not affect the diary display with the `d' command
  20696. +from the calendar; in that case, the prefix argument controls the
  20697. +number of days of diary entries displayed.Vmark-diary-entries-in-calendar
  20698. +*Non-nil means mark dates with diary entries, in the calendar window.
  20699. +The marking symbol is specified by the variable `diary-entry-marker'.Vview-calendar-holidays-initially
  20700. +*Non-nil means display holidays for current three month period on entry.
  20701. +The holidays are displayed in another window when the calendar is first
  20702. +displayed.Vmark-holidays-in-calendar
  20703. +*Non-nil means mark dates of holidays in the calendar window.
  20704. +The marking symbol is specified by the variable `calendar-holiday-marker'.Vall-hebrew-calendar-holidays
  20705. +*If nil, show only major holidays from the Hebrew calendar.
  20706. +This means only those Jewish holidays that appear on secular calendars.
  20707. +
  20708. +If t, show all the holidays that would appear in a complete Hebrew calendar.Vall-christian-calendar-holidays
  20709. +*If nil, show only major holidays from the Christian calendar.
  20710. +This means only those Christian holidays that appear on secular calendars.
  20711. +
  20712. +If t, show all the holidays that would appear in a complete Christian
  20713. +calendar.Vall-islamic-calendar-holidays
  20714. +*If nil, show only major holidays from the Islamic calendar.
  20715. +This means only those Islamic holidays that appear on secular calendars.
  20716. +
  20717. +If t, show all the holidays that would appear in a complete Islamic
  20718. +calendar.Vcalendar-load-hook
  20719. +*List of functions to be called after the calendar is first loaded.
  20720. +This is the place to add key bindings to `calendar-mode-map'.Vinitial-calendar-window-hook
  20721. +*List of functions to be called when the calendar window is first opened.
  20722. +The functions invoked are called after the calendar window is opened, but
  20723. +once opened is never called again.  Leaving the calendar with the `q' command
  20724. +and reentering it will cause these functions to be called again.Vtoday-visible-calendar-hook
  20725. +*List of functions called whenever the current date is visible.
  20726. +This can be used, for example, to replace today's date with asterisks; a
  20727. +function `calendar-star-date' is included for this purpose:
  20728. +    (setq today-visible-calendar-hook 'calendar-star-date)
  20729. +It can also be used to mark the current date with `calendar-today-marker';
  20730. +a function is also provided for this:
  20731. +    (setq today-visible-calendar-hook 'calendar-mark-today)
  20732. +
  20733. +The corresponding variable `today-invisible-calendar-hook' is the list of
  20734. +functions called when the calendar function was called when the current
  20735. +date is not visible in the window.
  20736. +
  20737. +Other than the use of the provided functions, the changing of any
  20738. +characters in the calendar buffer by the hooks may cause the failure of the
  20739. +functions that move by days and weeks.Vtoday-invisible-calendar-hook
  20740. +*List of functions called whenever the current date is not visible.
  20741. +
  20742. +The corresponding variable `today-visible-calendar-hook' is the list of
  20743. +functions called when the calendar function was called when the current
  20744. +date is visible in the window.
  20745. +
  20746. +Other than the use of the provided functions, the changing of any
  20747. +characters in the calendar buffer by the hooks may cause the failure of the
  20748. +functions that move by days and weeks.Vdiary-file
  20749. +*Name of the file in which one's personal diary of dates is kept.
  20750. +
  20751. +The file's entries are lines in any of the forms
  20752. +
  20753. +            MONTH/DAY
  20754. +            MONTH/DAY/YEAR
  20755. +            MONTHNAME DAY
  20756. +            MONTHNAME DAY, YEAR
  20757. +            DAYNAME
  20758. +
  20759. +at the beginning of the line; the remainder of the line is the diary entry
  20760. +string for that date.  MONTH and DAY are one or two digit numbers, YEAR is
  20761. +a number and may be written in full or abbreviated to the final two digits.
  20762. +If the date does not contain a year, it is generic and applies to any year.
  20763. +DAYNAME entries apply to any date on which is on that day of the week.
  20764. +MONTHNAME and DAYNAME can be spelled in full, abbreviated to three
  20765. +characters (with or without a period), capitalized or not.  Any of DAY,
  20766. +MONTH, or MONTHNAME, YEAR can be `*' which matches any day, month, or year,
  20767. +respectively.
  20768. +
  20769. +The European style (in which the day precedes the month) can be used
  20770. +instead, if you execute `european-calendar' when in the calendar, or set
  20771. +`european-calendar-style' to t in your .emacs file.  The European forms are
  20772. +
  20773. +            DAY/MONTH
  20774. +            DAY/MONTH/YEAR
  20775. +            DAY MONTHNAME
  20776. +            DAY MONTHNAME YEAR
  20777. +            DAYNAME
  20778. +
  20779. +To revert to the default American style from the European style, execute
  20780. +`american-calendar' in the calendar.
  20781. +
  20782. +A diary entry can be preceded by the character
  20783. +`diary-nonmarking-symbol' (ordinarily `&') to make that entry
  20784. +nonmarking--that is, it will not be marked on dates in the calendar
  20785. +window but will appear in a diary window.
  20786. +
  20787. +Multiline diary entries are made by indenting lines after the first with
  20788. +either a TAB or one or more spaces.
  20789. +
  20790. +Lines not in one the above formats are ignored.  Here are some sample diary
  20791. +entries (in the default American style):
  20792. +
  20793. +     12/22/1988 Twentieth wedding anniversary!!
  20794. +     &1/1. Happy New Year!
  20795. +     10/22 Ruth's birthday.
  20796. +     21: Payday
  20797. +     Tuesday--weekly meeting with grad students at 10am
  20798. +              Supowit, Shen, Bitner, and Kapoor to attend.
  20799. +     1/13/89 Friday the thirteenth!!
  20800. +     &thu 4pm squash game with Lloyd.
  20801. +     mar 16 Dad's birthday
  20802. +     April 15, 1989 Income tax due.
  20803. +     &* 15 time cards due.
  20804. +
  20805. +If the first line of a diary entry consists only of the date or day name with
  20806. +no trailing blanks or punctuation, then that line is not displayed in the
  20807. +diary window; only the continuation lines is shown.  For example, the
  20808. +single diary entry
  20809. +
  20810. +     02/11/1989
  20811. +      Bill Blattner visits Princeton today
  20812. +      2pm Cognitive Studies Committee meeting
  20813. +      2:30-5:30 Lizzie at Lawrenceville for `Group Initiative'
  20814. +      4:00pm Jamie Tappenden
  20815. +      7:30pm Dinner at George and Ed's for Alan Ryan
  20816. +      7:30-10:00pm dance at Stewart Country Day School
  20817. +
  20818. +will appear in the diary window without the date line at the beginning.  This
  20819. +facility allows the diary window to look neater, but can cause confusion if
  20820. +used with more than one day's entries displayed.
  20821. +
  20822. +Diary entries can be based on Lisp sexps.  For example, the diary entry
  20823. +
  20824. +      %%(diary-block 11 1 1990 11 10 1990) Vacation
  20825. +
  20826. +causes the diary entry "Vacation" to appear from November 1 through November
  20827. +10, 1990.  Other functions available are `diary-float', `diary-anniversary',
  20828. +`diary-cyclic', `diary-day-of-year', `diary-iso-date', `diary-french-date',
  20829. +`diary-hebrew-date', `diary-islamic-date', `diary-mayan-date',
  20830. +`diary-yahrzeit', `diary-sunrise-sunset', `diary-phases-of-moon',
  20831. +`diary-parasha', `diary-omer', `diary-rosh-hodesh', and
  20832. +`diary-sabbath-candles'.  See the documentation for the function
  20833. +`list-sexp-diary-entries' for more details.
  20834. +
  20835. +Diary entries based on the Hebrew and/or the Islamic calendar are also
  20836. +possible, but because these are somewhat slow, they are ignored
  20837. +unless you set the `nongregorian-diary-listing-hook' and the
  20838. +`nongregorian-diary-marking-hook' appropriately.  See the documentation
  20839. +for these functions for details.
  20840. +
  20841. +Diary files can contain directives to include the contents of other files; for
  20842. +details, see the documentation for the variable `list-diary-entries-hook'.Vdiary-nonmarking-symbol
  20843. +*Symbol indicating that a diary entry is not to be marked in the calendar.Vhebrew-diary-entry-symbol
  20844. +*Symbol indicating a diary entry according to the Hebrew calendar.Vislamic-diary-entry-symbol
  20845. +*Symbol indicating a diary entry according to the Islamic calendar.Vdiary-include-string
  20846. +*The string indicating inclusion of another file of diary entries.
  20847. +See the documentation for the function `include-other-diary-files'.Vsexp-diary-entry-symbol
  20848. +*The string used to indicate a sexp diary entry in diary-file.
  20849. +See the documentation for the function `list-sexp-diary-entries'.Vabbreviated-calendar-year
  20850. +*Interpret a two-digit year DD in a diary entry as either 19DD or 20DD.
  20851. +For the Gregorian calendar; similarly for the Hebrew and Islamic calendars.
  20852. +If this variable is nil, years must be written in full.Veuropean-calendar-style
  20853. +*Use the European style of dates in the diary and in any displays.
  20854. +If this variable is t, a date 1/2/1990 would be interpreted as February 1,
  20855. +1990.  The accepted European date styles are
  20856. +
  20857. +            DAY/MONTH
  20858. +            DAY/MONTH/YEAR
  20859. +            DAY MONTHNAME
  20860. +            DAY MONTHNAME YEAR
  20861. +            DAYNAME
  20862. +
  20863. +Names can be capitalized or not, written in full, or abbreviated to three
  20864. +characters with or without a period.Vamerican-date-diary-pattern
  20865. +*List of pseudo-patterns describing the American patterns of date used.
  20866. +See the documentation of `diary-date-forms' for an explanation.Veuropean-date-diary-pattern
  20867. +*List of pseudo-patterns describing the European patterns of date used.
  20868. +See the documentation of `diary-date-forms' for an explanation.Veuropean-calendar-display-form
  20869. +*Pseudo-pattern governing the way a date appears in the European style.
  20870. +See the documentation of calendar-date-display-form for an explanation.Vamerican-calendar-display-form
  20871. +*Pseudo-pattern governing the way a date appears in the American style.
  20872. +See the documentation of `calendar-date-display-form' for an explanation.Vprint-diary-entries-hook
  20873. +*List of functions called after a temporary diary buffer is prepared.
  20874. +The buffer shows only the diary entries currently visible in the diary
  20875. +buffer.  The default just does the printing.  Other uses might include, for
  20876. +example, rearranging the lines into order by day and time, saving the buffer
  20877. +instead of deleting it, or changing the function used to do the printing.Vlist-diary-entries-hook
  20878. +*List of functions called after diary file is culled for relevant entries.
  20879. +It is to be used for diary entries that are not found in the diary file.
  20880. +
  20881. +A function `include-other-diary-files' is provided for use as the value of
  20882. +this hook.  This function enables you to use shared diary files together
  20883. +with your own.  The files included are specified in the diary file by lines
  20884. +of the form
  20885. +
  20886. +        #include "filename"
  20887. +
  20888. +This is recursive; that is, #include directives in files thus included are
  20889. +obeyed.  You can change the "#include" to some other string by changing
  20890. +the variable `diary-include-string'.  When you use `include-other-diary-files'
  20891. +as part of the list-diary-entries-hook, you will probably also want to use the
  20892. +function `mark-included-diary-files' as part of `mark-diary-entries-hook'.
  20893. +
  20894. +For example, you could use
  20895. +
  20896. +     (setq list-diary-entries-hook
  20897. +       '(include-other-diary-files sort-diary-entries))
  20898. +     (setq diary-display-hook 'fancy-diary-display)
  20899. +
  20900. +in your `.emacs' file to cause the fancy diary buffer to be displayed with
  20901. +diary entries from various included files, each day's entries sorted into
  20902. +lexicographic order.Vdiary-hook
  20903. +*List of functions called after the display of the diary.
  20904. +Can be used for appointment notification.Vdiary-display-hook
  20905. +*List of functions that handle the display of the diary.
  20906. +If nil (the default), `simple-diary-display' is used.  Use `ignore' for no
  20907. +diary display.
  20908. +
  20909. +Ordinarily, this just displays the diary buffer (with holidays indicated in
  20910. +the mode line), if there are any relevant entries.  At the time these
  20911. +functions are called, the variable `diary-entries-list' is a list, in order
  20912. +by date, of all relevant diary entries in the form of ((MONTH DAY YEAR)
  20913. +STRING), where string is the diary entry for the given date.  This can be
  20914. +used, for example, a different buffer for display (perhaps combined with
  20915. +holidays), or produce hard copy output.
  20916. +
  20917. +A function `fancy-diary-display' is provided as an alternative
  20918. +choice for this hook; this function prepares a special noneditable diary
  20919. +buffer with the relevant diary entries that has neat day-by-day arrangement
  20920. +with headings.  The fancy diary buffer will show the holidays unless the
  20921. +variable `holidays-in-diary-buffer' is set to nil.  Ordinarily, the fancy
  20922. +diary buffer will not show days for which there are no diary entries, even
  20923. +if that day is a holiday; if you want such days to be shown in the fancy
  20924. +diary buffer, set the variable `diary-list-include-blanks' to t.Vnongregorian-diary-listing-hook
  20925. +*List of functions called for listing diary file and included files.
  20926. +As the files are processed for diary entries, these functions are used to cull
  20927. +relevant entries.  You can use either or both of `list-hebrew-diary-entries'
  20928. +and `list-islamic-diary-entries'.  The documentation for these functions
  20929. +describes the style of such diary entries.Vmark-diary-entries-hook
  20930. +*List of functions called after marking diary entries in the calendar.
  20931. +
  20932. +A function `mark-included-diary-files' is also provided for use as the
  20933. +mark-diary-entries-hook; it enables you to use shared diary files together
  20934. +with your own.  The files included are specified in the diary file by lines
  20935. +of the form
  20936. +        #include "filename"
  20937. +This is recursive; that is, #include directives in files thus included are
  20938. +obeyed.  You can change the "#include" to some other string by changing the
  20939. +variable `diary-include-string'.  When you use `mark-included-diary-files' as
  20940. +part of the mark-diary-entries-hook, you will probably also want to use the
  20941. +function `include-other-diary-files' as part of `list-diary-entries-hook'.Vnongregorian-diary-marking-hook
  20942. +*List of functions called for marking diary file and included files.
  20943. +As the files are processed for diary entries, these functions are used to cull
  20944. +relevant entries.  You can use either or both of `mark-hebrew-diary-entries'
  20945. +and `mark-islamic-diary-entries'.  The documentation for these functions
  20946. +describes the style of such diary entries.Vdiary-list-include-blanks
  20947. +*If nil, do not include days with no diary entry in the list of diary entries.
  20948. +Such days will then not be shown in the the fancy diary buffer, even if they
  20949. +are holidays.Vholidays-in-diary-buffer
  20950. +*Non-nil means include holidays in the diary display.
  20951. +The holidays appear in the mode line of the diary buffer, or in the
  20952. +fancy diary buffer next to the date.  This slows down the diary functions
  20953. +somewhat; setting it to nil makes the diary display faster.Vgeneral-holidays
  20954. +*General holidays.  Default value is for the United States.
  20955. +See the documentation for `calendar-holidays' for details.Vlocal-holidays
  20956. +*Local holidays.
  20957. +See the documentation for `calendar-holidays' for details.Vother-holidays
  20958. +*User defined holidays.
  20959. +See the documentation for `calendar-holidays' for details.Vhebrew-holidays
  20960. +*Jewish holidays.
  20961. +See the documentation for `calendar-holidays' for details.Vchristian-holidays
  20962. +*Christian holidays.
  20963. +See the documentation for `calendar-holidays' for details.Vislamic-holidays
  20964. +*Islamic holidays.
  20965. +See the documentation for `calendar-holidays' for details.Vsolar-holidays
  20966. +*Sun-related holidays.
  20967. +See the documentation for `calendar-holidays' for details.Fcalendar
  20968. +Display a three-month calendar in another window.
  20969. +The three months appear side by side, with the current month in the middle
  20970. +surrounded by the previous and next months.  The cursor is put on today's date.
  20971. +
  20972. +If called with an optional prefix argument, prompts for month and year.
  20973. +
  20974. +This function is suitable for execution in a .emacs file; appropriate setting
  20975. +of the variable `view-diary-entries-initially' will cause the diary entries for
  20976. +the current date to be displayed in another window.  The value of the variable
  20977. +`number-of-diary-entries' controls the number of days of diary entries
  20978. +displayed upon initial display of the calendar.
  20979. +
  20980. +An optional prefix argument ARG causes the calendar displayed to be ARG
  20981. +months in the future if ARG is positive or in the past if ARG is negative;
  20982. +in this case the cursor goes on the first day of the month.
  20983. +
  20984. +Once in the calendar window, future or past months can be moved into view.
  20985. +Arbitrary months can be displayed, or the calendar can be scrolled forward
  20986. +or backward.
  20987. +
  20988. +The cursor can be moved forward or backward by one day, one week, one month,
  20989. +or one year.  All of these commands take prefix arguments which, when negative,
  20990. +cause movement in the opposite direction.  For convenience, the digit keys
  20991. +and the minus sign are automatically prefixes.  The window is replotted as
  20992. +necessary to display the desired date.
  20993. +
  20994. +Diary entries can be marked on the calendar or displayed in another window.
  20995. +
  20996. +Use M-x describe-mode for details of the key bindings in the calendar window.
  20997. +
  20998. +The Gregorian calendar is assumed.
  20999. +
  21000. +After loading the calendar, the hooks given by the variable
  21001. +`calendar-load-hook' are run.  This the place to add key bindings to the
  21002. +calendar-mode-map.
  21003. +
  21004. +After preparing the calendar window initially, the hooks given by the variable
  21005. +`initial-calendar-window-hook' are run.
  21006. +
  21007. +The hooks given by the variable `today-visible-calendar-hook' are run
  21008. +everytime the calendar window gets scrolled, if the current date is visible
  21009. +in the window.  If it is not visible, the hooks given by the variable
  21010. +`today-invisible-calendar-hook' are run.  Thus, for example, setting
  21011. +`today-visible-calendar-hook' to 'calendar-star-date will cause today's date
  21012. +to be replaced by asterisks to highlight it whenever it is in the window.Flist-yahrzeit-dates
  21013. +List Yahrzeit dates for *Gregorian* DEATH-DATE from START-YEAR to END-YEAR.
  21014. +When called interactively from the calendar window, the date of death is taken
  21015. +from the cursor position.Fdescribe-buffer-case-table
  21016. +Describe the case table of the current buffer.Fset-case-syntax-delims
  21017. +Make characters L and R a matching pair of non-case-converting delimiters.
  21018. +This sets the entries for L and R in TABLE, which is a string
  21019. +that will be used as the downcase part of a case table.
  21020. +It also modifies `standard-syntax-table' to
  21021. +indicate left and right delimiters.Fset-case-syntax-pair
  21022. +Make characters UC and LC a pair of inter-case-converting letters.
  21023. +This sets the entries for characters UC and LC in TABLE, which is a string
  21024. +that will be used as the downcase part of a case table.
  21025. +It also modifies `standard-syntax-table' to give them the syntax of
  21026. +word constituents.Fset-case-syntax
  21027. +Make characters C case-invariant with syntax SYNTAX.
  21028. +This sets the entries for character C in TABLE, which is a string
  21029. +that will be used as the downcase part of a case table.
  21030. +It also modifies `standard-syntax-table'.
  21031. +SYNTAX should be " ", "w", "." or "_".Frepeat-matching-complex-command
  21032. +Edit and re-evaluate complex command with name matching PATTERN.
  21033. +Matching occurrences are displayed, most recent first, until you select
  21034. +a form for evaluation.  If PATTERN is empty (or nil), every form in the
  21035. +command history is offered.  The form is placed in the minibuffer for
  21036. +editing and the result is evaluated.Flist-command-history
  21037. +List history of commands typed to minibuffer.
  21038. +The number of commands listed is controlled by `list-command-history-max'.
  21039. +Calls value of `list-command-history-filter' (if non-nil) on each history
  21040. +element to judge if that element should be excluded from the list.
  21041. +
  21042. +The buffer is left in Command History mode.Fcommand-history-mode
  21043. +Major mode for examining commands from `command-history'.
  21044. +The number of commands listed is controlled by `list-command-history-max'.
  21045. +The command history is filtered by `list-command-history-filter' if non-nil.
  21046. +Use \<command-history-map>\[command-history-repeat] to repeat the command on the current line.
  21047. +
  21048. +Otherwise much like Emacs-Lisp Mode except that there is no self-insertion
  21049. +and digits provide prefix arguments.  Tab does not indent.
  21050. +\{command-history-map}
  21051. +Calls the value of `command-history-hook' if that is non-nil.
  21052. +The Command History listing is recomputed each time this mode is invoked.Fmake-comint
  21053. +Make a comint process NAME in a buffer, running PROGRAM.
  21054. +The name of the buffer is made by surrounding NAME with `*'s.
  21055. +If there is already a running process in that buffer, it is not restarted.
  21056. +Optional third arg STARTFILE is the name of a file to send the contents of to 
  21057. +the process.  Any more args are arguments to PROGRAM.Fcomint-run
  21058. +Run PROGRAM in a comint buffer and switch to it.
  21059. +The buffer name is made by surrounding the file name of PROGRAM with `*'s.
  21060. +The file name is used to make a symbol name, such as `comint-sh-hook', and any
  21061. +hooks on this symbol are run in the buffer.
  21062. +See `make-comint' and `comint-exec'.Fcompare-windows
  21063. +Compare text in current window with text in next window.
  21064. +Compares the text starting at point in each window,
  21065. +moving over text in each one as far as they match.
  21066. +
  21067. +A prefix arg means ignore changes in whitespace.
  21068. +The variable `compare-windows-whitespace' controls how whitespace is skipped.
  21069. +If `compare-ignore-case' is non-nil, changes in case are also ignored.Vcompilation-mode-hook
  21070. +*List of hook functions run by `compilation-mode' (see `run-hooks').Vcompilation-window-height
  21071. +*Number of lines in a compilation window.  If nil, use Emacs default.Vcompilation-buffer-name-function
  21072. +Function to compute the name of a compilation buffer.
  21073. +The function receives one argument, the name of the major mode of the
  21074. +compilation buffer.  It should return a string.
  21075. +nil means compute the name with `(concat "*" (downcase major-mode) "*")'.Vcompilation-finish-function
  21076. +*Function to call when a compilation process finishes.
  21077. +It is called with two arguments: the compilation buffer, and a string
  21078. +describing how the process finished.Vcompilation-search-path
  21079. +*List of directories to search for source files named in error messages.
  21080. +Elements should be directory names, not file names of directories.
  21081. +nil as an element means to try the default directory.Fcompile
  21082. +Compile the program including the current buffer.  Default: run `make'.
  21083. +Runs COMMAND, a shell command, in a separate process asynchronously
  21084. +with output going to the buffer `*compilation*'.
  21085. +
  21086. +You can then use the command \[next-error] to find the next error message
  21087. +and move to the source code that caused it.
  21088. +
  21089. +To run more than one compilation at once, start one and rename the
  21090. +`*compilation*' buffer to some other name with \[rename-buffer].
  21091. +Then start the next one.
  21092. +
  21093. +The name used for the buffer is actually whatever is returned by
  21094. +the function in `compilation-buffer-name-function', so you can set that
  21095. +to a function that generates a unique name.Fgrep
  21096. +Run grep, with user-specified args, and collect output in a buffer.
  21097. +While grep runs asynchronously, you can use the \[next-error] command
  21098. +to find the text that grep hits refer to.
  21099. +
  21100. +This command uses a special history list for its arguments, so you can
  21101. +easily repeat a grep command.Fcompilation-minor-mode
  21102. +Toggle compilation minor mode.
  21103. +With arg, turn compilation mode on if and only if arg is positive.
  21104. +See `compilation-mode'.Fnext-error
  21105. +Visit next compilation error message and corresponding source code.
  21106. +This operates on the output from the \[compile] command.
  21107. +If all preparsed error messages have been processed,
  21108. +the error message buffer is checked for new ones.
  21109. +
  21110. +A prefix arg specifies how many error messages to move;
  21111. +negative means move back to previous error messages.
  21112. +Just C-u as a prefix means reparse the error message buffer
  21113. +and start at the first error.
  21114. +
  21115. +\[next-error] normally applies to the most recent compilation started,
  21116. +but as long as you are in the middle of parsing errors from one compilation
  21117. +output buffer, you stay with that compilation output buffer.
  21118. +
  21119. +Use \[next-error] in a compilation output buffer to switch to
  21120. +processing errors from that compilation.
  21121. +
  21122. +See variables `compilation-parse-errors-function' and
  21123. +`compilation-error-regexp-alist' for customization ideas.Fcookie
  21124. +Return a random phrase from PHRASE-FILE.  When the phrase file
  21125. +is read in, display STARTMSG at beginning of load, ENDMSG at end.Fcookie-insert
  21126. +Insert random phrases from PHRASE-FILE; COUNT of them.  When the phrase file
  21127. +is read in, display STARTMSG at beginning of load, ENDMSG at end.Fcookie-snarf
  21128. +Reads in the PHRASE-FILE, returns it as a vector of strings.
  21129. +Emit STARTMSG and ENDMSG before and after.  Caches the result; second
  21130. +and subsequent calls on the same file won't go to disk.Fshuffle-vector
  21131. +Randomly permute the elements of VECTOR (all permutations equally likely)Fc++-mode
  21132. +Major mode for editing C++ code.  Very much like editing C code.
  21133. +Expression and list commands understand all C++ brackets.
  21134. +Tab at left margin indents for C++ code
  21135. +Comments are delimited with /* ... */ {or with // ... <newline>}
  21136. +Paragraphs are separated by blank lines only.
  21137. +Delete converts tabs to spaces as it moves back.
  21138. +\{c++-mode-map}
  21139. +Variables controlling indentation style:
  21140. + c-tab-always-indent
  21141. +    Non-nil means TAB in C mode should always reindent the current line,
  21142. +    regardless of where in the line point is when the TAB command is used.
  21143. +    Default is t.
  21144. + c-auto-newline
  21145. +    Non-nil means automatically newline before and after braces,
  21146. +    and after colons and semicolons, inserted in C code.
  21147. + c-indent-level
  21148. +    Indentation of C statements within surrounding block.
  21149. +    The surrounding block's indentation is the indentation
  21150. +    of the line on which the open-brace appears.
  21151. + c-continued-statement-offset
  21152. +    Extra indentation given to a substatement, such as the
  21153. +    then-clause of an if or body of a while.
  21154. + c-continued-brace-offset
  21155. +    Extra indentation given to a brace that starts a substatement.
  21156. +    This is in addition to c-continued-statement-offset.
  21157. + c-brace-offset
  21158. +    Extra indentation for line if it starts with an open brace.
  21159. + c-brace-imaginary-offset
  21160. +    An open brace following other text is treated as if it were
  21161. +    this far to the right of the start of its line.
  21162. + c-argdecl-indent
  21163. +    Indentation level of declarations of C function arguments.
  21164. + c-label-offset
  21165. +    Extra indentation for line that is a label, or case or ``default:'', or
  21166. +    ``public:'' or ``private:'', or ``protected:''.
  21167. + c++-electric-colon
  21168. +    If non-nil at invocation of c++-mode (t is the default) colon electricly
  21169. +    indents.
  21170. + c++-empty-arglist-indent
  21171. +    If non-nil, a function declaration or invocation which ends a line with a
  21172. +    left paren is indented this many extra spaces, instead of flush with the
  21173. +    left paren.
  21174. + c++-friend-offset
  21175. +    Offset of C++ friend declarations relative to member declarations.
  21176. + c++-member-init-indent
  21177. +    Indentation level of member initializations in function declarations,
  21178. +    if they are on a separate line beginning with a colon.
  21179. + c++-continued-member-init-offset
  21180. +    Extra indentation for continuation lines of member initializations; NIL
  21181. +    means to align with previous initializations rather than with the colon.
  21182. +
  21183. +Settings for K&R, BSD, and Stroustrup indentation styles are
  21184. +  c-indent-level                5    8    4
  21185. +  c-continued-statement-offset  5    8    4
  21186. +  c-continued-brace-offset                0
  21187. +  c-brace-offset               -5   -8    0
  21188. +  c-brace-imaginary-offset                0
  21189. +  c-argdecl-indent              0    8    4
  21190. +  c-label-offset               -5   -8   -4
  21191. +  c++-empty-arglist-indent                4
  21192. +  c++-friend-offset                       0
  21193. +
  21194. +Turning on C++ mode calls the value of the variable `c++-mode-hook' with
  21195. +no args if that value is non-nil.Fdabbrev-expand
  21196. +Expand previous word "dynamically".
  21197. +Expands to the most recent, preceding word for which this is a prefix.
  21198. +If no suitable preceding word is found, words following point are considered.
  21199. +
  21200. +If `case-fold-search' and `case-replace' are non-nil (usually true)
  21201. +then the substituted word may be case-adjusted to match the abbreviation
  21202. +that you had typed.  This takes place if the substituted word, as found,
  21203. +is all lower case, or if it is at the beginning of a sentence and only
  21204. +its first letter was upper case.
  21205. +
  21206. +A positive prefix arg N says to take the Nth backward DISTINCT
  21207. +possibility.  A negative argument says search forward.  The variable
  21208. +`dabbrev-backward-only' may be used to limit the direction of search to
  21209. +backward if set non-nil.
  21210. +
  21211. +If the cursor has not moved from the end of the previous expansion and
  21212. +no argument is given, replace the previously-made expansion
  21213. +with the next possible expansion not yet tried.Fdebug
  21214. +Enter debugger.  To return, type \<debugger-mode-map>`\[debugger-continue]'.
  21215. +Arguments are mainly for use when this is called from the internals
  21216. +of the evaluator.
  21217. +
  21218. +You may call with no args, or you may pass nil as the first arg and
  21219. +any other args you like.  In that case, the list of args after the
  21220. +first will be printed into the backtrace buffer.Fdebug-on-entry
  21221. +Request FUNCTION to invoke debugger each time it is called.
  21222. +If you tell the debugger to continue, FUNCTION's execution proceeds.
  21223. +This works by modifying the definition of FUNCTION,
  21224. +which must be written in Lisp, not predefined.
  21225. +Use \[cancel-debug-on-entry] to cancel the effect of this command.
  21226. +Redefining FUNCTION also cancels it.Fcancel-debug-on-entry
  21227. +Undo effect of \[debug-on-entry] on FUNCTION.
  21228. +If argument is nil or an empty string, cancel for all functions.Fdelete-selection-mode
  21229. +Toggle Delete Selection mode.
  21230. +When ON, typed text replaces the selection if the selection is active.
  21231. +When OFF, typed text is just inserted at point.Fdefine-derived-mode
  21232. +Create a new mode as a variant of an existing mode.
  21233. +
  21234. +The arguments to this command are as follow:
  21235. +
  21236. +PARENT:    the name of the command for the parent mode (ie. text-mode).
  21237. +CHILD:     the name of the command for the derived mode.
  21238. +NAME:      a string which will appear in the status line (ie. "Hypertext")
  21239. +DOCSTRING: an optional documentation string--if you do not supply one,
  21240. +           the function will attempt to invent something useful.
  21241. +BODY:      forms to execute just before running the
  21242. +           hooks for the new mode.
  21243. +
  21244. +Here is how you could define LaTeX-Thesis mode as a variant of LaTeX mode:
  21245. +
  21246. +  (define-derived-mode LaTeX-thesis-mode LaTeX-mode "LaTeX-Thesis")
  21247. +
  21248. +You could then make new key bindings for `LaTeX-thesis-mode-map'
  21249. +without changing regular LaTeX mode.  In this example, BODY is empty,
  21250. +and DOCSTRING is generated by default.
  21251. +
  21252. +On a more complicated level, the following command uses sgml-mode as
  21253. +the parent, and then sets the variable `case-fold-search' to nil:
  21254. +
  21255. +  (define-derived-mode article-mode sgml-mode "Article"
  21256. +    "Major mode for editing technical articles."
  21257. +    (setq case-fold-search nil))
  21258. +
  21259. +Note that if the documentation string had been left out, it would have
  21260. +been generated automatically, with a reference to the keymap.Fderived-mode-init-mode-variables
  21261. +Initialise variables for a new mode. 
  21262. +Right now, if they don't already exist, set up a blank keymap, an
  21263. +empty syntax table, and an empty abbrev table -- these will be merged
  21264. +the first time the mode is used.Fdiary
  21265. +Generate the diary window for ARG days starting with the current date.
  21266. +If no argument is provided, the number of days of diary entries is governed
  21267. +by the variable `number-of-diary-entries'.  This function is suitable for
  21268. +execution in a `.emacs' file.Fdiff
  21269. +Find and display the differences between OLD and NEW files.
  21270. +Interactively the current buffer's file name is the default for NEW
  21271. +and a backup file for NEW is the default for OLD.
  21272. +With prefix arg, prompt for diff switches.Fdiff-backup
  21273. +Diff this file with its backup file or vice versa.
  21274. +Uses the latest backup, if there are several numerical backups.
  21275. +If this file is a backup, diff it with its original.
  21276. +The backup file is the first file given to `diff'.Vdired-listing-switches
  21277. +*Switches passed to `ls' for dired.  MUST contain the `l' option.
  21278. +May contain all other options that don't contradict `-l';
  21279. +may contain even `F', `b', `i' and `s'.  See also the variable
  21280. +`dired-ls-F-marks-symlinks' concerning the `F' switch.Vdired-chown-program
  21281. +Name of chown command (usually `chown' or `/etc/chown').Vdired-ls-F-marks-symlinks
  21282. +*Informs dired about how `ls -lF' marks symbolic links.
  21283. +Set this to t if `insert-directory-program' with `-lF' marks the symbolic link
  21284. +itself with a trailing @ (usually the case under Ultrix).
  21285. +
  21286. +Example: if `ln -s foo bar; ls -F bar' gives `bar -> foo', set it to
  21287. +nil (the default), if it gives `bar@ -> foo', set it to t.
  21288. +
  21289. +Dired checks if there is really a @ appended.  Thus, if you have a
  21290. +marking `ls' program on one host and a non-marking on another host, and
  21291. +don't care about symbolic links which really end in a @, you can
  21292. +always set this variable to t.Vdired-trivial-filenames
  21293. +*Regexp of files to skip when finding first file of a directory.
  21294. +A value of nil means move to the subdir line.
  21295. +A value of t means move to first file.Vdired-keep-marker-rename
  21296. +*Controls marking of renamed files.
  21297. +If t, files keep their previous marks when they are renamed.
  21298. +If a character, renamed files (whether previously marked or not)
  21299. +are afterward marked with that character.Vdired-keep-marker-copy
  21300. +*Controls marking of copied files.
  21301. +If t, copied files are marked if and as the corresponding original files were.
  21302. +If a character, copied files are unconditionally marked with that character.Vdired-keep-marker-hardlink
  21303. +*Controls marking of newly made hard links.
  21304. +If t, they are marked if and as the files linked to were marked.
  21305. +If a character, new links are unconditionally marked with that character.Vdired-keep-marker-symlink
  21306. +*Controls marking of newly made symbolic links.
  21307. +If t, they are marked if and as the files linked to were marked.
  21308. +If a character, new links are unconditionally marked with that character.Vdired-dwim-target
  21309. +*If non-nil, dired tries to guess a default target directory.
  21310. +This means: if there is a dired buffer displayed in the next window,
  21311. +use its current subdir, instead of the current subdir of this dired buffer.
  21312. +
  21313. +The target is used in the prompt for file copy, rename etc.Vdired-copy-preserve-time
  21314. +*If non-nil, Dired preserves the last-modified time in a file copy.
  21315. +(This works on only some systems.)Fdired
  21316. +"Edit" directory DIRNAME--delete, rename, print, etc. some files in it.
  21317. +Optional second argument SWITCHES specifies the `ls' options used.
  21318. +(Interactively, use a prefix argument to be able to specify SWITCHES.)
  21319. +Dired displays a list of files in DIRNAME (which may also have
  21320. +shell wildcards appended to select certain files).  If DIRNAME is a cons,
  21321. +its first element is taken as the directory name and the resr as an explicit
  21322. +list of files to make directory entries for.
  21323. +\<dired-mode-map>You can move around in it with the usual commands.
  21324. +You can flag files for deletion with \[dired-flag-file-deletion] and then
  21325. +delete them by typing \[dired-do-flagged-delete].
  21326. +Type \[describe-mode] after entering dired for more info.
  21327. +
  21328. +If DIRNAME is already in a dired buffer, that buffer is used without refresh.Fdired-other-window
  21329. +"Edit" directory DIRNAME.  Like `dired' but selects in another window.Fdired-other-frame
  21330. +"Edit" directory DIRNAME.  Like `dired' but makes a new frame.Fdired-noselect
  21331. +Like `dired' but returns the dired buffer as value, does not select it.Fdired-diff
  21332. +Compare file at point with file FILE using `diff'.
  21333. +FILE defaults to the file at the mark.
  21334. +The prompted-for file is the first file given to `diff'.
  21335. +With prefix arg, prompt for second argument SWITCHES,
  21336. + which is options for `diff'.Fdired-backup-diff
  21337. +Diff this file with its backup file or vice versa.
  21338. +Uses the latest backup, if there are several numerical backups.
  21339. +If this file is a backup, diff it with its original.
  21340. +The backup file is the first file given to `diff'.
  21341. +With prefix arg, prompt for argument SWITCHES which is options for `diff'.Fdired-do-chmod
  21342. +Change the mode of the marked (or next ARG) files.
  21343. +This calls chmod, thus symbolic modes like `g+w' are allowed.Fdired-do-chgrp
  21344. +Change the group of the marked (or next ARG) files.Fdired-do-chown
  21345. +Change the owner of the marked (or next ARG) files.Fdired-do-print
  21346. +Print the marked (or next ARG) files.
  21347. +Uses the shell command coming from variables `lpr-command' and
  21348. +`lpr-switches' as default.Fdired-do-shell-command
  21349. +Run a shell command COMMAND on the marked files.
  21350. +If no files are marked or a specific numeric prefix arg is given,
  21351. +the next ARG files are used.  Just \[universal-argument] means the current file.
  21352. +The prompt mentions the file(s) or the marker, as appropriate.
  21353. +
  21354. +If there is output, it goes to a separate buffer.
  21355. +
  21356. +Normally the command is run on each file individually.
  21357. +However, if there is a `*' in the command then it is run
  21358. +just once with the entire file list substituted there.
  21359. +
  21360. +No automatic redisplay of dired buffers is attempted, as there's no
  21361. +telling what files the command may have changed.  Type
  21362. +\[dired-do-redisplay] to redisplay the marked files.
  21363. +
  21364. +The shell command has the top level directory as working directory, so
  21365. +output files usually are created there instead of in a subdir.Fdired-do-kill-lines
  21366. +Kill all marked lines (not the files).
  21367. +With a prefix argument, kill that many lines starting with the current line.
  21368. +(A negative argument kills lines before the current line.)
  21369. +To kill an entire subdirectory, go to its directory header line
  21370. +and use this command with a prefix argument (the value does not matter).Fdired-do-compress
  21371. +Compress or uncompress marked (or next ARG) files.Fdired-do-byte-compile
  21372. +Byte compile marked (or next ARG) Emacs Lisp files.Fdired-do-load
  21373. +Load the marked (or next ARG) Emacs Lisp files.Fdired-do-redisplay
  21374. +Redisplay all marked (or next ARG) files.
  21375. +If on a subdir line, redisplay that subdirectory.  In that case,
  21376. +a prefix arg lets you edit the `ls' switches used for the new listing.Fdired-string-replace-match
  21377. +Replace first match of REGEXP in STRING with NEWTEXT.
  21378. +If it does not match, nil is returned instead of the new string.
  21379. +Optional arg LITERAL means to take NEWTEXT literally.
  21380. +Optional arg GLOBAL means to replace all matches.Fdired-create-directory
  21381. +Create a directory called DIRECTORY.Fdired-do-copy
  21382. +Copy all marked (or next ARG) files, or copy the current file.
  21383. +This normally preserves the last-modified date when copying.
  21384. +When operating on just the current file, you specify the new name.
  21385. +When operating on multiple or marked files, you specify a directory
  21386. +and new symbolic links are made in that directory
  21387. +with the same names that the files currently have.Fdired-do-symlink
  21388. +Make symbolic links to current file or all marked (or next ARG) files.
  21389. +When operating on just the current file, you specify the new name.
  21390. +When operating on multiple or marked files, you specify a directory
  21391. +and new symbolic links are made in that directory
  21392. +with the same names that the files currently have.Fdired-do-hardlink
  21393. +Add names (hard links) current file or all marked (or next ARG) files.
  21394. +When operating on just the current file, you specify the new name.
  21395. +When operating on multiple or marked files, you specify a directory
  21396. +and new hard links are made in that directory
  21397. +with the same names that the files currently have.Fdired-do-rename
  21398. +Rename current file or all marked (or next ARG) files.
  21399. +When renaming just the current file, you specify the new name.
  21400. +When renaming multiple or marked files, you specify a directory.Fdired-do-rename-regexp
  21401. +Rename marked files containing REGEXP to NEWNAME.
  21402. +As each match is found, the user must type a character saying
  21403. +  what to do with it.  For directions, type \[help-command] at that time.
  21404. +NEWNAME may contain \=\<n> or \& as in `query-replace-regexp'.
  21405. +REGEXP defaults to the last regexp used.
  21406. +With a zero prefix arg, renaming by regexp affects the complete
  21407. +  pathname - usually only the non-directory part of file names is used
  21408. +  and changed.Fdired-do-copy-regexp
  21409. +Copy all marked files containing REGEXP to NEWNAME.
  21410. +See function `dired-rename-regexp' for more info.Fdired-do-hardlink-regexp
  21411. +Hardlink all marked files containing REGEXP to NEWNAME.
  21412. +See function `dired-rename-regexp' for more info.Fdired-do-symlink-regexp
  21413. +Symlink all marked files containing REGEXP to NEWNAME.
  21414. +See function `dired-rename-regexp' for more info.Fdired-upcase
  21415. +Rename all marked (or next ARG) files to upper case.Fdired-downcase
  21416. +Rename all marked (or next ARG) files to lower case.Fdired-maybe-insert-subdir
  21417. +Insert this subdirectory into the same dired buffer.
  21418. +If it is already present, just move to it (type \[dired-do-redisplay] to refresh),
  21419. +  else inserts it at its natural place (as `ls -lR' would have done).
  21420. +With a prefix arg, you may edit the ls switches used for this listing.
  21421. +  You can add `R' to the switches to expand the whole tree starting at
  21422. +  this subdirectory.
  21423. +This function takes some pains to conform to `ls -lR' output.Fdired-prev-subdir
  21424. +Go to previous subdirectory, regardless of level.
  21425. +When called interactively and not on a subdir line, go to this subdir's line.Fdired-goto-subdir
  21426. +Go to end of header line of DIR in this dired buffer.
  21427. +Return value of point on success, otherwise return nil.
  21428. +The next char is either \n, or \r if DIR is hidden.Fdired-mark-subdir-files
  21429. +Mark all files except `.' and `..'.Fdired-kill-subdir
  21430. +Remove all lines of current subdirectory.
  21431. +Lower levels are unaffected.Fdired-tree-up
  21432. +Go up ARG levels in the dired tree.Fdired-tree-down
  21433. +Go down in the dired tree.Fdired-hide-subdir
  21434. +Hide or unhide the current subdirectory and move to next directory.
  21435. +Optional prefix arg is a repeat factor.
  21436. +Use \[dired-hide-all] to (un)hide all directories.Fdired-hide-all
  21437. +Hide all subdirectories, leaving only their header lines.
  21438. +If there is already something hidden, make everything visible again.
  21439. +Use \[dired-hide-subdir] to (un)hide a particular subdirectory.Fdired-jump
  21440. +Jump to dired buffer corresponding to current buffer.
  21441. +If in a file, dired the current directory and move to file's line.
  21442. +If in dired already, pop up a level and goto old directory's line.
  21443. +In case the proper dired file line cannot be found, refresh the dired
  21444. +buffer and try again.Fdisassemble
  21445. +Print disassembled code for OBJECT in (optional) BUFFER.
  21446. +OBJECT can be a symbol defined as a function, or a function itself
  21447. +(a lambda expression or a compiled-function object).
  21448. +If OBJECT is not already compiled, we compile it, but do not
  21449. +redefine OBJECT if it is a symbol.Fdescribe-current-display-table
  21450. +Describe the display table in use in the selected window and buffer.Fmake-display-table
  21451. +Return a new, empty display table.Fstandard-display-8bit
  21452. +Display characters in the range L to H literally.Fstandard-display-default
  21453. +Display characters in the range L to H using the default notation.Fstandard-display-ascii
  21454. +Display character C using string S.
  21455. +S is usually a terminal-dependent escape sequence.
  21456. +This function is meaningless for an X frame.Fstandard-display-g1
  21457. +Display character C as character SC in the g1 character set.
  21458. +This function assumes that your terminal uses the SO/SI characters;
  21459. +it is meaningless for an X frame.Fstandard-display-graphic
  21460. +Display character C as character GC in graphics character set.
  21461. +This function assumes VT100-compatible escapes; it is meaningless for an
  21462. +X frame.Fstandard-display-underline
  21463. +Display character C as character UC plus underlining.Fstandard-display-european
  21464. +Toggle display of European characters encoded with ISO 8859.
  21465. +When enabled, characters in the range of 160 to 255 display not
  21466. +as octal escapes, but as accented characters.
  21467. +With prefix argument, enable European character display iff arg is positive.Fdissociated-press
  21468. +Dissociate the text of the current buffer.
  21469. +Output goes in buffer named *Dissociation*,
  21470. +which is redisplayed each time text is added to it.
  21471. +Every so often the user must say whether to continue.
  21472. +If ARG is positive, require ARG chars of continuity.
  21473. +If ARG is negative, require -ARG words of continuity.
  21474. +Default is 2.Fdoctor
  21475. +Switch to *doctor* buffer and start giving psychotherapy.Fdouble-mode
  21476. +Toggle double mode.
  21477. +With prefix arg, turn double mode on iff arg is positive.
  21478. +
  21479. +When double mode is on, some keys will insert will insert different
  21480. +strings when pressed twice.  See variable `double-map' for details.Fdunnet
  21481. +Switch to *dungeon* buffer and start game.Feasy-menu-define
  21482. +Define a menu bar submenu in maps MAPS, according to MENU.
  21483. +The arguments SYMBOL and DOC are ignored; they are present for
  21484. +compatibility only.  SYMBOL is not evaluated.  In other Emacs versions
  21485. +these arguments may be used as a variable to hold the menu data, and a
  21486. +doc string for that variable.
  21487. +
  21488. +The first element of MENU must be a string.  It is the menu bar item name.
  21489. +The rest of the elements are menu items.
  21490. +
  21491. +A menu item is usually a vector of three elements:  [NAME CALLBACK ENABLE]
  21492. +
  21493. +NAME is a string--the menu item name.
  21494. +
  21495. +CALLBACK is a command to run when the item is chosen,
  21496. +or a list to evaluate when the item is chosen.
  21497. +
  21498. +ENABLE is a symbol; if its value is non-nil, the item is enabled
  21499. +for selection.
  21500. +
  21501. +A menu item can be a string.  Then that string appears in the menu as
  21502. +unselectable text.  A string consisting solely of hyphens is displayed
  21503. +as a solid horizontal line.
  21504. +
  21505. +A menu item can be a list.  It is treated as a submenu.
  21506. +The first element should be the submenu name.  That's used as the
  21507. +menu item in the top-level menu.  The cdr of the submenu list
  21508. +is a list of menu items, as above.Felectric-buffer-list
  21509. +Pops up a buffer describing the set of Emacs buffers.
  21510. +Vaguely like ITS lunar select buffer; combining typeoutoid buffer
  21511. +listing with menuoid buffer selection.
  21512. +
  21513. +If the very next character typed is a space then the buffer list
  21514. +window disappears.  Otherwise, one may move around in the buffer list
  21515. +window, marking buffers to be selected, saved or deleted.
  21516. +
  21517. +To exit and select a new buffer, type a space when the cursor is on
  21518. +the appropriate line of the buffer-list window.  Other commands are
  21519. +much like those of buffer-menu-mode.
  21520. +
  21521. +Calls value of `electric-buffer-menu-mode-hook' on entry if non-nil.
  21522. +
  21523. +\{electric-buffer-menu-mode-map}FElectric-command-history-redo-expression
  21524. +Edit current history line in minibuffer and execute result.
  21525. +With prefix arg NOCONFIRM, execute current line as-is without editing.Fdef-edebug-spec
  21526. +Set the edebug-form-spec property of SYMBOL according to SPEC.
  21527. +Both SYMBOL and SPEC are unevaluated. The SPEC can be 0, t, a symbol
  21528. +(naming a function), or a list.Fedebug-eval-top-level-form
  21529. +Evaluate a top level form, such as a defun or defmacro.
  21530. +This is like `eval-defun', but the code is always instrumented for Edebug.
  21531. +Print its name in the minibuffer and leave point where it is,
  21532. +or if an error occurs, leave point after it with mark at the original
  21533. +point.Fediff-patch-file
  21534. +Run Ediff by patching FILE-TP-PATCH.Fediff-files
  21535. +Run Ediff on a pair files, FILE-A and FILE-B.Fediff-buffers
  21536. +Run Ediff on a pair of buffers, BUFFER-A and BUFFER-B.Fediff-patch-buffer
  21537. +Run Ediff by patching BUFFER-NAME.Fvc-ediff
  21538. +Run ediff on version REV of the current buffer in another window.
  21539. +If the current buffer is named `F', the version is named `F.~REV~'.
  21540. +If `F.~REV~' already exists, it is used instead of being re-created.Frcs-ediff
  21541. +Run Ediff on the current buffer, comparing it with previous RCS revision.  
  21542. +With prefix argument, prompts for revision name.Vedmacro-eight-bits
  21543. +*Non-nil if edit-kbd-macro should leave 8-bit characters intact.
  21544. +Default nil means to write characters above \177 in octal notation.Fedit-kbd-macro
  21545. +Edit a keyboard macro.
  21546. +At the prompt, type any key sequence which is bound to a keyboard macro.
  21547. +Or, type `C-x e' or RET to edit the last keyboard macro, `C-h l' to edit
  21548. +the last 100 keystrokes as a keyboard macro, or `M-x' to edit a macro by
  21549. +its command name.
  21550. +With a prefix argument, format the macro in a more concise way.Fedit-last-kbd-macro
  21551. +Edit the most recently defined keyboard macro.Fedit-named-kbd-macro
  21552. +Edit a keyboard macro which has been given a name by `name-last-kbd-macro'.Fread-kbd-macro
  21553. +Read the region as a keyboard macro definition.
  21554. +The region is interpreted as spelled-out keystrokes, e.g., "M-x abc RET".
  21555. +See documentation for `edmacro-mode' for details.
  21556. +Leading/trailing "C-x (" and "C-x )" in the text are allowed and ignored.
  21557. +The resulting macro is installed as the "current" keyboard macro.
  21558. +
  21559. +In Lisp, may also be called with a single STRING argument in which case
  21560. +the result is returned rather than being installed as the current macro.
  21561. +The result will be a string if possible, otherwise an event vector.
  21562. +Second argument NEED-VECTOR means to return an event vector always.Fformat-kbd-macro
  21563. +Return the keyboard macro MACRO as a human-readable string.
  21564. +This string is suitable for passing to `read-kbd-macro'.
  21565. +Second argument VERBOSE means to put one command per line with comments.
  21566. +If VERBOSE is `1', put everything on one line.  If VERBOSE is omitted
  21567. +or nil, use a compact 80-column format.Finsert-kbd-macro
  21568. +Insert in buffer the definition of kbd macro NAME, as Lisp code.
  21569. +Optional second arg KEYS means also record the keys it is on
  21570. +(this is the prefix argument, when calling interactively).
  21571. +
  21572. +This Lisp code will, when executed, define the kbd macro with the same
  21573. +definition it has now.  If you say to record the keys, the Lisp code
  21574. +will also rebind those keys to the macro.  Only global key bindings
  21575. +are recorded since executing this Lisp code always makes global
  21576. +bindings.
  21577. +
  21578. +To save a kbd macro, visit a file of Lisp code such as your `~/.emacs',
  21579. +use this command, and then save the file.Fedt-emulation-on
  21580. +Emulate DEC's EDT editor.
  21581. +Note that many keys are rebound; including nearly all keypad keys.
  21582. +Use \[edt-emulation-off] to undo all rebindings except the keypad keys.Freport-emacs-bug
  21583. +Report a bug in GNU Emacs.
  21584. +Prompts for bug subject.  Leaves you in a mail buffer.Femerge-files
  21585. +Run Emerge on two files.Femerge-files-with-ancestor
  21586. +Run Emerge on two files, giving another file as the ancestor.Femerge-buffers
  21587. +Run Emerge on two buffers.Femerge-buffers-with-ancestor
  21588. +Run Emerge on two buffers, giving another buffer as the ancestor.Femerge-revisions
  21589. +Emerge two RCS revisions of a file.Femerge-revisions-with-ancestor
  21590. +Emerge two RCS revisions of a file, with another revision as ancestor.Fsetenv
  21591. +Set the value of the environment variable named VARIABLE to VALUE.
  21592. +VARIABLE should be a string.  VALUE is optional; if not provided or is
  21593. +`nil', the environment variable VARIABLE will be removed.  
  21594. +This function works by modifying `process-environment'.Vtags-file-name
  21595. +*File name of tags table.
  21596. +To switch to a new tags table, setting this variable is sufficient.
  21597. +If you set this variable, do not also set `tags-table-list'.
  21598. +Use the `etags' program to make a tags table file.Vtags-table-list
  21599. +*List of file names of tags tables to search.
  21600. +An element that is a directory means the file "TAGS" in that directory.
  21601. +To switch to a new list of tags tables, setting this variable is sufficient.
  21602. +If you set this variable, do not also set `tags-file-name'.
  21603. +Use the `etags' program to make a tags table file.Vtags-add-tables
  21604. +*Control whether to add a new tags table to the current list.
  21605. +t means do; nil means don't (always start a new list).
  21606. +Any other value means ask the user whether to add a new tags table
  21607. +to the current list (as opposed to starting a new list).Vfind-tag-hook
  21608. +*Hook to be run by \[find-tag] after finding a tag.  See `run-hooks'.
  21609. +The value in the buffer in which \[find-tag] is done is used,
  21610. +not the value in the buffer \[find-tag] goes to.Vfind-tag-default-function
  21611. +*A function of no arguments used by \[find-tag] to pick a default tag.
  21612. +If nil, and the symbol that is the value of `major-mode'
  21613. +has a `find-tag-default-function' property (see `put'), that is used.
  21614. +Otherwise, `find-tag-default' is used.Fvisit-tags-table
  21615. +Tell tags commands to use tags table file FILE.
  21616. +FILE should be the name of a file created with the `etags' program.
  21617. +A directory name is ok too; it means file TAGS in that directory.
  21618. +
  21619. +Normally \[visit-tags-table] sets the global value of `tags-file-name'.
  21620. +With a prefix arg, set the buffer-local value instead.
  21621. +When you find a tag with \[find-tag], the buffer it finds the tag
  21622. +in is given a local value of this variable which is the name of the tags
  21623. +file the tag was in.Ftags-table-files
  21624. +Return a list of files in the current tags table.
  21625. +Assumes the tags table is the current buffer.
  21626. +File names returned are absolute.Ffind-tag-noselect
  21627. +Find tag (in current tags table) whose name contains TAGNAME.
  21628. +Returns the buffer containing the tag's definition and moves its point there,
  21629. +but does not select the buffer.
  21630. +The default for TAGNAME is the expression in the buffer near point.
  21631. +
  21632. +If second arg NEXT-P is t (interactively, with prefix arg), search for
  21633. +another tag that matches the last tagname or regexp used.  When there are
  21634. +multiple matches for a tag, more exact matches are found first.  If NEXT-P
  21635. +is the atom `-' (interactively, with prefix arg that is a negative number
  21636. +or just \[negative-argument]), pop back to the previous tag gone to.
  21637. +
  21638. +If third arg REGEXP-P is non-nil, treat TAGNAME as a regexp.
  21639. +
  21640. +See documentation of variable `tags-file-name'.Ffind-tag
  21641. +Find tag (in current tags table) whose name contains TAGNAME.
  21642. +Select the buffer containing the tag's definition, and move point there.
  21643. +The default for TAGNAME is the expression in the buffer around or before point.
  21644. +
  21645. +If second arg NEXT-P is t (interactively, with prefix arg), search for
  21646. +another tag that matches the last tagname or regexp used.  When there are
  21647. +multiple matches for a tag, more exact matches are found first.  If NEXT-P
  21648. +is the atom `-' (interactively, with prefix arg that is a negative number
  21649. +or just \[negative-argument]), pop back to the previous tag gone to.
  21650. +
  21651. +See documentation of variable `tags-file-name'.Ffind-tag-other-window
  21652. +Find tag (in current tags table) whose name contains TAGNAME.
  21653. +Select the buffer containing the tag's definition in another window, and
  21654. +move point there.  The default for TAGNAME is the expression in the buffer
  21655. +around or before point.
  21656. +
  21657. +If second arg NEXT-P is t (interactively, with prefix arg), search for
  21658. +another tag that matches the last tagname or regexp used.  When there are
  21659. +multiple matches for a tag, more exact matches are found first.  If NEXT-P
  21660. +is negative (interactively, with prefix arg that is a negative number or
  21661. +just \[negative-argument]), pop back to the previous tag gone to.
  21662. +
  21663. +See documentation of variable `tags-file-name'.Ffind-tag-other-frame
  21664. +Find tag (in current tags table) whose name contains TAGNAME.
  21665. +Select the buffer containing the tag's definition in another frame, and
  21666. +move point there.  The default for TAGNAME is the expression in the buffer
  21667. +around or before point.
  21668. +
  21669. +If second arg NEXT-P is t (interactively, with prefix arg), search for
  21670. +another tag that matches the last tagname or regexp used.  When there are
  21671. +multiple matches for a tag, more exact matches are found first.  If NEXT-P
  21672. +is negative (interactively, with prefix arg that is a negative number or
  21673. +just \[negative-argument]), pop back to the previous tag gone to.
  21674. +
  21675. +See documentation of variable `tags-file-name'.Ffind-tag-regexp
  21676. +Find tag (in current tags table) whose name matches REGEXP.
  21677. +Select the buffer containing the tag's definition and move point there.
  21678. +
  21679. +If second arg NEXT-P is t (interactively, with prefix arg), search for
  21680. +another tag that matches the last tagname or regexp used.  When there are
  21681. +multiple matches for a tag, more exact matches are found first.  If NEXT-P
  21682. +is negative (interactively, with prefix arg that is a negative number or
  21683. +just \[negative-argument]), pop back to the previous tag gone to.
  21684. +
  21685. +If third arg OTHER-WINDOW is non-nil, select the buffer in another window.
  21686. +
  21687. +See documentation of variable `tags-file-name'.Fnext-file
  21688. +Select next file among files in current tags table.
  21689. +
  21690. +A first argument of t (prefix arg, if interactive) initializes to the
  21691. +beginning of the list of files in the tags table.  If the argument is
  21692. +neither nil nor t, it is evalled to initialize the list of files.
  21693. +
  21694. +Non-nil second argument NOVISIT means use a temporary buffer
  21695. + to save time and avoid uninteresting warnings.
  21696. +
  21697. +Value is nil if the file was already visited;
  21698. +if the file was newly read in, the value is the filename.Ftags-loop-continue
  21699. +Continue last \[tags-search] or \[tags-query-replace] command.
  21700. +Used noninteractively with non-nil argument to begin such a command (the
  21701. +argument is passed to `next-file', which see).
  21702. +Two variables control the processing we do on each file:
  21703. +the value of `tags-loop-scan' is a form to be executed on each file
  21704. +to see if it is interesting (it returns non-nil if so)
  21705. +and `tags-loop-operate' is a form to execute to operate on an interesting file
  21706. +If the latter returns non-nil, we exit; otherwise we scan the next file.Ftags-search
  21707. +Search through all files listed in tags table for match for REGEXP.
  21708. +Stops when a match is found.
  21709. +To continue searching for next match, use command \[tags-loop-continue].
  21710. +
  21711. +See documentation of variable `tags-file-name'.Ftags-query-replace
  21712. +Query-replace-regexp FROM with TO through all files listed in tags table.
  21713. +Third arg DELIMITED (prefix arg) means replace only word-delimited matches.
  21714. +If you exit (\[keyboard-quit] or ESC), you can resume the query-replace
  21715. +with the command \[tags-loop-continue].
  21716. +
  21717. +See documentation of variable `tags-file-name'.Flist-tags
  21718. +Display list of tags in file FILE.
  21719. +FILE should not contain a directory specification.Ftags-apropos
  21720. +Display list of all tags in tags table REGEXP matches.Fselect-tags-table
  21721. +Select a tags table file from a menu of those you have already used.
  21722. +The list of tags tables to select from is stored in `tags-table-file-list';
  21723. +see the doc of that variable if you want to add names to the list.Fcomplete-tag
  21724. +Perform tags completion on the text around point.
  21725. +Completes to the set of names listed in the current tags table.  
  21726. +The string to complete is chosen in the same way as the default
  21727. +for \[find-tag] (which see).Vfind-ls-option
  21728. +*Option to `find' to produce an `ls -l'-type listing.Vfind-grep-options
  21729. +*Option to grep to be as silent as possible.
  21730. +On Berkeley systems, this is `-s', for others it seems impossible to
  21731. +suppress all output, so `-l' is used to print nothing more than the
  21732. +file name.Ffind-dired
  21733. +Run `find' and go into dired-mode on a buffer of the output.
  21734. +The command run (after changing into DIR) is
  21735. +
  21736. +    find . \( ARGS \) -lsFfind-name-dired
  21737. +Search DIR recursively for files matching the globbing pattern PATTERN,
  21738. +and run dired on those files.
  21739. +PATTERN is a shell wildcard (not an Emacs regexp) and need not be quoted.
  21740. +The command run (after changing into DIR) is
  21741. +
  21742. +    find . -name 'PATTERN' -lsFfind-grep-dired
  21743. +Find files in DIR containing a regexp ARG and start Dired on output.
  21744. +The command run (after changing into DIR) is
  21745. +
  21746. +    find . -exec grep -s ARG {} \; -ls
  21747. +
  21748. +Thus ARG can also contain additional grep options.Fenable-flow-control
  21749. +Toggle flow control handling.
  21750. +When handling is enabled, user can type C-s as C-\, and C-q as C-^.
  21751. +With arg, enable flow control mode if arg is positive, otherwise disable.Fenable-flow-control-on
  21752. +Enable flow control if using one of a specified set of terminal types.
  21753. +Use `(enable-flow-control-on "vt100" "h19")' to enable flow control
  21754. +on VT-100 and H19 terminals.  When flow control is enabled,
  21755. +you must type C-\ to get the effect of a C-s, and type C-^
  21756. +to get the effect of a C-q.Vfont-lock-mode-hook
  21757. +Function or functions to run on entry to Font Lock mode.Ffont-lock-mode
  21758. +Toggle Font Lock mode.
  21759. +With arg, turn Font Lock mode on if and only if arg is positive.
  21760. +
  21761. +When Font Lock mode is enabled, text is fontified as you type it:
  21762. +
  21763. + - comments are displayed in `font-lock-comment-face';
  21764. +     (That is a variable whose value should be a face name.)
  21765. + - strings are displayed in `font-lock-string-face';
  21766. + - documentation strings are displayed in `font-lock-doc-string-face';
  21767. + - function and variable names in their defining forms are displayed
  21768. +   in `font-lock-function-name-face';
  21769. + - and certain other expressions are displayed in other faces
  21770. +   according to the value of the variable `font-lock-keywords'.
  21771. +
  21772. +When you turn Font Lock mode on/off, the buffer is fontified/defontified.
  21773. +To fontify a buffer without having newly typed text become fontified, you
  21774. +can use \[font-lock-fontify-buffer].Fforms-mode
  21775. +Major mode to visit files in a field-structured manner using a form.
  21776. +
  21777. +Commands:                        Equivalent keys in read-only mode:
  21778. + TAB            forms-next-field          TAB
  21779. + \C-c TAB       forms-next-field          
  21780. + \C-c <         forms-first-record         <
  21781. + \C-c >         forms-last-record          >
  21782. + \C-c ?         describe-mode              ?
  21783. + \C-c \C-k      forms-delete-record
  21784. + \C-c \C-q      forms-toggle-read-only     q
  21785. + \C-c \C-o      forms-insert-record
  21786. + \C-c \C-l      forms-jump-record          l
  21787. + \C-c \C-n      forms-next-record          n
  21788. + \C-c \C-p      forms-prev-record          p
  21789. + \C-c \C-s      forms-search               s
  21790. + \C-c \C-x      forms-exit                 x
  21791. +Fforms-find-file
  21792. +Visit a file in Forms mode.Fforms-find-file-other-window
  21793. +Visit a file in Forms mode in other window.Vfortran-tab-mode-default
  21794. +*Default tabbing/carriage control style for empty files in Fortran mode.
  21795. +A value of t specifies tab-digit style of continuation control.
  21796. +A value of nil specifies that continuation lines are marked
  21797. +with a character in column 6.Ffortran-mode
  21798. +Major mode for editing Fortran code.
  21799. +\[fortran-indent-line] indents the current Fortran line correctly. 
  21800. +DO statements must not share a common CONTINUE.
  21801. +
  21802. +Type ;? or ;\[help-command] to display a list of built-in abbrevs for Fortran keywords.
  21803. +
  21804. +Key definitions:
  21805. +\{fortran-mode-map}
  21806. +
  21807. +Variables controlling indentation style and extra features:
  21808. +
  21809. + comment-start
  21810. +    Normally nil in Fortran mode.  If you want to use comments
  21811. +    starting with `!', set this to the string "!".
  21812. + fortran-do-indent
  21813. +    Extra indentation within do blocks.  (default 3)
  21814. + fortran-if-indent
  21815. +    Extra indentation within if blocks.  (default 3)
  21816. + fortran-structure-indent
  21817. +    Extra indentation within structure, union, map and interface blocks.
  21818. +    (default 3)
  21819. + fortran-continuation-indent
  21820. +    Extra indentation applied to continuation statements.  (default 5)
  21821. + fortran-comment-line-extra-indent
  21822. +    Amount of extra indentation for text within full-line comments. (default 0)
  21823. + fortran-comment-indent-style
  21824. +    nil    means don't change indentation of text in full-line comments,
  21825. +    fixed  means indent that text at `fortran-comment-line-extra-indent' beyond
  21826. +           the value of `fortran-minimum-statement-indent-fixed' (for fixed
  21827. +           format continuation style) or `fortran-minimum-statement-indent-tab'
  21828. +           (for TAB format continuation style).
  21829. +    relative  means indent at `fortran-comment-line-extra-indent' beyond the
  21830. +           indentation for a line of code.
  21831. +    (default 'fixed)
  21832. + fortran-comment-indent-char
  21833. +    Single-character string to be inserted instead of space for
  21834. +    full-line comment indentation.  (default " ")
  21835. + fortran-minimum-statement-indent-fixed
  21836. +    Minimum indentation for Fortran statements in fixed format mode. (def.6)
  21837. + fortran-minimum-statement-indent-tab
  21838. +    Minimum indentation for Fortran statements in TAB format mode. (default 9)
  21839. + fortran-line-number-indent
  21840. +    Maximum indentation for line numbers.  A line number will get
  21841. +    less than this much indentation if necessary to avoid reaching
  21842. +    column 5.  (default 1)
  21843. + fortran-check-all-num-for-matching-do
  21844. +    Non-nil causes all numbered lines to be treated as possible "continue"
  21845. +    statements.  (default nil)
  21846. + fortran-blink-matching-if 
  21847. +    From a Fortran ENDIF statement, blink the matching IF statement.
  21848. +    Also, from an ENDDO statement, blink on matching DO [WHILE] statement.
  21849. +    (default nil)
  21850. + fortran-continuation-string
  21851. +    Single-character string to be inserted in column 5 of a continuation
  21852. +    line.  (default "$")
  21853. + fortran-comment-region
  21854. +    String inserted by \[fortran-comment-region] at start of each line in 
  21855. +    region.  (default "c$$$")
  21856. + fortran-electric-line-number
  21857. +    Non-nil causes line number digits to be moved to the correct column 
  21858. +    as typed.  (default t)
  21859. + fortran-break-before-delimiters
  21860. +    Non-nil causes `fortran-do-auto-fill' breaks lines before delimiters.
  21861. +    (default t)
  21862. + fortran-startup-message
  21863. +    Set to nil to inhibit message first time Fortran mode is used.
  21864. +
  21865. +Turning on Fortran mode calls the value of the variable `fortran-mode-hook'
  21866. +with no args, if that value is non-nil.Fgnus
  21867. +Read network news.
  21868. +If optional argument CONFIRM is non-nil, ask NNTP server.Fgnus-post-news
  21869. +Begin editing a new USENET news article to be posted.
  21870. +Type \[describe-mode] once editing the article to get a list of commands.Fgomoku
  21871. +Start a Gomoku game between you and Emacs.
  21872. +If a game is in progress, this command allow you to resume it.
  21873. +If optional arguments N and M are given, an N by M board is used.
  21874. +
  21875. +You and Emacs play in turn by marking a free square.  You mark it with X
  21876. +and Emacs marks it with O. The winner is the first to get five contiguous
  21877. +marks horizontally, vertically or in diagonal.
  21878. +
  21879. +You play by moving the cursor over the square you choose and hitting
  21880. +\<gomoku-mode-map>\[gomoku-human-plays].
  21881. +Use \[describe-mode] for more info.Fgdb
  21882. +Run gdb on program FILE in buffer *gud-FILE*.
  21883. +The directory containing FILE becomes the initial working directory
  21884. +and source-file directory for your debugger.Fsdb
  21885. +Run sdb on program FILE in buffer *gud-FILE*.
  21886. +The directory containing FILE becomes the initial working directory
  21887. +and source-file directory for your debugger.Fdbx
  21888. +Run dbx on program FILE in buffer *gud-FILE*.
  21889. +The directory containing FILE becomes the initial working directory
  21890. +and source-file directory for your debugger.Fxdb
  21891. +Run xdb on program FILE in buffer *gud-FILE*.
  21892. +The directory containing FILE becomes the initial working directory
  21893. +and source-file directory for your debugger.
  21894. +
  21895. +You can set the variable 'gud-xdb-directories' to a list of program source
  21896. +directories if your program contains sources from more than one directory.Fperldb
  21897. +Run perldb on program FILE in buffer *gud-FILE*.
  21898. +The directory containing FILE becomes the initial working directory
  21899. +and source-file directory for your debugger.Fhanoi
  21900. +Towers of Hanoi diversion.  Argument is number of rings.Vthree-step-help
  21901. +*Non-nil means give more info about Help command in three steps.
  21902. +The three steps are simple prompt, prompt with all options,
  21903. +and window listing and describing the options.
  21904. +A value of nil means skip the middle step, so that
  21905. +\[help-command] \[help-command] gives the window that lists the options.FHelper-describe-bindings
  21906. +Describe local key bindings of current mode.FHelper-help
  21907. +Provide help for current mode.Fhexl-mode
  21908. +\<hexl-mode-map>
  21909. +A major mode for editing binary files in hex dump format.
  21910. +
  21911. +This function automatically converts a buffer into the hexl format
  21912. +using the function `hexlify-buffer'.
  21913. +
  21914. +Each line in the buffer has an "address" (displayed in hexadecimal)
  21915. +representing the offset into the file that the characters on this line
  21916. +are at and 16 characters from the file (displayed as hexadecimal
  21917. +values grouped every 16 bits) and as their ASCII values.
  21918. +
  21919. +If any of the characters (displayed as ASCII characters) are
  21920. +unprintable (control or meta characters) they will be replaced as
  21921. +periods.
  21922. +
  21923. +If `hexl-mode' is invoked with an argument the buffer is assumed to be
  21924. +in hexl format.
  21925. +
  21926. +A sample format:
  21927. +
  21928. +  HEX ADDR: 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f     ASCII-TEXT
  21929. +  --------  ---- ---- ---- ---- ---- ---- ---- ----  ----------------
  21930. +  00000000: 5468 6973 2069 7320 6865 786c 2d6d 6f64  This is hexl-mod
  21931. +  00000010: 652e 2020 4561 6368 206c 696e 6520 7265  e.  Each line re
  21932. +  00000020: 7072 6573 656e 7473 2031 3620 6279 7465  presents 16 byte
  21933. +  00000030: 7320 6173 2068 6578 6164 6563 696d 616c  s as hexadecimal
  21934. +  00000040: 2041 5343 4949 0a61 6e64 2070 7269 6e74   ASCII.and print
  21935. +  00000050: 6162 6c65 2041 5343 4949 2063 6861 7261  able ASCII chara
  21936. +  00000060: 6374 6572 732e 2020 416e 7920 636f 6e74  cters.  Any cont
  21937. +  00000070: 726f 6c20 6f72 206e 6f6e 2d41 5343 4949  rol or non-ASCII
  21938. +  00000080: 2063 6861 7261 6374 6572 730a 6172 6520   characters.are 
  21939. +  00000090: 6469 7370 6c61 7965 6420 6173 2070 6572  displayed as per
  21940. +  000000a0: 696f 6473 2069 6e20 7468 6520 7072 696e  iods in the prin
  21941. +  000000b0: 7461 626c 6520 6368 6172 6163 7465 7220  table character 
  21942. +  000000c0: 7265 6769 6f6e 2e0a                      region..
  21943. +
  21944. +Movement is as simple as movement in a normal emacs text buffer.  Most
  21945. +cursor movement bindings are the same (ie. Use \[hexl-backward-char], \[hexl-forward-char], \[hexl-next-line], and \[hexl-previous-line]
  21946. +to move the cursor left, right, down, and up).
  21947. +
  21948. +Advanced cursor movement commands (ala \[hexl-beginning-of-line], \[hexl-end-of-line], \[hexl-beginning-of-buffer], and \[hexl-end-of-buffer]) are
  21949. +also supported.
  21950. +
  21951. +There are several ways to change text in hexl mode:
  21952. +
  21953. +ASCII characters (character between space (0x20) and tilde (0x7E)) are
  21954. +bound to self-insert so you can simply type the character and it will
  21955. +insert itself (actually overstrike) into the buffer.
  21956. +
  21957. +\[hexl-quoted-insert] followed by another keystroke allows you to insert the key even if
  21958. +it isn't bound to self-insert.  An octal number can be supplied in place
  21959. +of another key to insert the octal number's ASCII representation.
  21960. +
  21961. +\[hexl-insert-hex-char] will insert a given hexadecimal value (if it is between 0 and 0xFF)
  21962. +into the buffer at the current point.
  21963. +
  21964. +\[hexl-insert-octal-char] will insert a given octal value (if it is between 0 and 0377)
  21965. +into the buffer at the current point.
  21966. +
  21967. +\[hexl-insert-decimal-char] will insert a given decimal value (if it is between 0 and 255)
  21968. +into the buffer at the current point.
  21969. +
  21970. +\[hexl-mode-exit] will exit hexl-mode.
  21971. +
  21972. +Note: saving the file with any of the usual Emacs commands
  21973. +will actually convert it back to binary format while saving.
  21974. +
  21975. +You can use \[hexl-find-file] to visit a file in hexl-mode.
  21976. +
  21977. +\[describe-bindings] for advanced commands.Fhexl-find-file
  21978. +Edit file FILENAME in hexl-mode.
  21979. +Switch to a buffer visiting file FILENAME, creating one in none exists.Fhexlify-buffer
  21980. +Convert a binary buffer to hexl formatFhide-ifdef-mode
  21981. +Toggle Hide-Ifdef mode.  This is a minor mode, albeit a large one.
  21982. +With ARG, turn Hide-Ifdef mode on iff arg is positive.
  21983. +In Hide-Ifdef mode, code within #ifdef constructs that the C preprocessor
  21984. +would eliminate may be hidden from view.  Several variables affect
  21985. +how the hiding is done:
  21986. +
  21987. +hide-ifdef-env
  21988. +    An association list of defined and undefined symbols for the
  21989. +    current buffer.  Initially, the global value of `hide-ifdef-env'
  21990. +    is used.
  21991. +
  21992. +hide-ifdef-define-alist
  21993. +    An association list of defined symbol lists.  
  21994. +        Use `hide-ifdef-set-define-alist' to save the current `hide-ifdef-env'
  21995. +        and `hide-ifdef-use-define-alist' to set the current `hide-ifdef-env'
  21996. +        from one of the lists in `hide-ifdef-define-alist'.
  21997. +
  21998. +hide-ifdef-lines
  21999. +    Set to non-nil to not show #if, #ifdef, #ifndef, #else, and
  22000. +    #endif lines when hiding.
  22001. +
  22002. +hide-ifdef-initially
  22003. +    Indicates whether `hide-ifdefs' should be called when Hide-Ifdef mode
  22004. +    is activated.
  22005. +
  22006. +hide-ifdef-read-only
  22007. +    Set to non-nil if you want to make buffers read only while hiding.
  22008. +    After `show-ifdefs', read-only status is restored to previous value.
  22009. +
  22010. +\{hide-ifdef-mode-map}Vhide-ifdef-initially
  22011. +*Non-nil if `hide-ifdefs' should be called when Hide-Ifdef mode
  22012. +is first activated.Vhide-ifdef-read-only
  22013. +*Set to non-nil if you want buffer to be read-only while hiding text.Vhide-ifdef-lines
  22014. +*Set to t if you don't want to see the #ifX, #else, and #endif lines.Vhippie-expand-try-functions-list
  22015. +The list of expansion functions tried in order by `hippie-expand'.
  22016. +To change the behavior of `hippie-expand', remove, change the order of,
  22017. +or insert functions in this list.Vhippie-expand-verbose
  22018. +*Non-nil makes `hippie-expand' output which function it is trying.Vhippie-expand-max-buffers
  22019. +*The maximum number of buffers (apart from the current) searched.
  22020. +If nil, all buffers are searched.Vhippie-expand-ignore-buffers
  22021. +*A list specifying which buffers not to search (if not current).
  22022. +Can contain both regexps matching buffer names (as strings) and major modes
  22023. +(as atoms)Fhippie-expand
  22024. +Try to expand text before point, using multiple methods.
  22025. +The expansion functions in `hippie-expand-try-functions-list' are
  22026. +tried in order, until a possible expansion is found.  Repeated
  22027. +application of `hippie-expand' inserts successively possible
  22028. +expansions.  
  22029. +With a positive numeric argument, jumps directly to the ARG next
  22030. +function in this list.  With a negative argument or just \[universal-argument], 
  22031. +undoes the expansion.Fmake-hippie-expand-function
  22032. +Construct a function similar to `hippie-expand'.
  22033. +Make it use the expansion functions in TRY-LIST.  An optional second
  22034. +argument VERBOSE non-nil makes the function verbose.Ficomplete-prime-session
  22035. +Prep emacs v 19 for more finely-grained minibuffer completion-feedback.
  22036. +
  22037. +You can inhibit icomplete after loading by setting icomplete-inhibit
  22038. +non-nil.  Set the var back to nil to re-enable icomplete.Fielm
  22039. +Interactively evaluate Emacs Lisp expressions.
  22040. +Switches to the buffer *ielm*, or creates it if it does not exist.Fimenu
  22041. +Jump to a place in the buffer chosen using a buffer menu or mouse menu.
  22042. +See `imenu-choose-buffer-index' for more information.Vinferior-lisp-filter-regexp
  22043. +*What not to save on inferior Lisp's input history.
  22044. +Input matching this regexp is not saved on the input history in Inferior Lisp
  22045. +mode.  Default is whitespace followed by 0 or 1 single-letter colon-keyword 
  22046. +(as in :a, :c, etc.)Vinferior-lisp-program
  22047. +*Program name for invoking an inferior Lisp with for Inferior Lisp mode.Vinferior-lisp-load-command
  22048. +*Format-string for building a Lisp expression to load a file.
  22049. +This format string should use `%s' to substitute a file name
  22050. +and should result in a Lisp expression that will command the inferior Lisp
  22051. +to load that file.  The default works acceptably on most Lisps.
  22052. +The string "(progn (load \"%s\" :verbose nil :print t) (values))\
  22053. +"
  22054. +produces cosmetically superior output for this application,
  22055. +but it works only in Common Lisp.Vinferior-lisp-prompt
  22056. +Regexp to recognise prompts in the Inferior Lisp mode.
  22057. +Defaults to "^[^> \n]*>+:? *", which works pretty good for Lucid, kcl,
  22058. +and franz.  This variable is used to initialize `comint-prompt-regexp' in the 
  22059. +Inferior Lisp buffer.
  22060. +
  22061. +More precise choices:
  22062. +Lucid Common Lisp: "^\(>\|\(->\)+\) *"
  22063. +franz: "^\(->\|<[0-9]*>:\) *"
  22064. +kcl: "^>+ *"
  22065. +
  22066. +This is a fine thing to set in your .emacs file.Vinferior-lisp-mode-hook
  22067. +*Hook for customising Inferior Lisp mode.Finferior-lisp
  22068. +Run an inferior Lisp process, input and output via buffer `*inferior-lisp*'.
  22069. +If there is a process already running in `*inferior-lisp*', just switch
  22070. +to that buffer.
  22071. +With argument, allows you to edit the command line (default is value
  22072. +of `inferior-lisp-program').  Runs the hooks from
  22073. +`inferior-lisp-mode-hook' (after the `comint-mode-hook' is run).
  22074. +(Type \[describe-mode] in the process buffer for a list of commands.)Finfo
  22075. +Enter Info, the documentation browser.
  22076. +Optional argument FILE specifies the file to examine;
  22077. +the default is the top-level directory of Info.
  22078. +
  22079. +In interactive use, a prefix argument directs this command
  22080. +to read a file name from the minibuffer.Finfo-standalone
  22081. +Run Emacs as a standalone Info reader.
  22082. +Usage:  emacs -f info-standalone [filename]
  22083. +In standalone mode, \<Info-mode-map>\[Info-exit] exits Emacs itself.FInfo-goto-emacs-command-node
  22084. +Go to the Info node in the Emacs manual for command COMMAND.
  22085. +The command is found by looking up in Emacs manual's Command Index.FInfo-goto-emacs-key-command-node
  22086. +Go to the Info node in the Emacs manual the command bound to KEY, a string.
  22087. +Interactively, if the binding is execute-extended-command, a command is read.
  22088. +The command is found by looking up in Emacs manual's Command Index.FInfo-tagify
  22089. +Create or update Info-file tag table in current buffer.FInfo-split
  22090. +Split an info file into an indirect file plus bounded-size subfiles.
  22091. +Each subfile will be up to 50,000 characters plus one node.
  22092. +
  22093. +To use this command, first visit a large Info file that has a tag
  22094. +table.  The buffer is modified into a (small) indirect info file which
  22095. +should be saved in place of the original visited file.
  22096. +
  22097. +The subfiles are written in the same directory the original file is
  22098. +in, with names generated by appending `-' and a number to the original
  22099. +file name.  The indirect file still functions as an Info file, but it
  22100. +contains just the tag table and a directory of subfiles.FInfo-validate
  22101. +Check current buffer for validity as an Info file.
  22102. +Check that every node pointer points to an existing node.Fbatch-info-validate
  22103. +Runs `Info-validate' on the files remaining on the command line.
  22104. +Must be used only with -batch, and kills Emacs on completion.
  22105. +Each file will be processed even if an error occurred previously.
  22106. +For example, invoke "emacs -batch -f batch-info-validate $info/ ~/*.info"Fiso-accents-mode
  22107. +Toggle ISO Accents mode, in which accents modify the following letter.
  22108. +This permits easy insertion of accented characters according to ISO-8859-1.
  22109. +When Iso-accents mode is enabled, accent character keys
  22110. +(`, ', ", ^, / and ~) do not self-insert; instead, they modify the following
  22111. +letter key so that it inserts an ISO accented letter.
  22112. +
  22113. +The variable `iso-accents-enable' specifies the list of characters to
  22114. +enable as accents.  If you don't need all of them, remove the ones you
  22115. +don't need from that list.
  22116. +
  22117. +Special combinations: ~c gives a c with cedilla,
  22118. +~d gives a d with dash.
  22119. +"s gives German sharp s.
  22120. +/a gives a with ring.
  22121. +/e gives an a-e ligature.
  22122. +~< and ~> give guillemets.
  22123. +
  22124. +With an argument, a positive argument enables ISO Accents mode, 
  22125. +and a negative argument disables it.Vispell-dictionary-alist
  22126. +An alist of dictionaries and their associated parameters.
  22127. +
  22128. +Each element of this list is also a list:
  22129. +
  22130. +(DICTIONARY-NAME CASECHARS NOT-CASECHARS OTHERCHARS MANY-OTHERCHARS-P
  22131. +        ISPELL-ARGS EXTENDED-CHARACTER-MODE)
  22132. +
  22133. +DICTIONARY-NAME is a possible value of variable `ispell-dictionary', nil
  22134. +means the default dictionary.
  22135. +
  22136. +CASECHARS is a regular expression of valid characters that comprise a
  22137. +word.
  22138. +
  22139. +NOT-CASECHARS is the opposite regexp of CASECHARS.
  22140. +
  22141. +OTHERCHARS is a regular expression of other characters that are valid
  22142. +in word constructs.  Otherchars cannot be adjacent to each other in a
  22143. +word, nor can they begin or end a word.  This implies we can't check
  22144. +"Stevens'" as a correct possessive and other correct formations.
  22145. +
  22146. +Hint: regexp syntax requires the hyphen to be declared first here.
  22147. +
  22148. +MANY-OTHERCHARS-P is non-nil if many otherchars are to be allowed in a
  22149. +word instead of only one.
  22150. +
  22151. +ISPELL-ARGS is a list of additional arguments passed to the ispell
  22152. +subprocess.
  22153. +
  22154. +EXTENDED-CHARACTER-MODE should be used when dictionaries are used which
  22155. +have been configured in Ispell's parse.y.  (For example, umlauts
  22156. +can be encoded as \"a, a\", "a, ...)  Defaults are ~tex and ~nroff
  22157. +in English.  This has the same effect as the command-line `-T' option.
  22158. +The buffer Major Mode controls Ispell's parsing in tex or nroff mode,
  22159. +but the dictionary can control the extended character mode.
  22160. +Both defaults can be overruled in a buffer-local fashion. See
  22161. +`ispell-parsing-keyword' for details on this.
  22162. +
  22163. +Note that the CASECHARS and OTHERCHARS slots of the alist should
  22164. +contain the same character set as casechars and otherchars in the
  22165. +language.aff file (e.g., english.aff).Fispell-word
  22166. +Check spelling of word under or before the cursor.
  22167. +If the word is not found in dictionary, display possible corrections
  22168. +in a window and so you can choose one.
  22169. +
  22170. +With a prefix argument (or if CONTINUE is non-nil),
  22171. +resume interrupted spell-checking of a buffer or region.
  22172. +
  22173. +If optional argument FOLLOWING is non-nil or if `ispell-following-word'
  22174. +is non-nil when called interactively, then the following word
  22175. +(rather than preceding) is checked when the cursor is not over a word.
  22176. +When the optional argument QUIETLY is non-nil or `ispell-quietly' is non-nil
  22177. +when called interactively, non-corrective messages are suppressed.
  22178. +
  22179. +Word syntax described by `ispell-dictionary-alist' (which see).
  22180. +
  22181. +This will check or reload the dictionary.  Use \[ispell-change-dictionary]
  22182. +or \[ispell-region] to update the Ispell process.Fispell-help
  22183. +Display a list of the options available when a misspelling is encountered.
  22184. +
  22185. +Selections are:
  22186. +
  22187. +DIGIT: Replace the word with a digit offered in the *Choices* buffer.
  22188. +SPC:   Accept word this time.
  22189. +`i':   Accept word and insert into private dictionary.
  22190. +`a':   Accept word for this session.
  22191. +`A':   Accept word and place in `buffer-local dictionary'.
  22192. +`r':   Replace word with typed-in value.  Rechecked.
  22193. +`R':   Replace word with typed-in value. Query-replaced in buffer. Rechecked.
  22194. +`?':   Show these commands.
  22195. +`x':   Exit spelling buffer.  Move cursor to original point.
  22196. +`X':   Exit spelling buffer.  Leaves cursor at the current point, and permits
  22197. +        the aborted check to be completed later.
  22198. +`q':   Quit spelling session (Kills ispell process).
  22199. +`l':   Look up typed-in replacement in alternate dictionary.  Wildcards okay.
  22200. +`u':   Like `i', but the word is lower-cased first.
  22201. +`m':   Like `i', but allows one to include dictionary completion information.
  22202. +`C-l':  redraws screen
  22203. +`C-r':  recursive edit
  22204. +`C-z':  suspend emacs or iconify frameFispell-kill-ispell
  22205. +Kill current Ispell process (so that you may start a fresh one).
  22206. +With NO-ERROR, just return non-nil if there was no Ispell running.Fispell-change-dictionary
  22207. +Change `ispell-dictionary' (q.v.) and kill old Ispell process.
  22208. +A new one will be started as soon as necessary.
  22209. +
  22210. +By just answering RET you can find out what the current dictionary is.
  22211. +
  22212. +With prefix argument, set the default directory.Fispell-region
  22213. +Interactively check a region for spelling errors.Fispell-buffer
  22214. +Check the current buffer for spelling errors interactively.Fispell-complete-word
  22215. +Look up word before or under point in dictionary (see lookup-words command)
  22216. +and try to complete it.  If optional INTERIOR-FRAG is non-nil then the word
  22217. +may be a character sequence inside of a word.
  22218. +
  22219. +Standard ispell choices are then available.Fispell-complete-word-interior-frag
  22220. +Completes word matching character sequence inside a word.Fispell-message
  22221. +Check the spelling of a mail message or news post.
  22222. +Don't check spelling of message headers except the Subject field.
  22223. +Don't check included messages.
  22224. +
  22225. +To abort spell checking of a message REGION and send the message anyway,
  22226. +use the `x' or `q' command.  (Any subsequent regions will be checked.)
  22227. +The `X' command aborts the message send so that you can edit the buffer.
  22228. +
  22229. +To spell-check whenever a message is sent, include the appropriate lines
  22230. +in your .emacs file:
  22231. +   (add-hook 'news-inews-hook 'ispell-message)
  22232. +   (add-hook 'mail-send-hook  'ispell-message)
  22233. +   (add-hook 'mh-before-send-letter-hook 'ispell-message)
  22234. +
  22235. +you can bind this to the key C-c i in GNUS or mail by adding to
  22236. +`news-reply-mode-hook' or `mail-mode-hook' the following lambda expression:
  22237. +   (function (lambda () (local-set-key "\C-ci" 'ispell-message)))Vledit-save-files
  22238. +*Non-nil means Ledit should save files before transferring to Lisp.Vledit-go-to-lisp-string
  22239. +*Shell commands to execute to resume Lisp job.Vledit-go-to-liszt-string
  22240. +*Shell commands to execute to resume Lisp compiler job.Fledit-mode
  22241. +\<ledit-mode-map>Major mode for editing text and stuffing it to a Lisp job.
  22242. +Like Lisp mode, plus these special commands:
  22243. +  \[ledit-save-defun]    -- record defun at or after point
  22244. +       for later transmission to Lisp job.
  22245. +  \[ledit-save-region] -- record region for later transmission to Lisp job.
  22246. +  \[ledit-go-to-lisp] -- transfer to Lisp job and transmit saved text.
  22247. +  \[ledit-go-to-liszt] -- transfer to Liszt (Lisp compiler) job
  22248. +       and transmit saved text.
  22249. +\{ledit-mode-map}
  22250. +To make Lisp mode automatically change to Ledit mode,
  22251. +do (setq lisp-mode-hook 'ledit-from-lisp-mode)Flife
  22252. +Run Conway's Life simulation.
  22253. +The starting pattern is randomly selected.  Prefix arg (optional first
  22254. +arg non-nil from a program) is the number of seconds to sleep between
  22255. +generations (this defaults to 1).Funload-feature
  22256. +Unload the library that provided FEATURE, restoring all its autoloads.
  22257. +If the feature is required by any other loaded code, and optional FORCE
  22258. +is nil, raise an error.Vlpr-switches
  22259. +*List of strings to pass as extra switch args to `lpr' when it is invoked.Vlpr-command
  22260. +*Shell command for printing a fileFlpr-buffer
  22261. +Print buffer contents as with Unix command `lpr'.
  22262. +`lpr-switches' is a list of extra switches (strings) to pass to lpr.Fprint-buffer
  22263. +Print buffer contents as with Unix command `lpr -p'.
  22264. +`lpr-switches' is a list of extra switches (strings) to pass to lpr.Flpr-region
  22265. +Print region contents as with Unix command `lpr'.
  22266. +`lpr-switches' is a list of extra switches (strings) to pass to lpr.Fprint-region
  22267. +Print region contents as with Unix command `lpr -p'.
  22268. +`lpr-switches' is a list of extra switches (strings) to pass to lpr.Fphases-of-moon
  22269. +Display the quarters of the moon for last month, this month, and next month.
  22270. +If called with an optional prefix argument, prompts for month and year.
  22271. +
  22272. +This function is suitable for execution in a .emacs file.Fname-last-kbd-macro
  22273. +Assign a name to the last keyboard macro defined.
  22274. +Argument SYMBOL is the name to define.
  22275. +The symbol's function definition becomes the keyboard macro string.
  22276. +Such a "function" cannot be called from Lisp, but it is a valid editor command.Finsert-kbd-macro
  22277. +Insert in buffer the definition of kbd macro NAME, as Lisp code.
  22278. +Optional second arg KEYS means also record the keys it is on
  22279. +(this is the prefix argument, when calling interactively).
  22280. +
  22281. +This Lisp code will, when executed, define the kbd macro with the same
  22282. +definition it has now.  If you say to record the keys, the Lisp code
  22283. +will also rebind those keys to the macro.  Only global key bindings
  22284. +are recorded since executing this Lisp code always makes global
  22285. +bindings.
  22286. +
  22287. +To save a kbd macro, visit a file of Lisp code such as your `~/.emacs',
  22288. +use this command, and then save the file.Fkbd-macro-query
  22289. +Query user during kbd macro execution.
  22290. +  With prefix argument, enters recursive edit, reading keyboard
  22291. +commands even within a kbd macro.  You can give different commands
  22292. +each time the macro executes.
  22293. +  Without prefix argument, asks whether to continue running the macro.
  22294. +Your options are: \<query-replace-map>
  22295. +\[act]    Finish this iteration normally and continue with the next.
  22296. +\[skip]    Skip the rest of this iteration, and start the next.
  22297. +\[exit]    Stop the macro entirely right now.
  22298. +\[recenter]    Redisplay the screen, then ask again.
  22299. +\[edit]    Enter recursive edit; ask again when you exit from that.Fapply-macro-to-region-lines
  22300. +For each complete line between point and mark, move to the beginning
  22301. +of the line, and run the last keyboard macro.
  22302. +
  22303. +When called from lisp, this function takes two arguments TOP and
  22304. +BOTTOM, describing the current region.  TOP must be before BOTTOM.
  22305. +The optional third argument MACRO specifies a keyboard macro to
  22306. +execute.
  22307. +
  22308. +This is useful for quoting or unquoting included text, adding and
  22309. +removing comments, or producing tables where the entries are regular.
  22310. +
  22311. +For example, in Usenet articles, sections of text quoted from another
  22312. +author are indented, or have each line start with `>'.  To quote a
  22313. +section of text, define a keyboard macro which inserts `>', put point
  22314. +and mark at opposite ends of the quoted section, and use
  22315. +`\[apply-macro-to-region-lines]' to mark the entire section.
  22316. +
  22317. +Suppose you wanted to build a keyword table in C where each entry
  22318. +looked like this:
  22319. +
  22320. +    { "foo", foo_data, foo_function }, 
  22321. +    { "bar", bar_data, bar_function },
  22322. +    { "baz", baz_data, baz_function },
  22323. +
  22324. +You could enter the names in this format:
  22325. +
  22326. +    foo
  22327. +    bar
  22328. +    baz
  22329. +
  22330. +and write a macro to massage a word into a table entry:
  22331. +
  22332. +    \C-x (
  22333. +       \M-d { "\C-y", \C-y_data, \C-y_function },
  22334. +    \C-x )
  22335. +
  22336. +and then select the region of un-tablified names and use
  22337. +`\[apply-macro-to-region-lines]' to build the table from the names.
  22338. +Fmail-extract-address-components
  22339. +Given an RFC-822 ADDRESS, extract full name and canonical address.
  22340. +Returns a list of the form (FULL-NAME CANONICAL-ADDRESS).
  22341. +If no name can be extracted, FULL-NAME will be nil.
  22342. +ADDRESS may be a string or a buffer.  If it is a buffer, the visible 
  22343. + (narrowed) portion of the buffer will be interpreted as the address.
  22344. + (This feature exists so that the clever caller might be able to avoid
  22345. + consing a string.)
  22346. +If ADDRESS contains more than one RFC-822 address, only the first is
  22347. + returned.  Some day this function may be extended to extract multiple
  22348. + addresses, or perhaps return the position at which parsing stopped.Fwhat-domain
  22349. +Convert mail domain to country tit corresponds to.Vmail-use-rfc822
  22350. +*If non-nil, use a full, hairy RFC822 parser on mail addresses.
  22351. +Otherwise, (the default) use a smaller, somewhat faster, and
  22352. +often correct parser.Fmail-fetch-field
  22353. +Return the value of the header field FIELD-NAME.
  22354. +The buffer is expected to be narrowed to just the headers of the message.
  22355. +If second arg LAST is non-nil, use the last such field if there are several.
  22356. +If third arg ALL is non-nil, concatenate all such fields with commas between.Fbuild-mail-abbrevs
  22357. +Read mail aliases from `~/.mailrc' file and set `mail-abbrevs'.Fdefine-mail-abbrev
  22358. +Define NAME as a mail-abbrev that translates to DEFINITION.
  22359. +If DEFINITION contains multiple addresses, separate them with commas.Fdefine-mail-alias
  22360. +Define NAME as a mail alias that translates to DEFINITION.
  22361. +This means that sending a message to NAME will actually send to DEFINITION.
  22362. +DEFINITION can be one or more mail addresses separated by commas.Fmakefile-mode
  22363. +Major mode for editing Makefiles.
  22364. +Calling this function invokes the function(s) "makefile-mode-hook" before
  22365. +doing anything else.
  22366. +
  22367. +\{makefile-mode-map}
  22368. +
  22369. +In the browser, use the following keys:
  22370. +
  22371. +\{makefile-browser-map}
  22372. +
  22373. +makefile-mode can be configured by modifying the following
  22374. +variables:
  22375. +
  22376. +makefile-mode-name:
  22377. +    The "pretty name" of makefile-mode, as it
  22378. +    appears in the modeline.
  22379. +
  22380. +makefile-browser-buffer-name:
  22381. +    Name of the macro- and target browser buffer.
  22382. +
  22383. +makefile-target-colon:
  22384. +    The string that gets appended to all target names
  22385. +    inserted by makefile-insert-target.
  22386. +    ":" or "::" are quite common values.
  22387. +
  22388. +makefile-macro-assign:
  22389. +   The string that gets appended to all macro names
  22390. +   inserted by makefile-insert-macro.
  22391. +   The normal value should be " = ", since this is what
  22392. +   standard make expects. However, newer makes such as dmake
  22393. +   allow a larger variety of different macro assignments, so you
  22394. +   might prefer to use " += " or " := " .
  22395. +
  22396. +makefile-tab-after-target-colon:
  22397. +   If you want a TAB (instead of a space) to be appended after the
  22398. +   target colon, then set this to a non-nil value.
  22399. +
  22400. +makefile-browser-leftmost-column:
  22401. +   Number of blanks to the left of the browser selection mark.
  22402. +
  22403. +makefile-browser-cursor-column:
  22404. +   Column in which the cursor is positioned when it moves
  22405. +   up or down in the browser.
  22406. +
  22407. +makefile-browser-selected-mark:
  22408. +   String used to mark selected entries in the browser.
  22409. +
  22410. +makefile-browser-unselected-mark:
  22411. +   String used to mark unselected entries in the browser.
  22412. +
  22413. +makefile-browser-auto-advance-after-selection-p:
  22414. +   If this variable is set to a non-nil value the cursor
  22415. +   will automagically advance to the next line after an item
  22416. +   has been selected in the browser.
  22417. +
  22418. +makefile-pickup-everything-picks-up-filenames-p:
  22419. +   If this variable is set to a non-nil value then
  22420. +   makefile-pickup-everything also picks up filenames as targets
  22421. +   (i.e. it calls makefile-find-filenames-as-targets), otherwise
  22422. +   filenames are omitted.
  22423. +
  22424. +makefile-cleanup-continuations-p:
  22425. +   If this variable is set to a non-nil value then makefile-mode
  22426. +   will assure that no line in the file ends with a backslash
  22427. +   (the continuation character) followed by any whitespace.
  22428. +   This is done by silently removing the trailing whitespace, leaving
  22429. +   the backslash itself intact.
  22430. +   IMPORTANT: Please note that enabling this option causes makefile-mode
  22431. +   to MODIFY A FILE WITHOUT YOUR CONFIRMATION when 'it seems necessary'.
  22432. +
  22433. +makefile-browser-hook:
  22434. +   A function or list of functions to be called just before the
  22435. +   browser is entered. This is executed in the makefile buffer.
  22436. +
  22437. +makefile-special-targets-list:
  22438. +   List of special targets. You will be offered to complete
  22439. +   on one of those in the minibuffer whenever you enter a "."
  22440. +   at the beginning of a line in makefile-mode.Fmake-command-summary
  22441. +Make a summary of current key bindings in the buffer *Summary*.
  22442. +Previous contents of that buffer are killed first.Fmanual-entry
  22443. +Get a Un*x manual page and put it in a buffer.
  22444. +This command is the top-level command in the man package.  It runs a Un*x
  22445. +command to retrieve and clean a manpage in the background and places the
  22446. +results in a Man mode (manpage browsing) buffer.  See variable
  22447. +`Man-notify' for what happens when the buffer is ready.
  22448. +Normally, if a buffer already exists for this man page, it will display
  22449. +immediately; either a prefix argument or a nil value to `Man-reuse-okay-p'
  22450. +overrides this and forces the man page to be regenerated.Fmap-y-or-n-p
  22451. +Ask a series of boolean questions.
  22452. +Takes args PROMPTER ACTOR LIST, and optional args HELP and ACTION-ALIST.
  22453. +
  22454. +LIST is a list of objects, or a function of no arguments to return the next
  22455. +object or nil.
  22456. +
  22457. +If PROMPTER is a string, the prompt is (format PROMPTER OBJECT).  If not
  22458. +a string, PROMPTER is a function of one arg (an object from LIST), which
  22459. +returns a string to be used as the prompt for that object.  If the return
  22460. +value is not a string, it is eval'd to get the answer; it may be nil to
  22461. +ignore the object, t to act on the object without asking the user, or a
  22462. +form to do a more complex prompt.
  22463. +
  22464. +ACTOR is a function of one arg (an object from LIST),
  22465. +which gets called with each object that the user answers `yes' for.
  22466. +
  22467. +If HELP is given, it is a list (OBJECT OBJECTS ACTION),
  22468. +where OBJECT is a string giving the singular noun for an elt of LIST;
  22469. +OBJECTS is the plural noun for elts of LIST, and ACTION is a transitive
  22470. +verb describing ACTOR.  The default is ("object" "objects" "act on").
  22471. +
  22472. +At the prompts, the user may enter y, Y, or SPC to act on that object;
  22473. +n, N, or DEL to skip that object; ! to act on all following objects;
  22474. +ESC or q to exit (skip all following objects); . (period) to act on the
  22475. +current object and then exit; or \[help-command] to get help.
  22476. +
  22477. +If ACTION-ALIST is given, it is an alist (KEY FUNCTION HELP) of extra keys
  22478. +that will be accepted.  KEY is a character; FUNCTION is a function of one
  22479. +arg (an object from LIST); HELP is a string.  When the user hits KEY,
  22480. +FUNCTION is called.  If it returns non-nil, the object is considered
  22481. +"acted upon", and the next object from LIST is processed.  If it returns
  22482. +nil, the prompt is repeated for the same object.
  22483. +
  22484. +Final optional argument NO-CURSOR-IN-ECHO-AREA non-nil says not to set
  22485. +`cursor-in-echo-area' while prompting.
  22486. +
  22487. +This function uses `query-replace-map' to define the standard responses,
  22488. +but not all of the responses which `query-replace' understands
  22489. +are meaningful here.
  22490. +
  22491. +Returns the number of actions taken.Fmh-smail
  22492. +Compose and send mail with the MH mail system.
  22493. +This function is an entry point to mh-e, the Emacs front end
  22494. +to the MH mail system.Fmh-smail-other-window
  22495. +Compose and send mail in other window with the MH mail system.
  22496. +This function is an entry point to mh-e, the Emacs front end
  22497. +to the MH mail system.Fmh-letter-mode
  22498. +Mode for composing letters in mh-e.\<mh-letter-mode-map>
  22499. +When you have finished composing, type \[mh-send-letter] to send the letter.
  22500. +
  22501. +\{mh-letter-mode-map}
  22502. +
  22503. +Variables controlling this mode (defaults in parentheses):
  22504. +
  22505. + mh-delete-yanked-msg-window (nil)
  22506. +    If non-nil, \[mh-yank-cur-msg] will delete any windows displaying
  22507. +    the yanked message.
  22508. +
  22509. + mh-yank-from-start-of-msg (t)
  22510. +    If non-nil, \[mh-yank-cur-msg] will include the entire message.
  22511. +    If `body', just yank the body (no header).
  22512. +    If nil, only the portion of the message following the point will be yanked.
  22513. +    If there is a region, this variable is ignored.
  22514. +
  22515. + mh-signature-file-name ("~/.signature")
  22516. +    File to be inserted into message by \[mh-insert-signature].
  22517. +
  22518. +Upon invoking mh-letter-mode, text-mode-hook and mh-letter-mode-hook are
  22519. +invoked with no args, if those values are non-nil.Fmh-rmail
  22520. +Inc(orporate) new mail with MH, or, with arg, scan an MH mail folder.
  22521. +This function is an entry point to mh-e, the Emacs front end
  22522. +to the MH mail system.Fconvert-mocklisp-buffer
  22523. +Convert buffer of Mocklisp code to real Lisp that GNU Emacs can run.Fmodula-2-mode
  22524. +This is a mode intended to support program development in Modula-2.
  22525. +All control constructs of Modula-2 can be reached by typing C-c
  22526. +followed by the first character of the construct.
  22527. +\<m2-mode-map>
  22528. +  \[m2-begin] begin         \[m2-case] case
  22529. +  \[m2-definition] definition    \[m2-else] else
  22530. +  \[m2-for] for           \[m2-header] header
  22531. +  \[m2-if] if            \[m2-module] module
  22532. +  \[m2-loop] loop          \[m2-or] or
  22533. +  \[m2-procedure] procedure     Control-c Control-w with
  22534. +  \[m2-record] record        \[m2-stdio] stdio
  22535. +  \[m2-type] type          \[m2-until] until
  22536. +  \[m2-var] var           \[m2-while] while
  22537. +  \[m2-export] export        \[m2-import] import
  22538. +  \[m2-begin-comment] begin-comment \[m2-end-comment] end-comment
  22539. +  \[suspend-emacs] suspend Emacs     \[m2-toggle] toggle
  22540. +  \[m2-compile] compile           \[m2-next-error] next-error
  22541. +  \[m2-link] link
  22542. +
  22543. +   `m2-indent' controls the number of spaces for each indentation.
  22544. +   `m2-compile-command' holds the command to compile a Modula-2 program.
  22545. +   `m2-link-command' holds the command to link a Modula-2 program.Fmpuz
  22546. +Multiplication puzzle with GNU Emacs.Fenable-command
  22547. +Allow COMMAND to be executed without special confirmation from now on.
  22548. +The user's .emacs file is altered so that this will apply
  22549. +to future sessions.Fdisable-command
  22550. +Require special confirmation to execute COMMAND from now on.
  22551. +The user's .emacs file is altered so that this will apply
  22552. +to future sessions.Fnroff-mode
  22553. +Major mode for editing text intended for nroff to format.
  22554. +\{nroff-mode-map}
  22555. +Turning on Nroff mode runs `text-mode-hook', then `nroff-mode-hook'.
  22556. +Also, try `nroff-electric-mode', for automatically inserting
  22557. +closing requests for requests that are used in matched pairs.Flist-options
  22558. +Display a list of Emacs user options, with values and documentation.Fedit-options
  22559. +Edit a list of Emacs user option values.
  22560. +Selects a buffer containing such a list,
  22561. +in which there are commands to set the option values.
  22562. +Type \[describe-mode] in that buffer for a list of commands.Foutline-mode
  22563. +Set major mode for editing outlines with selective display.
  22564. +Headings are lines which start with asterisks: one for major headings,
  22565. +two for subheadings, etc.  Lines not starting with asterisks are body lines. 
  22566. +
  22567. +Body text or subheadings under a heading can be made temporarily
  22568. +invisible, or visible again.  Invisible lines are attached to the end 
  22569. +of the heading, so they move with it, if the line is killed and yanked
  22570. +back.  A heading with text hidden under it is marked with an ellipsis (...).
  22571. +
  22572. +Commands:\<outline-mode-map>
  22573. +\[outline-next-visible-heading]   outline-next-visible-heading      move by visible headings
  22574. +\[outline-previous-visible-heading]   outline-previous-visible-heading
  22575. +\[outline-forward-same-level]   outline-forward-same-level        similar but skip subheadings
  22576. +\[outline-backward-same-level]   outline-backward-same-level
  22577. +\[outline-up-heading]   outline-up-heading            move from subheading to heading
  22578. +
  22579. +\[hide-body]    make all text invisible (not headings).
  22580. +\[show-all]    make everything in buffer visible.
  22581. +
  22582. +The remaining commands are used when point is on a heading line.
  22583. +They apply to some of the body or subheadings of that heading.
  22584. +\[hide-subtree]   hide-subtree    make body and subheadings invisible.
  22585. +\[show-subtree]   show-subtree    make body and subheadings visible.
  22586. +\[show-children]   show-children    make direct subheadings visible.
  22587. +         No effect on body, or subheadings 2 or more levels down.
  22588. +         With arg N, affects subheadings N levels down.
  22589. +\[hide-entry]       make immediately following body invisible.
  22590. +\[show-entry]       make it visible.
  22591. +\[hide-leaves]       make body under heading and under its subheadings invisible.
  22592. +             The subheadings remain visible.
  22593. +\[show-branches]  make all subheadings at all levels visible.
  22594. +
  22595. +The variable `outline-regexp' can be changed to control what is a heading.
  22596. +A line is a heading if `outline-regexp' matches something at the
  22597. +beginning of the line.  The longer the match, the deeper the level.
  22598. +
  22599. +Turning on outline mode calls the value of `text-mode-hook' and then of
  22600. +`outline-mode-hook', if they are non-nil.Foutline-minor-mode
  22601. +Toggle Outline minor mode.
  22602. +With arg, turn Outline minor mode on if arg is positive, off otherwise.
  22603. +See the command `outline-mode' for more information on this mode.Fpascal-mode
  22604. +Major mode for editing Pascal code. \<pascal-mode-map>
  22605. +TAB indents for Pascal code.  Delete converts tabs to spaces as it moves back.
  22606. +
  22607. +\[pascal-complete-word] completes the word around current point with respect to position in code
  22608. +\[pascal-show-completions] shows all possible completions at this point.
  22609. +
  22610. +Other useful functions are:
  22611. +
  22612. +\[pascal-mark-defun]    - Mark function.
  22613. +\[pascal-insert-block]    - insert begin ... end;
  22614. +\[pascal-star-comment]    - insert (* ... *)
  22615. +\[pascal-comment-area]    - Put marked area in a comment, fixing nested comments.
  22616. +\[pascal-uncomment-area]    - Uncomment an area commented with \[pascal-comment-area].
  22617. +\[pascal-beg-of-defun]    - Move to beginning of current function.
  22618. +\[pascal-end-of-defun]    - Move to end of current function.
  22619. +\[pascal-goto-defun]    - Goto function prompted for in the minibuffer.
  22620. +\[pascal-outline]    - Enter pascal-outline-mode (see also pascal-outline).
  22621. +
  22622. +Variables controlling indentation/edit style:
  22623. +
  22624. + pascal-indent-level      (default 3)
  22625. +    Indentation of Pascal statements with respect to containing block.
  22626. + pascal-case-indent       (default 2)
  22627. +    Indentation for case statements.
  22628. + pascal-auto-newline      (default nil)
  22629. +    Non-nil means automatically newline after simcolons and the punctation mark
  22630. +    after an end.
  22631. + pascal-tab-always-indent (defualt t)
  22632. +    Non-nil means TAB in Pascal mode should always reindent the current line,
  22633. +    regardless of where in the line point is when the TAB command is used.
  22634. + pascal-auto-endcomments  (default t)
  22635. +    Non-nil means a comment { ... } is set after the ends which ends cases and
  22636. +    functions. The name of the function or case will be set between the braces.
  22637. +
  22638. +See also the user variables pascal-type-keywords, pascal-start-keywords and
  22639. +pascal-separator-keywords.
  22640. +
  22641. +Turning on Pascal mode calls the value of the variable pascal-mode-hook with
  22642. +no args, if that value is non-nil.Fperl-mode
  22643. +Major mode for editing Perl code.
  22644. +Expression and list commands understand all Perl brackets.
  22645. +Tab indents for Perl code.
  22646. +Comments are delimited with # ... \n.
  22647. +Paragraphs are separated by blank lines only.
  22648. +Delete converts tabs to spaces as it moves back.
  22649. +\{perl-mode-map}
  22650. +Variables controlling indentation style:
  22651. + perl-tab-always-indent
  22652. +    Non-nil means TAB in Perl mode should always indent the current line,
  22653. +    regardless of where in the line point is when the TAB command is used.
  22654. + perl-tab-to-comment
  22655. +    Non-nil means that for lines which don't need indenting, TAB will
  22656. +    either delete an empty comment, indent an existing comment, move 
  22657. +    to end-of-line, or if at end-of-line already, create a new comment.
  22658. + perl-nochange
  22659. +    Lines starting with this regular expression are not auto-indented.
  22660. + perl-indent-level
  22661. +    Indentation of Perl statements within surrounding block.
  22662. +    The surrounding block's indentation is the indentation
  22663. +    of the line on which the open-brace appears.
  22664. + perl-continued-statement-offset
  22665. +    Extra indentation given to a substatement, such as the
  22666. +    then-clause of an if or body of a while.
  22667. + perl-continued-brace-offset
  22668. +    Extra indentation given to a brace that starts a substatement.
  22669. +    This is in addition to `perl-continued-statement-offset'.
  22670. + perl-brace-offset
  22671. +    Extra indentation for line if it starts with an open brace.
  22672. + perl-brace-imaginary-offset
  22673. +    An open brace following other text is treated as if it were
  22674. +    this far to the right of the start of its line.
  22675. + perl-label-offset
  22676. +    Extra indentation for line that is a label.
  22677. +
  22678. +Various indentation styles:       K&R  BSD  BLK  GNU  LW
  22679. +  perl-indent-level                5    8    0    2    4
  22680. +  perl-continued-statement-offset  5    8    4    2    4
  22681. +  perl-continued-brace-offset      0    0    0    0   -4
  22682. +  perl-brace-offset               -5   -8    0    0    0
  22683. +  perl-brace-imaginary-offset      0    0    4    0    0
  22684. +  perl-label-offset               -5   -8   -2   -2   -2
  22685. +
  22686. +Turning on Perl mode runs the normal hook `perl-mode-hook'.Fpicture-mode
  22687. +Switch to Picture mode, in which a quarter-plane screen model is used.
  22688. +Printing characters replace instead of inserting themselves with motion
  22689. +afterwards settable by these commands:
  22690. +  C-c <      Move left after insertion.
  22691. +  C-c >      Move right after insertion.
  22692. +  C-c ^      Move up after insertion.
  22693. +  C-c .      Move down after insertion.
  22694. +  C-c `      Move northwest (nw) after insertion.
  22695. +  C-c '      Move northeast (ne) after insertion.
  22696. +  C-c /      Move southwest (sw) after insertion.
  22697. +  C-c \   Move southeast (se) after insertion.
  22698. +The current direction is displayed in the mode line.  The initial
  22699. +direction is right.  Whitespace is inserted and tabs are changed to
  22700. +spaces when required by movement.  You can move around in the buffer
  22701. +with these commands:
  22702. +  \[picture-move-down]      Move vertically to SAME column in previous line.
  22703. +  \[picture-move-up]      Move vertically to SAME column in next line.
  22704. +  \[picture-end-of-line]      Move to column following last non-whitespace character.
  22705. +  \[picture-forward-column]      Move right inserting spaces if required.
  22706. +  \[picture-backward-column]      Move left changing tabs to spaces if required.
  22707. +  C-c C-f Move in direction of current picture motion.
  22708. +  C-c C-b Move in opposite direction of current picture motion.
  22709. +  Return  Move to beginning of next line.
  22710. +You can edit tabular text with these commands:
  22711. +  M-Tab      Move to column beneath (or at) next interesting character.
  22712. +        `Indents' relative to a previous line.
  22713. +  Tab      Move to next stop in tab stop list.
  22714. +  C-c Tab Set tab stops according to context of this line.
  22715. +        With ARG resets tab stops to default (global) value.
  22716. +        See also documentation of variable    picture-tab-chars
  22717. +        which defines "interesting character".  You can manually
  22718. +        change the tab stop list with command \[edit-tab-stops].
  22719. +You can manipulate text with these commands:
  22720. +  C-d      Clear (replace) ARG columns after point without moving.
  22721. +  C-c C-d Delete char at point - the command normally assigned to C-d.
  22722. +  \[picture-backward-clear-column]  Clear (replace) ARG columns before point, moving back over them.
  22723. +  \[picture-clear-line]      Clear ARG lines, advancing over them.     The cleared
  22724. +        text is saved in the kill ring.
  22725. +  \[picture-open-line]      Open blank line(s) beneath current line.
  22726. +You can manipulate rectangles with these commands:
  22727. +  C-c C-k Clear (or kill) a rectangle and save it.
  22728. +  C-c C-w Like C-c C-k except rectangle is saved in named register.
  22729. +  C-c C-y Overlay (or insert) currently saved rectangle at point.
  22730. +  C-c C-x Like C-c C-y except rectangle is taken from named register.
  22731. +  \[copy-rectangle-to-register]   Copies a rectangle to a register.
  22732. +  \[advertised-undo]   Can undo effects of rectangle overlay commands
  22733. +        commands if invoked soon enough.
  22734. +You can return to the previous mode with:
  22735. +  C-c C-c Which also strips trailing whitespace from every line.
  22736. +        Stripping is suppressed by supplying an argument.
  22737. +
  22738. +Entry to this mode calls the value of  picture-mode-hook  if non-nil.
  22739. +
  22740. +Note that Picture mode commands will work outside of Picture mode, but
  22741. +they are not defaultly assigned to keys.Fprolog-mode
  22742. +Major mode for editing Prolog code for Prologs.
  22743. +Blank lines and `%%...' separate paragraphs.  `%'s start comments.
  22744. +Commands:
  22745. +\{prolog-mode-map}
  22746. +Entry to this mode calls the value of `prolog-mode-hook'
  22747. +if that value is non-nil.Frun-prolog
  22748. +Run an inferior Prolog process, input and output via buffer *prolog*.Fremote-compile
  22749. +Compile the the current buffer's directory on HOST.  Log in as USER.
  22750. +See \[compile].Fdelete-rectangle
  22751. +Delete (don't save) text in rectangle with point and mark as corners.
  22752. +The same range of columns is deleted in each line starting with the line
  22753. +where the region begins and ending with the line where the region ends.Fdelete-extract-rectangle
  22754. +Delete contents of rectangle and return it as a list of strings.
  22755. +Arguments START and END are the corners of the rectangle.
  22756. +The value is list of strings, one for each line of the rectangle.Fextract-rectangle
  22757. +Return contents of rectangle with corners at START and END.
  22758. +Value is list of strings, one for each line of the rectangle.Fkill-rectangle
  22759. +Delete rectangle with corners at point and mark; save as last killed one.
  22760. +Calling from program, supply two args START and END, buffer positions.
  22761. +But in programs you might prefer to use `delete-extract-rectangle'.Fyank-rectangle
  22762. +Yank the last killed rectangle with upper left corner at point.Finsert-rectangle
  22763. +Insert text of RECTANGLE with upper left corner at point.
  22764. +RECTANGLE's first line is inserted at point, its second
  22765. +line is inserted at a point vertically under point, etc.
  22766. +RECTANGLE should be a list of strings.
  22767. +After this command, the mark is at the upper left corner
  22768. +and point is at the lower right corner.Fopen-rectangle
  22769. +Blank out rectangle with corners at point and mark, shifting text right.
  22770. +The text previously in the region is not overwritten by the blanks,
  22771. +but instead winds up to the right of the rectangle.Fstring-rectangle
  22772. +Insert STRING on each line of the region-rectangle, shifting text right.
  22773. +The left edge of the rectangle specifies the column for insertion.
  22774. +This command does not delete or overwrite any existing text.
  22775. +
  22776. +Called from a program, takes three args; START, END and STRING.Fclear-rectangle
  22777. +Blank out rectangle with corners at point and mark.
  22778. +The text previously in the region is overwritten by the blanks.
  22779. +When called from a program, requires two args which specify the corners.Freposition-window
  22780. +Make the current definition and/or comment visible.
  22781. +Further invocations move it to the top of the window or toggle the
  22782. +visibility of comments that precede it.
  22783. +  Point is left unchanged unless prefix ARG is supplied.
  22784. +  If the definition is fully onscreen, it is moved to the top of the
  22785. +window.  If it is partly offscreen, the window is scrolled to get the
  22786. +definition (or as much as will fit) onscreen, unless point is in a comment
  22787. +which is also partly offscreen, in which case the scrolling attempts to get
  22788. +as much of the comment onscreen as possible.
  22789. +  Initially `reposition-window' attempts to make both the definition and
  22790. +preceding comments visible.  Further invocations toggle the visibility of
  22791. +the comment lines.
  22792. +  If ARG is non-nil, point may move in order to make the whole defun
  22793. +visible (if only part could otherwise be made so), to make the defun line
  22794. +visible (if point is in code and it could not be made so, or if only
  22795. +comments, including the first comment line, are visible), or to make the
  22796. +first comment line visible (if point is in a comment).Fresume-suspend-hook
  22797. +Clear out the file used for transmitting args when Emacs resumes.Fring-p
  22798. +Returns t if X is a ring; nil otherwise.Fmake-ring
  22799. +Make a ring that can contain SIZE elements.Vrlogin-program
  22800. +*Name of program to invoke rloginVrlogin-explicit-args
  22801. +*List of arguments to pass to rlogin on the command line.Vrlogin-mode-hook
  22802. +*Hooks to run after setting current buffer to rlogin-mode.Vrlogin-process-connection-type
  22803. +*If non-`nil', use a pty for the local rlogin process.  
  22804. +If `nil', use a pipe (if pipes are supported on the local system).  
  22805. +
  22806. +Generally it is better not to waste ptys on systems which have a static
  22807. +number of them.  On the other hand, some implementations of `rlogin' assume
  22808. +a pty is being used, and errors will result from using a pipe instead.Vrlogin-initially-track-cwd
  22809. +*If non-`nil', do remote directory tracking via ange-ftp right away.
  22810. +If `nil', you can still enable directory tracking by doing 
  22811. +`M-x dirtrack-toggle'.Vrlogin-password-paranoia
  22812. +*If non-`nil', query user for a password in the minibuffer when a Password: prompt appears.
  22813. +It's also possible to selectively enter passwords without echoing them in
  22814. +the minibuffer using the command `rlogin-password' explicitly.Frlogin
  22815. +Open a network login connection to HOST via the `rlogin' program.
  22816. +Input is sent line-at-a-time to the remote connection.
  22817. +
  22818. +Communication with the remote host is recorded in a buffer *rlogin-HOST*,
  22819. +where HOST is the first word in the string ARGS.  If a prefix argument is
  22820. +given and the buffer *rlogin-HOST* already exists, a new buffer with a
  22821. +different connection will be made.
  22822. +
  22823. +The variable `rlogin-program' contains the name of the actual program to
  22824. +run.  It can be a relative or absolute path. 
  22825. +
  22826. +The variable `rlogin-explicit-args' is a list of arguments to give to
  22827. +the rlogin when starting.  They are added after any arguments given in ARGS.Vrmail-dont-reply-to-names
  22828. +*A regexp specifying names to prune of reply to messages.
  22829. +A value of nil means exclude your own name only.Vrmail-default-dont-reply-to-names
  22830. +A regular expression specifying part of the value of the default value of
  22831. +the variable `rmail-dont-reply-to-names', for when the user does not set
  22832. +`rmail-dont-reply-to-names' explicitly.  (The other part of the default
  22833. +value is the user's name.)
  22834. +It is useful to set this variable in the site customization file.Vrmail-ignored-headers
  22835. +*Regexp to match Header fields that Rmail should normally hide.Vrmail-highlighted-headers
  22836. +*Regexp to match Header fields that Rmail should normally highlight.
  22837. +A value of nil means don't highlight.
  22838. +See also `rmail-highlight-face'.Vrmail-highlight-face
  22839. +*Face used by Rmail for highlighting headers.Vrmail-delete-after-output
  22840. +*Non-nil means automatically delete a message that is copied to a file.Vrmail-primary-inbox-list
  22841. +*List of files which are inboxes for user's primary mail file `~/RMAIL'.
  22842. +`nil' means the default, which is ("/usr/spool/mail/$USER")
  22843. +(the name varies depending on the operating system,
  22844. +and the value of the environment variable MAIL overrides it).Vrmail-mail-new-frame
  22845. +*Non-nil means Rmail makes a new frame for composing outgoing mail.Vrmail-retry-setup-hook
  22846. +Hook that `rmail-retry-failure' uses in place of `mail-setup-hook'.Vrmail-secondary-file-directory
  22847. +*Directory for additional secondary Rmail files.Vrmail-secondary-file-regexp
  22848. +*Regexp for which files are secondary Rmail files.Frmail
  22849. +Read and edit incoming mail.
  22850. +Moves messages into file named by `rmail-file-name' (a babyl format file)
  22851. + and edits that file in RMAIL Mode.
  22852. +Type \[describe-mode] once editing that file, for a list of RMAIL commands.
  22853. +
  22854. +May be called with file name as argument; then performs rmail editing on
  22855. +that file, but does not copy any new mail into the file.
  22856. +Interactively, if you supply a prefix argument, then you
  22857. +have a chance to specify a file name with the minibuffer.
  22858. +
  22859. +If `rmail-display-summary' is non-nil, make a summary for this RMAIL file.Frmail-mode
  22860. +Rmail Mode is used by \<rmail-mode-map>\[rmail] for editing Rmail files.
  22861. +All normal editing commands are turned off.
  22862. +Instead, these commands are available:
  22863. +
  22864. +\[rmail-beginning-of-message]    Move point to front of this message (same as \[beginning-of-buffer]).
  22865. +\[scroll-up]    Scroll to next screen of this message.
  22866. +\[scroll-down]    Scroll to previous screen of this message.
  22867. +\[rmail-next-undeleted-message]    Move to Next non-deleted message.
  22868. +\[rmail-previous-undeleted-message]    Move to Previous non-deleted message.
  22869. +\[rmail-next-message]    Move to Next message whether deleted or not.
  22870. +\[rmail-previous-message]    Move to Previous message whether deleted or not.
  22871. +\[rmail-first-message]    Move to the first message in Rmail file.
  22872. +\[rmail-last-message]    Move to the last message in Rmail file.
  22873. +\[rmail-show-message]    Jump to message specified by numeric position in file.
  22874. +\[rmail-search]    Search for string and show message it is found in.
  22875. +\[rmail-delete-forward]    Delete this message, move to next nondeleted.
  22876. +\[rmail-delete-backward]    Delete this message, move to previous nondeleted.
  22877. +\[rmail-undelete-previous-message]    Undelete message.  Tries current message, then earlier messages
  22878. +    till a deleted message is found.
  22879. +\[rmail-edit-current-message]    Edit the current message.  \[rmail-cease-edit] to return to Rmail.
  22880. +\[rmail-expunge]    Expunge deleted messages.
  22881. +\[rmail-expunge-and-save]    Expunge and save the file.
  22882. +\[rmail-quit]       Quit Rmail: expunge, save, then switch to another buffer.
  22883. +\[save-buffer] Save without expunging.
  22884. +\[rmail-get-new-mail]    Move new mail from system spool directory into this file.
  22885. +\[rmail-mail]    Mail a message (same as \[mail-other-window]).
  22886. +\[rmail-continue]    Continue composing outgoing message started before.
  22887. +\[rmail-reply]    Reply to this message.  Like \[rmail-mail] but initializes some fields.
  22888. +\[rmail-retry-failure]    Send this message again.  Used on a mailer failure message.
  22889. +\[rmail-forward]    Forward this message to another user.
  22890. +\[rmail-output-to-rmail-file]       Output this message to an Rmail file (append it).
  22891. +\[rmail-output]    Output this message to a Unix-format mail file (append it).
  22892. +\[rmail-input]    Input Rmail file.  Run Rmail on that file.
  22893. +\[rmail-add-label]    Add label to message.  It will be displayed in the mode line.
  22894. +\[rmail-kill-label]    Kill label.  Remove a label from current message.
  22895. +\[rmail-next-labeled-message]   Move to Next message with specified label
  22896. +          (label defaults to last one specified).
  22897. +          Standard labels: filed, unseen, answered, forwarded, deleted.
  22898. +          Any other label is present only if you add it with \[rmail-add-label].
  22899. +\[rmail-previous-labeled-message]   Move to Previous message with specified label
  22900. +\[rmail-summary]    Show headers buffer, with a one line summary of each message.
  22901. +\[rmail-summary-by-labels]    Summarize only messages with particular label(s).
  22902. +\[rmail-summary-by-recipients]   Summarize only messages with particular recipient(s).
  22903. +\[rmail-summary-by-regexp]   Summarize only messages with particular regexp(s).
  22904. +\[rmail-summary-by-topic]   Summarize only messages with subject line regexp(s).
  22905. +\[rmail-toggle-header]    Toggle display of complete header.Frmail-input
  22906. +Run Rmail on file FILENAME.Frot13-other-window
  22907. +Display current buffer in rot 13 in another window.
  22908. +To terminate the rot13 display, delete that window.Ftoggle-rot13-mode
  22909. +Toggle the use of rot 13 encoding for the current window.Vresize-minibuffer-mode
  22910. +*If non-`nil', resize the minibuffer so its entire contents are visible.Vresize-minibuffer-window-max-height
  22911. +*Maximum size the minibuffer window is allowed to become.
  22912. +If less than 1 or not a number, the limit is the height of the frame in
  22913. +which the active minibuffer window resides.Vresize-minibuffer-window-exactly
  22914. +*Allow making minibuffer exactly the size to display all its contents.
  22915. +If `nil', the minibuffer window can temporarily increase in size but
  22916. +never get smaller while it is active.  Any other value allows exact
  22917. +resizing.Vresize-minibuffer-frame
  22918. +*Allow changing the frame height of minibuffer frames.
  22919. +If non-`nil' and the active minibuffer is the sole window in its frame,
  22920. +allow changing the frame height.Vresize-minibuffer-frame-max-height
  22921. +*Maximum size the minibuffer frame is allowed to become.
  22922. +If less than 1 or not a number, there is no limit.Vresize-minibuffer-frame-exactly
  22923. +*Allow making minibuffer frame exactly the size to display all its contents.
  22924. +If `nil', the minibuffer frame can temporarily increase in size but
  22925. +never get smaller while it is active.  Any other value allows exact
  22926. +resizing.Fresize-minibuffer-mode
  22927. +Enable or disable resize-minibuffer mode.
  22928. +A negative prefix argument disables this mode.  A positive argument or
  22929. +argument of 0 enables it.
  22930. +
  22931. +When this minor mode is enabled, the minibuffer is dynamically resized to
  22932. +contain the entire region of text put in it as you type.
  22933. +
  22934. +The variable `resize-minibuffer-mode' is set to t or nil depending on
  22935. +whether this mode is active or not.
  22936. +
  22937. +The maximum height to which the minibuffer can grow is controlled by the
  22938. +variable `resize-minibuffer-window-max-height'.
  22939. +
  22940. +The variable `resize-minibuffer-window-exactly' determines whether the
  22941. +minibuffer window should ever be shrunk to make it no larger than needed to
  22942. +display its contents.
  22943. +
  22944. +When using a window system, it is possible for a minibuffer to be the sole
  22945. +window in a frame.  Since that window is already its maximum size, the only
  22946. +way to make more text visible at once is to increase the size of the frame.
  22947. +The variable `resize-minibuffer-frame' controls whether this should be
  22948. +done.  The variables `resize-minibuffer-frame-max-height' and
  22949. +`resize-minibuffer-frame-exactly' are analogous to their window
  22950. +counterparts.Fscheme-mode
  22951. +Major mode for editing Scheme code.
  22952. +Editing commands are similar to those of lisp-mode.
  22953. +
  22954. +In addition, if an inferior Scheme process is running, some additional
  22955. +commands will be defined, for evaluating expressions and controlling
  22956. +the interpreter, and the state of the process will be displayed in the
  22957. +modeline of all Scheme buffers.  The names of commands that interact
  22958. +with the Scheme process start with "xscheme-".  For more information
  22959. +see the documentation for xscheme-interaction-mode.
  22960. +
  22961. +Commands:
  22962. +Delete converts tabs to spaces as it moves back.
  22963. +Blank lines separate paragraphs.  Semicolons start comments.
  22964. +\{scheme-mode-map}
  22965. +Entry to this mode calls the value of scheme-mode-hook
  22966. +if that value is non-nil.Fscribe-mode
  22967. +Major mode for editing files of Scribe (a text formatter) source.
  22968. +Scribe-mode is similar text-mode, with a few extra commands added.
  22969. +\{scribe-mode-map}
  22970. +
  22971. +Interesting variables:
  22972. +
  22973. +scribe-fancy-paragraphs
  22974. +  Non-nil makes Scribe mode use a different style of paragraph separation.
  22975. +
  22976. +scribe-electric-quote
  22977. +  Non-nil makes insert of double quote use `` or '' depending on context.
  22978. +
  22979. +scribe-electric-parenthesis
  22980. +  Non-nil makes an open-parenthesis char (one of `([<{')
  22981. +  automatically insert its close if typed after an @Command form.Vmail-self-blind
  22982. +Non-nil means insert BCC to self in messages to be sent.
  22983. +This is done when the message is initialized,
  22984. +so you can remove or alter the BCC field to override the default.Vmail-interactive
  22985. +Non-nil means when sending a message wait for and display errors.
  22986. +nil means let mailer mail back a message to report errors.Vmail-yank-ignored-headers
  22987. +Delete these headers from old message when it's inserted in a reply.Vsend-mail-function
  22988. +Function to call to send the current buffer as mail.
  22989. +The headers are be delimited by a line which is `mail-header-separator'.Vmail-header-separator
  22990. +*Line used to separate headers from text in messages being composed.Vmail-archive-file-name
  22991. +*Name of file to write all outgoing messages in, or nil for none.
  22992. +Do not use an rmail file here!  Instead, use its inbox file.Vmail-default-reply-to
  22993. +*Address to insert as default Reply-to field of outgoing messages.Vmail-alias-file
  22994. +*If non-nil, the name of a file to use instead of `/usr/lib/aliases'.
  22995. +This file defines aliases to be expanded by the mailer; this is a different
  22996. +feature from that of defining aliases in `.mailrc' to be expanded in Emacs.
  22997. +This variable has no effect unless your system uses sendmail as its mailer.Vmail-signature
  22998. +*Text inserted at end of mail buffer when a message is initialized.
  22999. +If t, it means to insert the contents of the file `~/.signature'.Fmail-mode
  23000. +Major mode for editing mail to be sent.
  23001. +Like Text Mode but with these additional commands:
  23002. +C-c C-s  mail-send (send the message)    C-c C-c  mail-send-and-exit
  23003. +C-c C-f  move to a header field (and create it if there isn't):
  23004. +     C-c C-f C-t  move to To:    C-c C-f C-s  move to Subj:
  23005. +     C-c C-f C-b  move to BCC:    C-c C-f C-c  move to CC:
  23006. +     C-c C-f C-f  move to FCC:
  23007. +C-c C-t  move to message text.
  23008. +C-c C-y  mail-yank-original (insert current message, in Rmail).
  23009. +C-c C-q  mail-fill-yanked-message (fill what was yanked).
  23010. +C-c C-v  mail-sent-via (add a sent-via field for each To or CC).Fmail
  23011. +Edit a message to be sent.  Prefix arg means resume editing (don't erase).
  23012. +When this function returns, the buffer `*mail*' is selected.
  23013. +The value is t if the message was newly initialized; otherwise, nil.
  23014. +
  23015. +By default, the signature file `~/.signature' is inserted at the end;
  23016. +see the variable `mail-signature'.
  23017. +
  23018. +\<mail-mode-map>
  23019. +While editing message, type \[mail-send-and-exit] to send the message and exit.
  23020. +
  23021. +Various special commands starting with C-c are available in sendmail mode
  23022. +to move to message header fields:
  23023. +\{mail-mode-map}
  23024. +
  23025. +If `mail-self-blind' is non-nil, a BCC to yourself is inserted
  23026. +when the message is initialized.
  23027. +
  23028. +If `mail-default-reply-to' is non-nil, it should be an address (a string);
  23029. +a Reply-to: field with that address is inserted.
  23030. +
  23031. +If `mail-archive-file-name' is non-nil, an FCC field with that file name
  23032. +is inserted.
  23033. +
  23034. +If `mail-setup-hook' is bound, its value is called with no arguments
  23035. +after the message is initialized.  It can add more default fields.
  23036. +
  23037. +When calling from a program, the second through fifth arguments
  23038. + TO, SUBJECT, IN-REPLY-TO and CC specify if non-nil
  23039. + the initial contents of those header fields.
  23040. + These arguments should not have final newlines.
  23041. +The sixth argument REPLYBUFFER is a buffer whose contents
  23042. + should be yanked if the user types C-c C-y.
  23043. +The seventh argument ACTIONS is a list of actions to take
  23044. + if/when the message is sent.  Each action looks like (FUNCTION . ARGS);
  23045. + when the message is sent, we apply FUNCTION to ARGS.
  23046. + This is how Rmail arranges to mark messages `answered'.Fmail-other-window
  23047. +Like `mail' command, but display mail buffer in another window.Fmail-other-frame
  23048. +Like `mail' command, but display mail buffer in another frame.Fserver-start
  23049. +Allow this Emacs process to be a server for client processes.
  23050. +This starts a server communications subprocess through which
  23051. +client "editors" can send your editing commands to this Emacs job.
  23052. +To use the server, set up the program `etc/emacsclient' in the
  23053. +Emacs distribution as your standard "editor".
  23054. +
  23055. +Prefix arg means just kill any existing server communications subprocess.Fsgml-mode
  23056. +Major mode for editing SGML.
  23057. +Makes > display the matching <.  Makes / display matching /.
  23058. +Use \[sgml-validate] to validate your document with an SGML parser.Vshell-prompt-pattern
  23059. +Regexp to match prompts in the inferior shell.
  23060. +Defaults to "^[^#$%>\n]*[#$%>] *", which works pretty well.
  23061. +This variable is used to initialise `comint-prompt-regexp' in the 
  23062. +shell buffer.
  23063. +
  23064. +The pattern should probably not match more than one line.  If it does,
  23065. +shell-mode may become confused trying to distinguish prompt from input
  23066. +on lines which don't start with a prompt.
  23067. +
  23068. +This is a fine thing to set in your `.emacs' file.Fshell
  23069. +Run an inferior shell, with I/O through buffer *shell*.
  23070. +If buffer exists but shell process is not running, make new shell.
  23071. +If buffer exists and shell process is running, just switch to buffer `*shell*'.
  23072. +Program used comes from variable `explicit-shell-file-name',
  23073. + or (if that is nil) from the ESHELL environment variable,
  23074. + or else from SHELL if there is no ESHELL.
  23075. +If a file `~/.emacs_SHELLNAME' exists, it is given as initial input
  23076. + (Note that this may lose due to a timing error if the shell
  23077. +  discards input when it starts up.)
  23078. +The buffer is put in Shell mode, giving commands for sending input
  23079. +and controlling the subjobs of the shell.  See `shell-mode'.
  23080. +See also the variable `shell-prompt-pattern'.
  23081. +
  23082. +The shell file name (sans directories) is used to make a symbol name
  23083. +such as `explicit-csh-args'.  If that symbol is a variable,
  23084. +its value is used as a list of arguments when invoking the shell.
  23085. +Otherwise, one argument `-i' is passed to the shell.
  23086. +
  23087. +(Type \[describe-mode] in the shell buffer for a list of commands.)Fdefine-skeleton
  23088. +Define a user-configurable COMMAND that enters a statement skeleton.
  23089. +DOCUMENTATION is that of the command, while the variable of the same name,
  23090. +which contains the definition, has a documentation to that effect.
  23091. +PROMPT and ELEMENT ... are as defined under `skeleton-insert'.Fskeleton-insert
  23092. +Insert the complex statement skeleton DEFINITION describes very concisely.
  23093. +If optional NO-NEWLINE is nil the skeleton will end on a line of its own.
  23094. +
  23095. +DEFINITION is made up as (PROMPT ELEMENT ...).  PROMPT may be nil if not
  23096. +needed, a prompt-string or an expression for complex read functions.
  23097. +
  23098. +If ELEMENT is a string or a character it gets inserted (see also
  23099. +`skeleton-transformation').  Other possibilities are:
  23100. +
  23101. +    \n    go to next line and align cursor
  23102. +    >    indent according to major mode
  23103. +    <    undent tab-width spaces but not beyond beginning of line
  23104. +    _    cursor after termination
  23105. +    &    skip next ELEMENT if previous didn't move point
  23106. +    |    skip next ELEMENT if previous moved point
  23107. +    -num    delete num preceding characters
  23108. +    resume:    skipped, continue here if quit is signaled
  23109. +    nil    skipped
  23110. +
  23111. +ELEMENT may itself be DEFINITION with a PROMPT.  The user is prompted
  23112. +repeatedly for different inputs.  The DEFINITION is processed as often
  23113. +as the user enters a non-empty string.  \[keyboard-quit] terminates
  23114. +skeleton insertion, but continues after `resume:' and positions at `_'
  23115. +if any.  If PROMPT in such a sub-definition contains a ".. %s .." it
  23116. +is replaced by `skeleton-subprompt'.
  23117. +
  23118. +Other lisp-expressions are evaluated and the value treated as above.
  23119. +The following local variables are available:
  23120. +
  23121. +    str    first time: read a string prompting with PROMPT and insert it
  23122. +                if PROMPT is not a string it is evaluated instead
  23123. +        then: insert previously read string once more
  23124. +    quit    non-nil when resume: section is entered by keyboard quit
  23125. +    v1, v2    local variables for memorising anything you wantFpair-insert-maybe
  23126. +Insert the character you type ARG times.
  23127. +
  23128. +With no ARG, if `pair' is non-nil, and if
  23129. +`pair-on-word' is non-nil or we are not before or inside a
  23130. +word, and if `pair-filter' returns nil, pairing is performed.
  23131. +
  23132. +If a match is found in `pair-alist', that is inserted, else
  23133. +the defaults are used.  These are (), [], {}, <> and `' for the
  23134. +symmetrical ones, and the same character twice for the others.Fdefine-skeleton
  23135. +Define a user-configurable COMMAND that enters a statement skeleton.
  23136. +DOCUMENTATION is that of the command, while the variable of the same name,
  23137. +which contains the definition, has a documentation to that effect.
  23138. +PROMPT and ELEMENT ... are as defined under `skeleton-insert'.Fskeleton-insert
  23139. +Insert the complex statement skeleton DEFINITION describes very concisely.
  23140. +If optional NO-NEWLINE is nil the skeleton will end on a line of its own.
  23141. +
  23142. +DEFINITION is made up as (PROMPT ELEMENT ...).  PROMPT may be nil if not
  23143. +needed, a prompt-string or an expression for complex read functions.
  23144. +
  23145. +If ELEMENT is a string or a character it gets inserted (see also
  23146. +`skeleton-transformation').  Other possibilities are:
  23147. +
  23148. +    \n    go to next line and align cursor
  23149. +    >    indent according to major mode
  23150. +    <    undent tab-width spaces but not beyond beginning of line
  23151. +    _    cursor after termination
  23152. +    &    skip next ELEMENT if previous didn't move point
  23153. +    |    skip next ELEMENT if previous moved point
  23154. +    -num    delete num preceding characters
  23155. +    resume:    skipped, continue here if quit is signaled
  23156. +    nil    skipped
  23157. +
  23158. +ELEMENT may itself be DEFINITION with a PROMPT.  The user is prompted
  23159. +repeatedly for different inputs.  The DEFINITION is processed as often
  23160. +as the user enters a non-empty string.  \[keyboard-quit] terminates
  23161. +skeleton insertion, but continues after `resume:' and positions at `_'
  23162. +if any.  If PROMPT in such a sub-definition contains a ".. %s .." it
  23163. +is replaced by `skeleton-subprompt'.
  23164. +
  23165. +Other lisp-expressions are evaluated and the value treated as above.
  23166. +The following local variables are available:
  23167. +
  23168. +    str    first time: read a string prompting with PROMPT and insert it
  23169. +                if PROMPT is not a string it is evaluated instead
  23170. +        then: insert previously read string once more
  23171. +    quit    non-nil when resume: section is entered by keyboard quit
  23172. +    v1, v2    local variables for memorising anything you wantFpair-insert-maybe
  23173. +Insert the character you type ARG times.
  23174. +
  23175. +With no ARG, if `pair' is non-nil, and if
  23176. +`pair-on-word' is non-nil or we are not before or inside a
  23177. +word, and if `pair-filter' returns nil, pairing is performed.
  23178. +
  23179. +If a match is found in `pair-alist', that is inserted, else
  23180. +the defaults are used.  These are (), [], {}, <> and `' for the
  23181. +symmetrical ones, and the same character twice for the others.Vcalendar-time-display-form
  23182. +*The pseudo-pattern that governs the way a time of day is formatted.
  23183. +
  23184. +A pseudo-pattern is a list of expressions that can involve the keywords
  23185. +`12-hours', `24-hours', and `minutes',  all numbers in string form,
  23186. +and `am-pm' and `time-zone',  both alphabetic strings.
  23187. +
  23188. +For example, the form
  23189. +
  23190. +  '(24-hours ":" minutes
  23191. +    (if time-zone " (") time-zone (if time-zone ")"))
  23192. +
  23193. +would give military-style times like `21:07 (UTC)'.Vcalendar-latitude
  23194. +*Latitude of `calendar-location-name' in degrees, + north, - south.
  23195. +For example, 40.7 for New York City.
  23196. +It may not be a good idea to set this in advance for your site;
  23197. +if there may be users running Emacs at your site
  23198. +who are physically located elsewhere, they would get the wrong
  23199. +value and might not know how to override it.Vcalendar-longitude
  23200. +*Longitude of `calendar-location-name' in degrees, + east, - west.
  23201. +For example, -74.0 for New York City.
  23202. +It may not be a good idea to set this in advance for your site;
  23203. +if there may be users running Emacs at your site
  23204. +who are physically located elsewhere, they would get the wrong
  23205. +value and might not know how to override it.Vcalendar-location-name
  23206. +*Expression evaluating to name of `calendar-longitude', calendar-latitude'.
  23207. +Default value is just the latitude, longitude pair.Fsunrise-sunset
  23208. +Local time of sunrise and sunset for today.  Accurate to +/- 2 minutes.
  23209. +If called with an optional prefix argument, prompt for date.
  23210. +
  23211. +If called with an optional double prefix argument, prompt for longitude,
  23212. +latitude, time zone, and date, and always use standard time.
  23213. +
  23214. +This function is suitable for execution in a .emacs file.Fsolar-equinoxes-solstices
  23215. +Date and time of equinoxes and solstices, if visible in the calendar window.
  23216. +Requires floating point.Fsort-subr
  23217. +General text sorting routine to divide buffer into records and sort them.
  23218. +Arguments are REVERSE NEXTRECFUN ENDRECFUN &optional STARTKEYFUN ENDKEYFUN.
  23219. +
  23220. +We divide the accessible portion of the buffer into disjoint pieces
  23221. +called sort records.  A portion of each sort record (perhaps all of
  23222. +it) is designated as the sort key.  The records are rearranged in the
  23223. +buffer in order by their sort keys.  The records may or may not be
  23224. +contiguous.
  23225. +
  23226. +Usually the records are rearranged in order of ascending sort key.
  23227. +If REVERSE is non-nil, they are rearranged in order of descending sort key.
  23228. +
  23229. +The next four arguments are functions to be called to move point
  23230. +across a sort record.  They will be called many times from within sort-subr.
  23231. +
  23232. +NEXTRECFUN is called with point at the end of the previous record.
  23233. +It moves point to the start of the next record.
  23234. +It should move point to the end of the buffer if there are no more records.
  23235. +The first record is assumed to start at the position of point when sort-subr
  23236. +is called.
  23237. +
  23238. +ENDRECFUN is called with point within the record.
  23239. +It should move point to the end of the record.
  23240. +
  23241. +STARTKEYFUN moves from the start of the record to the start of the key.
  23242. +It may return either a non-nil value to be used as the key, or
  23243. +else the key is the substring between the values of point after
  23244. +STARTKEYFUN and ENDKEYFUN are called.  If STARTKEYFUN is nil, the key
  23245. +starts at the beginning of the record.
  23246. +
  23247. +ENDKEYFUN moves from the start of the sort key to the end of the sort key.
  23248. +ENDKEYFUN may be nil if STARTKEYFUN returns a value or if it would be the
  23249. +same as ENDRECFUN.Fsort-lines
  23250. +Sort lines in region alphabetically; argument means descending order.
  23251. +Called from a program, there are three arguments:
  23252. +REVERSE (non-nil means reverse order), BEG and END (region to sort).Fsort-paragraphs
  23253. +Sort paragraphs in region alphabetically; argument means descending order.
  23254. +Called from a program, there are three arguments:
  23255. +REVERSE (non-nil means reverse order), BEG and END (region to sort).Fsort-pages
  23256. +Sort pages in region alphabetically; argument means descending order.
  23257. +Called from a program, there are three arguments:
  23258. +REVERSE (non-nil means reverse order), BEG and END (region to sort).Fsort-numeric-fields
  23259. +Sort lines in region numerically by the ARGth field of each line.
  23260. +Fields are separated by whitespace and numbered from 1 up.
  23261. +Specified field must contain a number in each line of the region.
  23262. +With a negative arg, sorts by the ARGth field counted from the right.
  23263. +Called from a program, there are three arguments:
  23264. +FIELD, BEG and END.  BEG and END specify region to sort.Fsort-fields
  23265. +Sort lines in region lexicographically by the ARGth field of each line.
  23266. +Fields are separated by whitespace and numbered from 1 up.
  23267. +With a negative arg, sorts by the ARGth field counted from the right.
  23268. +Called from a program, there are three arguments:
  23269. +FIELD, BEG and END.  BEG and END specify region to sort.Fsort-regexp-fields
  23270. +Sort the region lexicographically as specified by RECORD-REGEXP and KEY.
  23271. +RECORD-REGEXP specifies the textual units which should be sorted.
  23272. +  For example, to sort lines RECORD-REGEXP would be "^.*$"
  23273. +KEY specifies the part of each record (ie each match for RECORD-REGEXP)
  23274. +  is to be used for sorting.
  23275. +  If it is "\digit" then the digit'th "\(...\)" match field from
  23276. +  RECORD-REGEXP is used.
  23277. +  If it is "\&" then the whole record is used.
  23278. +  Otherwise, it is a regular-expression for which to search within the record.
  23279. +If a match for KEY is not found within a record then that record is ignored.
  23280. +
  23281. +With a negative prefix arg sorts in reverse order.
  23282. +
  23283. +For example: to sort lines in the region by the first word on each line
  23284. + starting with the letter "f",
  23285. + RECORD-REGEXP would be "^.*$" and KEY would be "\=\<f\w*\>"Fsort-columns
  23286. +Sort lines in region alphabetically by a certain range of columns.
  23287. +For the purpose of this command, the region includes
  23288. +the entire line that point is in and the entire line the mark is in.
  23289. +The column positions of point and mark bound the range of columns to sort on.
  23290. +A prefix argument means sort into reverse order.
  23291. +
  23292. +Note that `sort-columns' rejects text that contains tabs,
  23293. +because tabs could be split across the specified columns
  23294. +and it doesn't know how to handle that.  Also, when possible,
  23295. +it uses the `sort' utility program, which doesn't understand tabs.
  23296. +Use \[untabify] to convert tabs to spaces before sorting.Freverse-region
  23297. +Reverse the order of lines in a region.
  23298. +From a program takes two point or marker arguments, BEG and END.Fspell-buffer
  23299. +Check spelling of every word in the buffer.
  23300. +For each incorrect word, you are asked for the correct spelling
  23301. +and then put into a query-replace to fix some or all occurrences.
  23302. +If you do not want to change a word, just give the same word
  23303. +as its "correct" spelling; then the query replace is skipped.Fspell-word
  23304. +Check spelling of word at or before point.
  23305. +If it is not correct, ask user for the correct spelling
  23306. +and `query-replace' the entire buffer to substitute it.Fspell-region
  23307. +Like `spell-buffer' but applies only to region.
  23308. +Used in a program, applies from START to END.
  23309. +DESCRIPTION is an optional string naming the unit being checked:
  23310. +for example, "word".Fspell-string
  23311. +Check spelling of string supplied as argument.Fspook
  23312. +Adds that special touch of class to your outgoing mail.Fsnarf-spooks
  23313. +Return a vector containing the lines from `spook-phrases-file'.Fsc-cite-original
  23314. +Workhorse citing function which performs the initial citation.
  23315. +This is callable from the various mail and news readers' reply
  23316. +function according to the agreed upon standard.  See `\[sc-describe]'
  23317. +for more details.  `sc-cite-original' does not do any yanking of the
  23318. +original message but it does require a few things:
  23319. +
  23320. +     1) The reply buffer is the current buffer.
  23321. +
  23322. +     2) The original message has been yanked and inserted into the
  23323. +        reply buffer.
  23324. +
  23325. +     3) Verbose mail headers from the original message have been
  23326. +        inserted into the reply buffer directly before the text of the
  23327. +        original message.
  23328. +
  23329. +     4) Point is at the beginning of the verbose headers.
  23330. +
  23331. +     5) Mark is at the end of the body of text to be cited.
  23332. +
  23333. +For Emacs 19's, the region need not be active (and typically isn't
  23334. +when this function is called.  Also, the hook `sc-pre-hook' is run
  23335. +before, and `sc-post-hook' is run after the guts of this function.Funtabify
  23336. +Convert all tabs in region to multiple spaces, preserving columns.
  23337. +Called non-interactively, the region is specified by arguments
  23338. +START and END, rather than by the position of point and mark.
  23339. +The variable `tab-width' controls the spacing of tab stops.Ftabify
  23340. +Convert multiple spaces in region to tabs when possible.
  23341. +A group of spaces is partially replaced by tabs
  23342. +when this can be done without changing the column they end at.
  23343. +Called non-interactively, the region is specified by arguments
  23344. +START and END, rather than by the position of point and mark.
  23345. +The variable `tab-width' controls the spacing of tab stops.Ftar-mode
  23346. +Major mode for viewing a tar file as a dired-like listing of its contents.
  23347. +You can move around using the usual cursor motion commands. 
  23348. +Letters no longer insert themselves.
  23349. +Type `e' to pull a file out of the tar file and into its own buffer;
  23350. +or click mouse-2 on the file's line in the Tar mode buffer.
  23351. +Type `c' to copy an entry from the tar file into another file on disk.
  23352. +
  23353. +If you edit a sub-file of this archive (as with the `e' command) and 
  23354. +save it with Control-x Control-s, the contents of that buffer will be 
  23355. +saved back into the tar-file buffer; in this way you can edit a file 
  23356. +inside of a tar archive without extracting it and re-archiving it.
  23357. +
  23358. +See also: variables `tar-update-datestamp' and `tar-anal-blocksize'.
  23359. +\{tar-mode-map}Ftcl-mode
  23360. +Major mode for editing tcl scripts.
  23361. +The following keys are bound:
  23362. +\{tcl-mode-map}
  23363. +Ftelnet
  23364. +Open a network login connection to host named HOST (a string).
  23365. +Communication with HOST is recorded in a buffer *HOST-telnet*.
  23366. +Normally input is edited in Emacs and sent a line at a time.Frsh
  23367. +Open a network login connection to host named HOST (a string).
  23368. +Communication with HOST is recorded in a buffer *HOST-rsh*.
  23369. +Normally input is edited in Emacs and sent a line at a time.Fterminal-emulator
  23370. +Under a display-terminal emulator in BUFFER, run PROGRAM on arguments ARGS.
  23371. +ARGS is a list of argument-strings.  Remaining arguments are WIDTH and HEIGHT.
  23372. +BUFFER's contents are made an image of the display generated by that program,
  23373. +and any input typed when BUFFER is the current Emacs buffer is sent to that
  23374. +program an keyboard input.
  23375. +
  23376. +Interactively, BUFFER defaults to "*terminal*" and PROGRAM and ARGS
  23377. +are parsed from an input-string using your usual shell.
  23378. +WIDTH and HEIGHT are determined from the size of the current window
  23379. +-- WIDTH will be one less than the window's width, HEIGHT will be its height.
  23380. +
  23381. +To switch buffers and leave the emulator, or to give commands
  23382. +to the emulator itself (as opposed to the program running under it),
  23383. +type Control-^.  The following character is an emulator command.
  23384. +Type Control-^ twice to send it to the subprogram.
  23385. +This escape character may be changed using the variable `terminal-escape-char'.
  23386. +
  23387. +`Meta' characters may not currently be sent through the terminal emulator.
  23388. +
  23389. +Here is a list of some of the variables which control the behaviour
  23390. +of the emulator -- see their documentation for more information:
  23391. +terminal-escape-char, terminal-scrolling, terminal-more-processing,
  23392. +terminal-redisplay-interval.
  23393. +
  23394. +This function calls the value of terminal-mode-hook if that exists
  23395. +and is non-nil after the terminal buffer has been set up and the
  23396. +subprocess started.
  23397. +
  23398. +Presently with `termcap' only; if somebody sends us code to make this
  23399. +work with `terminfo' we will try to use it.Vtex-shell-file-name
  23400. +*If non-nil, the shell file name to run in the subshell used to run TeX.Vtex-directory
  23401. +*Directory in which temporary files are left.
  23402. +You can make this `/tmp' if your TEXINPUTS has no relative directories in it
  23403. +and you don't try to apply \[tex-region] or \[tex-buffer] when there are
  23404. +`\input' commands with relative directories.Vtex-offer-save
  23405. +*If non-nil, ask about saving modified buffers before \[tex-file] is run.Vtex-run-command
  23406. +*Command used to run TeX subjob.
  23407. +If this string contains an asterisk (`*'), that is replaced by the file name;
  23408. +otherwise, the file name, preceded by blank, is added at the end.Vlatex-run-command
  23409. +*Command used to run LaTeX subjob.
  23410. +If this string contains an asterisk (`*'), that is replaced by the file name;
  23411. +otherwise, the file name, preceded by blank, is added at the end.Vlatex-block-names
  23412. +*User defined LaTeX block names.
  23413. +Combined with `standard-latex-block-names' for minibuffer completion.Vslitex-run-command
  23414. +*Command used to run SliTeX subjob.
  23415. +If this string contains an asterisk (`*'), that is replaced by the file name;
  23416. +otherwise, the file name, preceded by blank, is added at the end.Vtex-bibtex-command
  23417. +*Command used by `tex-bibtex-file' to gather bibliographic data.
  23418. +If this string contains an asterisk (`*'), that is replaced by the file name;
  23419. +otherwise, the file name, preceded by blank, is added at the end.Vtex-dvi-print-command
  23420. +*Command used by \[tex-print] to print a .dvi file.
  23421. +If this string contains an asterisk (`*'), that is replaced by the file name;
  23422. +otherwise, the file name, preceded by blank, is added at the end.Vtex-alt-dvi-print-command
  23423. +*Command used by \[tex-print] with a prefix arg to print a .dvi file.
  23424. +If this string contains an asterisk (`*'), that is replaced by the file name;
  23425. +otherwise, the file name, preceded by blank, is added at the end.
  23426. +
  23427. +If two printers are not enough of a choice, you can set the variable
  23428. +`tex-alt-dvi-print-command' to an expression that asks what you want;
  23429. +for example,
  23430. +
  23431. +    (setq tex-alt-dvi-print-command
  23432. +         '(format "lpr -P%s" (read-string "Use printer: ")))
  23433. +
  23434. +would tell \[tex-print] with a prefix argument to ask you which printer to
  23435. +use.Vtex-dvi-view-command
  23436. +*Command used by \[tex-view] to display a `.dvi' file.
  23437. +If this string contains an asterisk (`*'), that is replaced by the file name;
  23438. +otherwise, the file name, preceded by blank, is added at the end.
  23439. +
  23440. +This can be set conditionally so that the previewer used is suitable for the
  23441. +window system being used.  For example,
  23442. +
  23443. +    (setq tex-dvi-view-command
  23444. +          (if (eq window-system 'x) "xdvi" "dvi2tty * | cat -s"))
  23445. +
  23446. +would tell \[tex-view] to use xdvi under X windows and to use dvi2tty
  23447. +otherwise.Vtex-show-queue-command
  23448. +*Command used by \[tex-show-print-queue] to show the print queue.
  23449. +Should show the queue(s) that \[tex-print] puts jobs on.Vtex-default-mode
  23450. +*Mode to enter for a new file that might be either TeX or LaTeX.
  23451. +This variable is used when it can't be determined whether the file
  23452. +is plain TeX or LaTeX or what because the file contains no commands.
  23453. +Normally set to either `plain-tex-mode' or `latex-mode'.Vtex-open-quote
  23454. +*String inserted by typing \[tex-insert-quote] to open a quotation.Vtex-close-quote
  23455. +*String inserted by typing \[tex-insert-quote] to close a quotation.Ftex-mode
  23456. +Major mode for editing files of input for TeX, LaTeX, or SliTeX.
  23457. +Tries to determine (by looking at the beginning of the file) whether
  23458. +this file is for plain TeX, LaTeX, or SliTeX and calls `plain-tex-mode',
  23459. +`latex-mode', or `slitex-mode', respectively.  If it cannot be determined,
  23460. +such as if there are no commands in the file, the value of `tex-default-mode'
  23461. +says which mode to use.Fplain-tex-mode
  23462. +Major mode for editing files of input for plain TeX.
  23463. +Makes $ and } display the characters they match.
  23464. +Makes " insert `` when it seems to be the beginning of a quotation,
  23465. +and '' when it appears to be the end; it inserts " only after a \.
  23466. +
  23467. +Use \[tex-region] to run TeX on the current region, plus a "header"
  23468. +copied from the top of the file (containing macro definitions, etc.),
  23469. +running TeX under a special subshell.  \[tex-buffer] does the whole buffer.
  23470. +\[tex-file] saves the buffer and then processes the file.
  23471. +\[tex-print] prints the .dvi file made by any of these.
  23472. +\[tex-view] previews the .dvi file made by any of these.
  23473. +\[tex-bibtex-file] runs bibtex on the file of the current buffer.
  23474. +
  23475. +Use \[validate-tex-buffer] to check buffer for paragraphs containing
  23476. +mismatched $'s or braces.
  23477. +
  23478. +Special commands:
  23479. +\{tex-mode-map}
  23480. +
  23481. +Mode variables:
  23482. +tex-run-command
  23483. +    Command string used by \[tex-region] or \[tex-buffer].
  23484. +tex-directory
  23485. +    Directory in which to create temporary files for TeX jobs
  23486. +    run by \[tex-region] or \[tex-buffer].
  23487. +tex-dvi-print-command
  23488. +    Command string used by \[tex-print] to print a .dvi file.
  23489. +tex-alt-dvi-print-command
  23490. +    Alternative command string used by \[tex-print] (when given a prefix
  23491. +    argument) to print a .dvi file.
  23492. +tex-dvi-view-command
  23493. +    Command string used by \[tex-view] to preview a .dvi file.
  23494. +tex-show-queue-command
  23495. +    Command string used by \[tex-show-print-queue] to show the print
  23496. +    queue that \[tex-print] put your job on.
  23497. +
  23498. +Entering Plain-tex mode runs the hook `text-mode-hook', then the hook
  23499. +`tex-mode-hook', and finally the hook `plain-tex-mode-hook'.  When the
  23500. +special subshell is initiated, the hook `tex-shell-hook' is run.Flatex-mode
  23501. +Major mode for editing files of input for LaTeX.
  23502. +Makes $ and } display the characters they match.
  23503. +Makes " insert `` when it seems to be the beginning of a quotation,
  23504. +and '' when it appears to be the end; it inserts " only after a \.
  23505. +
  23506. +Use \[tex-region] to run LaTeX on the current region, plus the preamble
  23507. +copied from the top of the file (containing \documentstyle, etc.),
  23508. +running LaTeX under a special subshell.  \[tex-buffer] does the whole buffer.
  23509. +\[tex-file] saves the buffer and then processes the file.
  23510. +\[tex-print] prints the .dvi file made by any of these.
  23511. +\[tex-view] previews the .dvi file made by any of these.
  23512. +\[tex-bibtex-file] runs bibtex on the file of the current buffer.
  23513. +
  23514. +Use \[validate-tex-buffer] to check buffer for paragraphs containing
  23515. +mismatched $'s or braces.
  23516. +
  23517. +Special commands:
  23518. +\{tex-mode-map}
  23519. +
  23520. +Mode variables:
  23521. +latex-run-command
  23522. +    Command string used by \[tex-region] or \[tex-buffer].
  23523. +tex-directory
  23524. +    Directory in which to create temporary files for LaTeX jobs
  23525. +    run by \[tex-region] or \[tex-buffer].
  23526. +tex-dvi-print-command
  23527. +    Command string used by \[tex-print] to print a .dvi file.
  23528. +tex-alt-dvi-print-command
  23529. +    Alternative command string used by \[tex-print] (when given a prefix
  23530. +    argument) to print a .dvi file.
  23531. +tex-dvi-view-command
  23532. +    Command string used by \[tex-view] to preview a .dvi file.
  23533. +tex-show-queue-command
  23534. +    Command string used by \[tex-show-print-queue] to show the print
  23535. +    queue that \[tex-print] put your job on.
  23536. +
  23537. +Entering Latex mode runs the hook `text-mode-hook', then 
  23538. +`tex-mode-hook', and finally `latex-mode-hook'.  When the special
  23539. +subshell is initiated, `tex-shell-hook' is run.Fslitex-mode
  23540. +Major mode for editing files of input for SliTeX.
  23541. +Makes $ and } display the characters they match.
  23542. +Makes " insert `` when it seems to be the beginning of a quotation,
  23543. +and '' when it appears to be the end; it inserts " only after a \.
  23544. +
  23545. +Use \[tex-region] to run SliTeX on the current region, plus the preamble
  23546. +copied from the top of the file (containing \documentstyle, etc.),
  23547. +running SliTeX under a special subshell.  \[tex-buffer] does the whole buffer.
  23548. +\[tex-file] saves the buffer and then processes the file.
  23549. +\[tex-print] prints the .dvi file made by any of these.
  23550. +\[tex-view] previews the .dvi file made by any of these.
  23551. +\[tex-bibtex-file] runs bibtex on the file of the current buffer.
  23552. +
  23553. +Use \[validate-tex-buffer] to check buffer for paragraphs containing
  23554. +mismatched $'s or braces.
  23555. +
  23556. +Special commands:
  23557. +\{tex-mode-map}
  23558. +
  23559. +Mode variables:
  23560. +slitex-run-command
  23561. +    Command string used by \[tex-region] or \[tex-buffer].
  23562. +tex-directory
  23563. +    Directory in which to create temporary files for SliTeX jobs
  23564. +    run by \[tex-region] or \[tex-buffer].
  23565. +tex-dvi-print-command
  23566. +    Command string used by \[tex-print] to print a .dvi file.
  23567. +tex-alt-dvi-print-command
  23568. +    Alternative command string used by \[tex-print] (when given a prefix
  23569. +    argument) to print a .dvi file.
  23570. +tex-dvi-view-command
  23571. +    Command string used by \[tex-view] to preview a .dvi file.
  23572. +tex-show-queue-command
  23573. +    Command string used by \[tex-show-print-queue] to show the print
  23574. +    queue that \[tex-print] put your job on.
  23575. +
  23576. +Entering SliTeX mode runs the hook `text-mode-hook', then the hook
  23577. +`tex-mode-hook', then the hook `latex-mode-hook', and finally the hook
  23578. +`slitex-mode-hook'.  When the special subshell is initiated, the hook
  23579. +`tex-shell-hook' is run.Ftexinfo-format-buffer
  23580. +Process the current buffer as texinfo code, into an Info file.
  23581. +The Info file output is generated in a buffer visiting the Info file
  23582. +names specified in the @setfilename command.
  23583. +
  23584. +Non-nil argument (prefix, if interactive) means don't make tag table
  23585. +and don't split the file if large.  You can use Info-tagify and
  23586. +Info-split to do these manually.Ftexinfo-format-region
  23587. +Convert the current region of the Texinfo file to Info format.
  23588. +This lets you see what that part of the file will look like in Info.
  23589. +The command is bound to \[texinfo-format-region].  The text that is
  23590. +converted to Info is stored in a temporary buffer.Ftexinfo-mode
  23591. +Major mode for editing Texinfo files.
  23592. +
  23593. +  It has these extra commands:
  23594. +\{texinfo-mode-map}
  23595. +
  23596. +  These are files that are used as input for TeX to make printed manuals
  23597. +and also to be turned into Info files with \[makeinfo-buffer] or
  23598. +the `makeinfo' program.  These files must be written in a very restricted and
  23599. +modified version of TeX input format.
  23600. +
  23601. +  Editing commands are like text-mode except that the syntax table is
  23602. +set up so expression commands skip Texinfo bracket groups.  To see
  23603. +what the Info version of a region of the Texinfo file will look like,
  23604. +use \[makeinfo-region], which runs `makeinfo' on the current region.
  23605. +
  23606. +  You can show the structure of a Texinfo file with \[texinfo-show-structure].
  23607. +This command shows the structure of a Texinfo file by listing the
  23608. +lines with the @-sign commands for @chapter, @section, and the like.
  23609. +These lines are displayed in another window called the *Occur* window.
  23610. +In that window, you can position the cursor over one of the lines and
  23611. +use \[occur-mode-goto-occurrence], to jump to the corresponding spot
  23612. +in the Texinfo file.
  23613. +
  23614. +  In addition, Texinfo mode provides commands that insert various
  23615. +frequently used @-sign commands into the buffer.  You can use these
  23616. +commands to save keystrokes.  And you can insert balanced braces with
  23617. +\[texinfo-insert-braces] and later use the command \[up-list] to
  23618. +move forward past the closing brace.
  23619. +
  23620. +Also, Texinfo mode provides functions for automatically creating or
  23621. +updating menus and node pointers.  These functions
  23622. +
  23623. +  * insert the `Next', `Previous' and `Up' pointers of a node,
  23624. +  * insert or update the menu for a section, and
  23625. +  * create a master menu for a Texinfo source file.
  23626. +
  23627. +Here are the functions:
  23628. +
  23629. +    texinfo-update-node                \[texinfo-update-node]
  23630. +    texinfo-every-node-update          \[texinfo-every-node-update]
  23631. +    texinfo-sequential-node-update 
  23632. +
  23633. +    texinfo-make-menu                  \[texinfo-make-menu]
  23634. +    texinfo-all-menus-update           \[texinfo-all-menus-update]
  23635. +    texinfo-master-menu
  23636. +
  23637. +    texinfo-indent-menu-description (column &optional region-p)
  23638. +
  23639. +The `texinfo-column-for-description' variable specifies the column to
  23640. +which menu descriptions are indented. 
  23641. +
  23642. +Passed an argument (a prefix argument, if interactive), the
  23643. +`texinfo-update-node' and `texinfo-make-menu' functions do their jobs
  23644. +in the region.
  23645. +
  23646. +To use the updating commands, you must structure your Texinfo file
  23647. +hierarchically, such that each `@node' line, with the exception of the
  23648. +Top node, is accompanied by some kind of section line, such as an
  23649. +`@chapter' or `@section' line.
  23650. +
  23651. +If the file has a `top' node, it must be called `top' or `Top' and
  23652. +be the first node in the file.
  23653. +
  23654. +Entering Texinfo mode calls the value of text-mode-hook, and then the
  23655. +value of texinfo-mode-hook.Ftexinfo-update-node
  23656. +Without any prefix argument, update the node in which point is located.
  23657. +Non-nil argument (prefix, if interactive) means update the nodes in the
  23658. +marked region.
  23659. +
  23660. +The functions for creating or updating nodes and menus, and their
  23661. +keybindings, are:
  23662. +
  23663. +    texinfo-update-node (&optional region-p)    \[texinfo-update-node]
  23664. +    texinfo-every-node-update ()                \[texinfo-every-node-update]
  23665. +    texinfo-sequential-node-update (&optional region-p)
  23666. +
  23667. +    texinfo-make-menu (&optional region-p)      \[texinfo-make-menu]
  23668. +    texinfo-all-menus-update ()                 \[texinfo-all-menus-update]
  23669. +    texinfo-master-menu ()
  23670. +
  23671. +    texinfo-indent-menu-description (column &optional region-p)
  23672. +
  23673. +The `texinfo-column-for-description' variable specifies the column to
  23674. +which menu descriptions are indented. Its default value is 32.Ftexinfo-every-node-update
  23675. +Update every node in a Texinfo file.Ftexinfo-sequential-node-update
  23676. +Update one node (or many) in a Texinfo file with sequential pointers.
  23677. +
  23678. +This function causes the `Next' or `Previous' pointer to point to the
  23679. +immediately preceding or following node, even if it is at a higher or
  23680. +lower hierarchical level in the document.  Continually pressing `n' or
  23681. +`p' takes you straight through the file.
  23682. +
  23683. +Without any prefix argument, update the node in which point is located.
  23684. +Non-nil argument (prefix, if interactive) means update the nodes in the
  23685. +marked region.
  23686. +
  23687. +This command makes it awkward to navigate among sections and
  23688. +subsections; it should be used only for those documents that are meant
  23689. +to be read like a novel rather than a reference, and for which the
  23690. +Info `g*' command is inadequate.Fforward-thing
  23691. +Move forward to the end of the next THING.Fbounds-of-thing-at-point
  23692. +Determine the start and end buffer locations for the THING at point,
  23693. +where THING is an entity for which there is a either a corresponding
  23694. +forward-THING operation, or corresponding beginning-of-THING and
  23695. +end-of-THING operations, eg. 'word, 'sentence, 'defun.
  23696. +  Return a cons cell '(start . end) giving the start and end positions.Fthing-at-point
  23697. +Return the THING at point, where THING is an entity defined by
  23698. +bounds-of-thing-at-point.Vdisplay-time-day-and-date
  23699. +*Non-nil means \[display-time] should display day and date as well as time.Fdisplay-time
  23700. +Display current time, load level, and mail flag in mode line of each buffer.
  23701. +Updates automatically every minute.
  23702. +If `display-time-day-and-date' is non-nil, the current day and date
  23703. +are displayed as well.
  23704. +After each update, `display-time-hook' is run with `run-hooks'.Ftime-stamp
  23705. +Update the time stamp string in the buffer.
  23706. +If you put a time stamp template anywhere in the first 8 lines of a file,
  23707. +it can be updated every time you save the file.  See the top of
  23708. +`time-stamp.el' for a sample.  The template looks like one of the following:
  23709. +    Time-stamp: <>
  23710. +    Time-stamp: " "
  23711. +The time stamp is written between the brackets or quotes, resulting in
  23712. +    Time-stamp: <93/06/18 10:26:51 gildea>
  23713. +Only does its thing if the variable  time-stamp-active  is non-nil.
  23714. +Typically used on  write-file-hooks  for automatic time-stamping.
  23715. +The format of the time stamp is determined by the variable  time-stamp-format.
  23716. +The variables time-stamp-line-limit, time-stamp-start, and time-stamp-end
  23717. +control finding the template.Frun-at-time
  23718. +Run a function at a time, and optionally on a regular interval.
  23719. +Arguments are TIME, REPEAT, FUNCTION &rest ARGS.
  23720. +TIME, a string, can be specified absolutely or relative to now.
  23721. +TIME can also be an integer, a number of seconds.
  23722. +REPEAT, an integer number of seconds, is the interval on which to repeat
  23723. +the call to the function.  If REPEAT is nil, call it just once.
  23724. +
  23725. +Absolute times may be specified in a wide variety of formats;
  23726. +Something of the form `HOUR:MIN:SEC TIMEZONE MONTH/DAY/YEAR', where
  23727. +all fields are numbers, works; the format used by the Unix `date'
  23728. +command works too.
  23729. +
  23730. +Relative times may be specified as a series of numbers followed by units:
  23731. +  1 min             denotes one minute from now.
  23732. +  min            does too.
  23733. +  1 min 5 sec        denotes 65 seconds from now.
  23734. +  1 min 2 sec 3 hour 4 day 5 week 6 fortnight 7 month 8 year
  23735. +            denotes the sum of all the given durations from now.Ftpu-edt-on
  23736. +Turn on TPU/edt emulation.Ftpu-set-scroll-margins
  23737. +Set scroll margins.Ftpu-set-cursor-free
  23738. +Allow the cursor to move freely about the screen.Ftpu-set-cursor-bound
  23739. +Constrain the cursor to the flow of the text.Ftq-create
  23740. +Create and return a transaction queue communicating with PROCESS.
  23741. +PROCESS should be a subprocess capable of sending and receiving
  23742. +streams of bytes.  It may be a local process, or it may be connected
  23743. +to a tcp server on another machine.Vtrace-buffer
  23744. +*Trace output will by default go to that buffer.Ftrace-function
  23745. +Traces FUNCTION with trace output going to BUFFER.
  23746. +For every call of FUNCTION Lisp-style trace messages that display argument
  23747. +and return values will be inserted into BUFFER. This function generates the
  23748. +trace advice for FUNCTION and activates it together with any other advice
  23749. +there might be!! The trace BUFFER will popup whenever FUNCTION is called.
  23750. +Do not use this to trace functions that switch buffers or do any other
  23751. +display oriented stuff, use `trace-function-background' instead.Ftrace-function-background
  23752. +Traces FUNCTION with trace output going quietly to BUFFER.
  23753. +For every call of FUNCTION Lisp-style trace messages that display argument
  23754. +and return values will be inserted into BUFFER. This function generates the
  23755. +trace advice for FUNCTION and activates it together with any other advice
  23756. +there might be!! Trace output will quietly go to BUFFER without changing
  23757. +the window or buffer configuration at all.Vtc-mode-map
  23758. +Keymap for commands for two-column mode.Ftc-two-columns
  23759. +Split current window vertically for two-column editing.
  23760. +
  23761. +When called the first time, associates a buffer with the current
  23762. +buffer.  Both buffers are put in two-column minor mode and
  23763. +tc-mode-hook gets called on both.  These buffers remember
  23764. +about one another, even when renamed.
  23765. +
  23766. +When called again, restores the screen layout with the current buffer
  23767. +first and the associated buffer to it's right.
  23768. +
  23769. +If you include long lines, i.e which will span both columns (eg.
  23770. +source code), they should be in what will be the first column, with
  23771. +the associated buffer having empty lines next to them.
  23772. +
  23773. +You have the following commands at your disposal:
  23774. +
  23775. +\[tc-two-columns]   Rearrange screen
  23776. +\[tc-associate-buffer]   Reassociate buffer after changing major mode
  23777. +\[tc-scroll-up]   Scroll both buffers up by a screenfull
  23778. +\[tc-scroll-down]   Scroll both buffers down by a screenful
  23779. +\[tc-scroll-line]   Scroll both buffers up by one or more lines
  23780. +\[tc-recenter]   Recenter and realign other buffer
  23781. +\[shrink-window-horizontally], \[enlarge-window-horizontally]   Shrink, enlarge current column
  23782. +\[tc-associated-buffer]   Switch to associated buffer
  23783. +\[tc-merge]   Merge both buffers
  23784. +
  23785. +These keybindings can be customized in your ~/.emacs by `tc-prefix'
  23786. +and `tc-mode-map'.
  23787. +
  23788. +The appearance of the screen can be customized by the variables
  23789. +`tc-window-width', `tc-beyond-fill-column',
  23790. +`tc-mode-line-format' and `truncate-partial-width-windows'.Ftc-associate-buffer
  23791. +Associate another buffer with this one in two-column minor mode.
  23792. +Can also be used to associate a just previously visited file, by
  23793. +accepting the proposed default buffer.
  23794. +
  23795. +See  \[tc-two-columns]  and  `two-column.el'  for further details.Ftc-split
  23796. +Unmerge a two-column text into two buffers in two-column minor mode.
  23797. +The text is unmerged at the cursor's column which becomes the local
  23798. +value of `tc-window-width'.  Only lines that have the ARG same
  23799. +preceding characters at that column get split.  The ARG preceding
  23800. +characters without any leading whitespace become the local value for
  23801. +`tc-separator'.  This way lines that continue across both
  23802. +columns remain untouched in the first buffer.
  23803. +
  23804. +This function can be used with a prototype line, to set up things as
  23805. +you like them.  You write the first line of each column with the
  23806. +separator you like and then unmerge that line.  E.g.:
  23807. +
  23808. +First column's text    sSs  Second columns text
  23809. +               \___/\
  23810. +            /    \
  23811. +   5 character Separator      You type  M-5 \[tc-split]  with the point here
  23812. +
  23813. +See  \[tc-two-columns]  and  `two-column.el'  for further details.Ftc-dissociate
  23814. +Turn off two-column minor mode in current and associated buffer.
  23815. +If the associated buffer is unmodified and empty, it is killed.Ftc-merge
  23816. +Merges the associated buffer with the current buffer.
  23817. +They get merged at the column, which is the value of
  23818. +`tc-window-width', i.e. usually at the vertical window
  23819. +separator.  This separator gets replaced with white space.  Beyond
  23820. +that the value of gets inserted on merged lines.  The two columns are
  23821. +thus pasted side by side, in a single text.  If the other buffer is
  23822. +not displayed to the left of this one, then this one becomes the left
  23823. +column.
  23824. +
  23825. +If you want `tc-separator' on empty lines in the second column,
  23826. +you should put just one space in them.  In the final result, you can strip
  23827. +off trailing spaces with \[beginning-of-buffer] \[replace-regexp] [ SPC TAB ] + $ RET RETFtc-associated-buffer
  23828. +Switch to associated buffer.Ftc-scroll-line
  23829. +Scroll current window upward by ARG lines.
  23830. +The associated window gets scrolled to the same line.Ftc-scroll-up
  23831. +Scroll current window upward by ARG screens.
  23832. +The associated window gets scrolled to the same line.Ftc-scroll-down
  23833. +Scroll current window downward by ARG screens.
  23834. +The associated window gets scrolled to the same line.Ftc-recenter
  23835. +Center point in window.  With ARG, put point on line ARG.
  23836. +This counts from bottom if ARG is negative.  The associated window
  23837. +gets scrolled to the same line.Funderline-region
  23838. +Underline all nonblank characters in the region.
  23839. +Works by overstriking underscores.
  23840. +Called from program, takes two arguments START and END
  23841. +which specify the range to operate on.Fununderline-region
  23842. +Remove all underlining (overstruck underscores) in the region.
  23843. +Called from program, takes two arguments START and END
  23844. +which specify the range to operate on.Fbatch-unrmail
  23845. +Convert Rmail files to system inbox format.
  23846. +Specify the input Rmail file names as command line arguments.
  23847. +For each Rmail file, the corresponding output file name
  23848. +is made by adding `.mail' at the end.
  23849. +For example, invoke `emacs -batch -f batch-unrmail RMAIL'.Funrmail
  23850. +Convert Rmail file FILE to system inbox format file TO-FILE.Vreplace-copying-with
  23851. +*If non-nil, replace copying notices with this file.Fupdate-copyright
  23852. +Update the copyright notice at the beginning of the buffer
  23853. +to indicate the current year.  If optional arg REPLACE is given
  23854. +(interactively, with prefix arg) replace the years in the notice
  23855. +rather than adding the current year after them.
  23856. +If `replace-copying-with' is set, the copying permissions following the
  23857. +copyright are replaced as well.
  23858. +
  23859. +If optional third argument ASK is non-nil, the user is prompted for whether
  23860. +or not to update the copyright.  If optional fourth argument ASK-YEAR is
  23861. +non-nil, the user is prompted for whether or not to replace the year rather
  23862. +than adding to it.Fask-to-update-copyright
  23863. +If the current buffer contains a copyright notice that is out of date,
  23864. +ask the user if it should be updated with `update-copyright' (which see).
  23865. +Put this on write-file-hooks.Fask-user-about-lock
  23866. +Ask user what to do when he wants to edit FILE but it is locked by USER.
  23867. +This function has a choice of three things to do:
  23868. +  do (signal 'buffer-file-locked (list FILE USER))
  23869. +    to refrain from editing the file
  23870. +  return t (grab the lock on the file)
  23871. +  return nil (edit the file even though it is locked).
  23872. +You can rewrite it to use any criterion you like to choose which one to do.Fask-user-about-supersession-threat
  23873. +Ask a user who is about to modify an obsolete buffer what to do.
  23874. +This function has two choices: it can return, in which case the modification
  23875. +of the buffer will proceed, or it can (signal 'file-supersession (file)),
  23876. +in which case the proposed buffer modification will not be made.
  23877. +
  23878. +You can rewrite this to use any criterion you like to choose which one to do.
  23879. +The buffer in question is current when this function is called.Vvc-checkin-hook
  23880. +*List of functions called after a checkin is done.  See `run-hooks'.Fvc-next-action
  23881. +Do the next logical checkin or checkout operation on the current file.
  23882. +   If the file is not already registered, this registers it for version
  23883. +control and then retrieves a writable, locked copy for editing.
  23884. +   If the file is registered and not locked by anyone, this checks out
  23885. +a writable and locked file ready for editing.
  23886. +   If the file is checked out and locked by the calling user, this
  23887. +first checks to see if the file has changed since checkout.  If not,
  23888. +it performs a revert.
  23889. +   If the file has been changed, this pops up a buffer for entry
  23890. +of a log message; when the message has been entered, it checks in the
  23891. +resulting changes along with the log message as change commentary.  If
  23892. +the variable `vc-keep-workfiles' is non-nil (which is its default), a
  23893. +read-only copy of the changed file is left in place afterwards.
  23894. +   If the file is registered and locked by someone else, you are given
  23895. +the option to steal the lock.
  23896. +   If you call this from within a VC dired buffer with no files marked,
  23897. +it will operate on the file in the current line.
  23898. +   If you call this from within a VC dired buffer, and one or more
  23899. +files are marked, it will accept a log message and then operate on
  23900. +each one.  The log message will be used as a comment for any register
  23901. +or checkin operations, but ignored when doing checkouts.  Attempted
  23902. +lock steals will raise an error.
  23903. +
  23904. +   For checkin, a prefix argument lets you specify the version number to use.Fvc-register
  23905. +Register the current file into your version-control system.Fvc-diff
  23906. +Display diffs between file versions.
  23907. +Normally this compares the current file and buffer with the most recent 
  23908. +checked in version of that file.  This uses no arguments.
  23909. +With a prefix argument, it reads the file name to use
  23910. +and two version designators specifying which versions to compare.Fvc-version-other-window
  23911. +Visit version REV of the current buffer in another window.
  23912. +If the current buffer is named `F', the version is named `F.~REV~'.
  23913. +If `F.~REV~' already exists, it is used instead of being re-created.Fvc-insert-headers
  23914. +Insert headers in a file for use with your version-control system.
  23915. +Headers desired are inserted at the start of the buffer, and are pulled from
  23916. +the variable `vc-header-alist'.Fvc-directory
  23917. +Show version-control status of all files under the current directory.Fvc-create-snapshot
  23918. +Make a snapshot called NAME.
  23919. +The snapshot is made from all registered files at or below the current
  23920. +directory.  For each file, the version level of its latest
  23921. +version becomes part of the named configuration.Fvc-retrieve-snapshot
  23922. +Retrieve the snapshot called NAME.
  23923. +This function fails if any files are locked at or below the current directory
  23924. +Otherwise, all registered files are checked out (unlocked) at their version
  23925. +levels in the snapshot.Fvc-print-log
  23926. +List the change log of the current buffer in a window.Fvc-revert-buffer
  23927. +Revert the current buffer's file back to the latest checked-in version.
  23928. +This asks for confirmation if the buffer contents are not identical
  23929. +to that version.Fvc-cancel-version
  23930. +Get rid of most recently checked in version of this file.
  23931. +A prefix argument means do not revert the buffer afterwards.Fvc-update-change-log
  23932. +Find change log file and add entries from recent RCS logs.
  23933. +The mark is left at the end of the text prepended to the change log.
  23934. +With prefix arg of C-u, only find log entries for the current buffer's file.
  23935. +With any numeric prefix arg, find log entries for all files currently visited.
  23936. +Otherwise, find log entries for all registered files in the default directory.
  23937. +From a program, any arguments are passed to the `rcs2log' script.Fvi-mode
  23938. +Major mode that acts like the `vi' editor.
  23939. +The purpose of this mode is to provide you the combined power of vi (namely,
  23940. +the "cross product" effect of commands and repeat last changes) and Emacs.
  23941. +
  23942. +This command redefines nearly all keys to look like vi commands.
  23943. +It records the previous major mode, and any vi command for input
  23944. +(`i', `a', `s', etc.) switches back to that mode.
  23945. +Thus, ordinary Emacs (in whatever major mode you had been using)
  23946. +is "input" mode as far as vi is concerned.
  23947. +
  23948. +To get back into vi from "input" mode, you must issue this command again.
  23949. +Therefore, it is recommended that you assign it to a key.
  23950. +
  23951. +Major differences between this mode and real vi :
  23952. +
  23953. +* Limitations and unsupported features
  23954. +  - Search patterns with line offset (e.g. /pat/+3 or /pat/z.) are
  23955. +    not supported.
  23956. +  - Ex commands are not implemented; try ':' to get some hints.
  23957. +  - No line undo (i.e. the 'U' command), but multi-undo is a standard feature.
  23958. +
  23959. +* Modifications
  23960. +  - The stopping positions for some point motion commands (word boundary,
  23961. +    pattern search) are slightly different from standard 'vi'.
  23962. +    Also, no automatic wrap around at end of buffer for pattern searching.
  23963. +  - Since changes are done in two steps (deletion then insertion), you need
  23964. +    to undo twice to completely undo a change command.  But this is not needed
  23965. +    for undoing a repeated change command.
  23966. +  - No need to set/unset 'magic', to search for a string with regular expr
  23967. +    in it just put a prefix arg for the search commands.  Replace cmds too.
  23968. +  - ^R is bound to incremental backward search, so use ^L to redraw screen.
  23969. +
  23970. +* Extensions
  23971. +  - Some standard (or modified) Emacs commands were integrated, such as
  23972. +    incremental search, query replace, transpose objects, and keyboard macros.
  23973. +  - In command state, ^X links to the 'ctl-x-map', and ESC can be linked to
  23974. +    esc-map or set undefined.  These can give you the full power of Emacs.
  23975. +  - See vi-com-map for those keys that are extensions to standard vi, e.g.
  23976. +    `vi-name-last-change-or-macro', `vi-verify-spelling', `vi-locate-def',
  23977. +    `vi-mark-region', and 'vi-quote-words'.  Some of them are quite handy.
  23978. +  - Use \[vi-switch-mode] to switch among different modes quickly.
  23979. +  
  23980. +Syntax table and abbrevs while in vi mode remain as they were in Emacs.Fview-file
  23981. +View FILE in View mode, returning to previous buffer when done.
  23982. +The usual Emacs commands are not available; instead,
  23983. +a special set of commands (mostly letters and punctuation)
  23984. +are defined for moving around in the buffer.
  23985. +Space scrolls forward, Delete scrolls backward.
  23986. +For list of all View commands, type ? or h while viewing.
  23987. +
  23988. +This command runs the normal hook `view-mode-hook'.Fview-file-other-window
  23989. +View FILE in View mode in other window.
  23990. +Return to previous buffer when done.
  23991. +The usual Emacs commands are not available; instead,
  23992. +a special set of commands (mostly letters and punctuation)
  23993. +are defined for moving around in the buffer.
  23994. +Space scrolls forward, Delete scrolls backward.
  23995. +For list of all View commands, type ? or h while viewing.
  23996. +
  23997. +This command runs the normal hook `view-mode-hook'.Fview-buffer
  23998. +View BUFFER in View mode, returning to previous buffer when done.
  23999. +The usual Emacs commands are not available; instead,
  24000. +a special set of commands (mostly letters and punctuation)
  24001. +are defined for moving around in the buffer.
  24002. +Space scrolls forward, Delete scrolls backward.
  24003. +For list of all View commands, type ? or h while viewing.
  24004. +
  24005. +This command runs the normal hook `view-mode-hook'.Fview-buffer-other-window
  24006. +View BUFFER in View mode in another window,
  24007. +returning to original buffer when done *only* if 
  24008. +prefix argument NOT-RETURN is nil (which is the default).
  24009. +
  24010. +The usual Emacs commands are not available in View mode; instead,
  24011. +a special set of commands (mostly letters and punctuation)
  24012. +are defined for moving around in the buffer.
  24013. +Space scrolls forward, Delete scrolls backward.
  24014. +For list of all View commands, type ? or h while viewing.
  24015. +
  24016. +This command runs the normal hook `view-mode-hook'.Fview-mode
  24017. +Major mode for viewing text but not editing it.
  24018. +Letters do not insert themselves.  Instead these commands are provided.
  24019. +Most commands take prefix arguments.  Commands dealing with lines
  24020. +default to "scroll size" lines (initially size of window).
  24021. +Search commands default to a repeat count of one.
  24022. +M-< or <    move to beginning of buffer.
  24023. +M-> or >    move to end of buffer.
  24024. +C-v or Space    scroll forward lines.
  24025. +M-v or DEL    scroll backward lines.
  24026. +CR or LF    scroll forward one line (backward with prefix argument).
  24027. +z        like Space except set number of lines for further
  24028. +           scrolling commands to scroll by.
  24029. +C-u and Digits    provide prefix arguments.  `-' denotes negative argument.
  24030. +=        prints the current line number.
  24031. +g        goes to line given by prefix argument.
  24032. +/ or M-C-s    searches forward for regular expression
  24033. +\ or M-C-r    searches backward for regular expression.
  24034. +n        searches forward for last regular expression.
  24035. +p        searches backward for last regular expression.
  24036. +C-@ or .    set the mark.
  24037. +x        exchanges point and mark.
  24038. +C-s or s    do forward incremental search.
  24039. +C-r or r    do reverse incremental search.
  24040. +@ or '        return to mark and pops mark ring.
  24041. +          Mark ring is pushed at start of every
  24042. +          successful search and when jump to line to occurs.
  24043. +          The mark is set on jump to buffer start or end.
  24044. +? or h        provide help message (list of commands).
  24045. +\[Helper-help]        provides help (list of commands or description of a command).
  24046. +C-n        moves down lines vertically.
  24047. +C-p        moves upward lines vertically.
  24048. +C-l        recenters the screen.
  24049. +q or C-c    exit view-mode and return to previous buffer.
  24050. +
  24051. +Entry to this mode runs the normal hook `view-mode-hook'.
  24052. +
  24053. +\{view-mode-map}Fvip-mode
  24054. +Turn on VIP emulation of VI.Fwordstar-mode
  24055. +Major mode with WordStar-like key bindings.
  24056. +
  24057. +BUGS:
  24058. + - Help menus with WordStar commands (C-j just calls help-for-help)
  24059. +   are not implemented
  24060. + - Options for search and replace
  24061. + - Show markers (C-k h) is somewhat strange
  24062. + - Search and replace (C-q a) is only available in forward direction
  24063. +
  24064. +No key bindings beginning with ESC are installed, they will work
  24065. +Emacs-like.
  24066. +
  24067. +The key bindings are:
  24068. +
  24069. +  C-a        backward-word
  24070. +  C-b        fill-paragraph
  24071. +  C-c        scroll-up-line
  24072. +  C-d        forward-char
  24073. +  C-e        previous-line
  24074. +  C-f        forward-word
  24075. +  C-g        delete-char
  24076. +  C-h        backward-char
  24077. +  C-i        indent-for-tab-command
  24078. +  C-j        help-for-help
  24079. +  C-k        ordstar-C-k-map
  24080. +  C-l        ws-repeat-search
  24081. +  C-n        open-line
  24082. +  C-p        quoted-insert
  24083. +  C-r        scroll-down-line
  24084. +  C-s        backward-char
  24085. +  C-t        kill-word
  24086. +  C-u        keyboard-quit
  24087. +  C-v        overwrite-mode
  24088. +  C-w        scroll-down
  24089. +  C-x        next-line
  24090. +  C-y        kill-complete-line
  24091. +  C-z        scroll-up
  24092. +
  24093. +  C-k 0        ws-set-marker-0
  24094. +  C-k 1        ws-set-marker-1
  24095. +  C-k 2        ws-set-marker-2
  24096. +  C-k 3        ws-set-marker-3
  24097. +  C-k 4        ws-set-marker-4
  24098. +  C-k 5        ws-set-marker-5
  24099. +  C-k 6        ws-set-marker-6
  24100. +  C-k 7        ws-set-marker-7
  24101. +  C-k 8        ws-set-marker-8
  24102. +  C-k 9        ws-set-marker-9
  24103. +  C-k b        ws-begin-block
  24104. +  C-k c        ws-copy-block
  24105. +  C-k d        save-buffers-kill-emacs
  24106. +  C-k f        find-file
  24107. +  C-k h        ws-show-markers
  24108. +  C-k i        ws-indent-block
  24109. +  C-k k        ws-end-block
  24110. +  C-k p        ws-print-block
  24111. +  C-k q        kill-emacs
  24112. +  C-k r        insert-file
  24113. +  C-k s        save-some-buffers
  24114. +  C-k t        ws-mark-word
  24115. +  C-k u        ws-exdent-block
  24116. +  C-k C-u    keyboard-quit
  24117. +  C-k v        ws-move-block
  24118. +  C-k w        ws-write-block
  24119. +  C-k x        kill-emacs
  24120. +  C-k y        ws-delete-block
  24121. +
  24122. +  C-o c        center-line
  24123. +  C-o b        switch-to-buffer
  24124. +  C-o j        justify-current-line
  24125. +  C-o k        kill-buffer
  24126. +  C-o l        list-buffers
  24127. +  C-o m        auto-fill-mode
  24128. +  C-o r        set-fill-column
  24129. +  C-o C-u    keyboard-quit
  24130. +  C-o wd    delete-other-windows
  24131. +  C-o wh    split-window-horizontally
  24132. +  C-o wo    other-window
  24133. +  C-o wv    split-window-vertically
  24134. +
  24135. +  C-q 0        ws-find-marker-0
  24136. +  C-q 1        ws-find-marker-1
  24137. +  C-q 2        ws-find-marker-2
  24138. +  C-q 3        ws-find-marker-3
  24139. +  C-q 4        ws-find-marker-4
  24140. +  C-q 5        ws-find-marker-5
  24141. +  C-q 6        ws-find-marker-6
  24142. +  C-q 7        ws-find-marker-7
  24143. +  C-q 8        ws-find-marker-8
  24144. +  C-q 9        ws-find-marker-9
  24145. +  C-q a        ws-query-replace
  24146. +  C-q b        ws-to-block-begin
  24147. +  C-q c        end-of-buffer
  24148. +  C-q d        end-of-line
  24149. +  C-q f        ws-search
  24150. +  C-q k        ws-to-block-end
  24151. +  C-q l        ws-undo
  24152. +  C-q p        ws-last-cursorp
  24153. +  C-q r        beginning-of-buffer
  24154. +  C-q C-u    keyboard-quit
  24155. +  C-q w        ws-last-error
  24156. +  C-q y        ws-kill-eol
  24157. +  C-q DEL    ws-kill-bol
  24158. +Frun-scheme
  24159. +Run an inferior Scheme process.
  24160. +Output goes to the buffer `*scheme*'.
  24161. +With argument, asks for a command line.Fyow
  24162. +Return or display a random Zippy quotation.  With prefix arg, insert it.Finsert-zippyism
  24163. +Prompt with completion for a known Zippy quotation, and insert it at point.Fpsychoanalyze-pinhead
  24164. +Zippy goes to the analyst.Fmap-y-or-n-p
  24165. +Ask a series of boolean questions.
  24166. +Takes args PROMPTER ACTOR LIST, and optional args HELP and ACTION-ALIST.
  24167. +
  24168. +LIST is a list of objects, or a function of no arguments to return the next
  24169. +object or nil.
  24170. +
  24171. +If PROMPTER is a string, the prompt is (format PROMPTER OBJECT).  If not
  24172. +a string, PROMPTER is a function of one arg (an object from LIST), which
  24173. +returns a string to be used as the prompt for that object.  If the return
  24174. +value is not a string, it is eval'd to get the answer; it may be nil to
  24175. +ignore the object, t to act on the object without asking the user, or a
  24176. +form to do a more complex prompt.
  24177. +
  24178. +ACTOR is a function of one arg (an object from LIST),
  24179. +which gets called with each object that the user answers `yes' for.
  24180. +
  24181. +If HELP is given, it is a list (OBJECT OBJECTS ACTION),
  24182. +where OBJECT is a string giving the singular noun for an elt of LIST;
  24183. +OBJECTS is the plural noun for elts of LIST, and ACTION is a transitive
  24184. +verb describing ACTOR.  The default is ("object" "objects" "act on").
  24185. +
  24186. +At the prompts, the user may enter y, Y, or SPC to act on that object;
  24187. +n, N, or DEL to skip that object; ! to act on all following objects;
  24188. +ESC or q to exit (skip all following objects); . (period) to act on the
  24189. +current object and then exit; or \[help-command] to get help.
  24190. +
  24191. +If ACTION-ALIST is given, it is an alist (KEY FUNCTION HELP) of extra keys
  24192. +that will be accepted.  KEY is a character; FUNCTION is a function of one
  24193. +arg (an object from LIST); HELP is a string.  When the user hits KEY,
  24194. +FUNCTION is called.  If it returns non-nil, the object is considered
  24195. +"acted upon", and the next object from LIST is processed.  If it returns
  24196. +nil, the prompt is repeated for the same object.
  24197. +
  24198. +Final optional argument NO-CURSOR-IN-ECHO-AREA non-nil says not to set
  24199. +`cursor-in-echo-area' while prompting.
  24200. +
  24201. +This function uses `query-replace-map' to define the standard responses,
  24202. +but not all of the responses which `query-replace' understands
  24203. +are meaningful here.
  24204. +
  24205. +Returns the number of actions taken.Fforward-page
  24206. +Move forward to page boundary.  With arg, repeat, or go back if negative.
  24207. +A page boundary is any line whose beginning matches the regexp
  24208. +`page-delimiter'.Fbackward-page
  24209. +Move backward to page boundary.  With arg, repeat, or go fwd if negative.
  24210. +A page boundary is any line whose beginning matches the regexp
  24211. +`page-delimiter'.Fmark-page
  24212. +Put mark at end of page, point at beginning.
  24213. +A numeric arg specifies to move forward or backward by that many pages,
  24214. +thus marking a page other than the one point was originally in.Fnarrow-to-page
  24215. +Make text outside current page invisible.
  24216. +A numeric arg specifies to move forward or backward by that many pages,
  24217. +thus showing a page other than the one point was originally in.Fcount-lines-page
  24218. +Report number of lines on current page, and how many are before or after point.Fwhat-page
  24219. +Print page and line number of point.Vparagraph-start
  24220. +*Regexp for beginning of a line that starts OR separates paragraphs.
  24221. +This regexp should match lines that separate paragraphs
  24222. +and should also match lines that start a paragraph
  24223. +(and are part of that paragraph).
  24224. +The variable `paragraph-separate' specifies how to distinguish
  24225. +lines that start paragraphs from lines that separate them.Vparagraph-separate
  24226. +*Regexp for beginning of a line that separates paragraphs.
  24227. +If you change this, you may have to change paragraph-start also.Vsentence-end
  24228. +*Regexp describing the end of a sentence.
  24229. +All paragraph boundaries also end sentences, regardless.
  24230. +
  24231. +In order to be recognized as the end of a sentence, the ending period,
  24232. +question mark, or exclamation point must be followed by two spaces,
  24233. +unless it's inside some sort of quotes or parenthesis.Vpage-delimiter
  24234. +*Regexp describing line-beginnings that separate pages.Vparagraph-ignore-fill-prefix
  24235. +Non-nil means the paragraph commands are not affected by `fill-prefix'.
  24236. +This is desirable in modes where blank lines are the paragraph delimiters.Fforward-paragraph
  24237. +Move forward to end of paragraph.
  24238. +With arg N, do it N times; negative arg -N means move backward N paragraphs.
  24239. +
  24240. +A line which `paragraph-start' matches either separates paragraphs
  24241. +(if `paragraph-separate' matches it also) or is the first line of a paragraph.
  24242. +A paragraph end is the beginning of a line which is not part of the paragraph
  24243. +to which the end of the previous line belongs, or the end of the buffer.Fbackward-paragraph
  24244. +Move backward to start of paragraph.
  24245. +With arg N, do it N times; negative arg -N means move forward N paragraphs.
  24246. +
  24247. +A paragraph start is the beginning of a line which is a
  24248. +`first-line-of-paragraph' or which is ordinary text and follows a
  24249. +paragraph-separating line; except: if the first real line of a
  24250. +paragraph is preceded by a blank line, the paragraph starts at that
  24251. +blank line.
  24252. +
  24253. +See `forward-paragraph' for more information.Fmark-paragraph
  24254. +Put point at beginning of this paragraph, mark at end.
  24255. +The paragraph marked is the one that contains point or follows point.Fkill-paragraph
  24256. +Kill forward to end of paragraph.
  24257. +With arg N, kill forward to Nth end of paragraph;
  24258. +negative arg -N means kill backward to Nth start of paragraph.Fbackward-kill-paragraph
  24259. +Kill back to start of paragraph.
  24260. +With arg N, kill back to Nth start of paragraph;
  24261. +negative arg -N means kill forward to Nth end of paragraph.Ftranspose-paragraphs
  24262. +Interchange this (or next) paragraph with previous one.Fforward-sentence
  24263. +Move forward to next `sentence-end'.  With argument, repeat.
  24264. +With negative argument, move backward repeatedly to `sentence-beginning'.
  24265. +
  24266. +The variable `sentence-end' is a regular expression that matches ends of
  24267. +sentences.  Also, every paragraph boundary terminates sentences as well.Fbackward-sentence
  24268. +Move backward to start of sentence.  With arg, do it arg times.
  24269. +See `forward-sentence' for more information.Fkill-sentence
  24270. +Kill from point to end of sentence.
  24271. +With arg, repeat; negative arg -N means kill back to Nth start of sentence.Fbackward-kill-sentence
  24272. +Kill back from point to start of sentence.
  24273. +With arg, repeat, or kill forward to Nth end of sentence if negative arg -N.Fmark-end-of-sentence
  24274. +Put mark at end of sentence.  Arg works as in `forward-sentence'.Ftranspose-sentences
  24275. +Interchange this (next) and previous sentence.Vregister-alist
  24276. +Alist of elements (NAME . CONTENTS), one for each Emacs register.
  24277. +NAME is a character (a number).  CONTENTS is a string, number,
  24278. +frame configuration, mark or list.
  24279. +A list of strings represents a rectangle.
  24280. +A list of the form (file . NAME) represents the file named NAME.Fget-register
  24281. +Return contents of Emacs register named CHAR, or nil if none.Fset-register
  24282. +Set contents of Emacs register named CHAR to VALUE.  Returns VALUE.
  24283. +See the documentation of the variable `register-alist' for possible VALUE.Fpoint-to-register
  24284. +Store current location of point in register REGISTER.
  24285. +With prefix argument, store current frame configuration.
  24286. +Use \[jump-to-register] to go to that location or restore that configuration.
  24287. +Argument is a character, naming the register.Fwindow-configuration-to-register
  24288. +Store the window configuration of the selected frame in register REGISTER.
  24289. +Use \[jump-to-register] to restore the configuration.
  24290. +Argument is a character, naming the register.Fframe-configuration-to-register
  24291. +Store the window configuration of all frames in register REGISTER.
  24292. +Use \[jump-to-register] to restore the configuration.
  24293. +Argument is a character, naming the register.Fjump-to-register
  24294. +Move point to location stored in a register.
  24295. +If the register contains a file name, find that file.
  24296. + (To put a file name in a register, you must use `set-register'.)
  24297. +If the register contains a window configuration (one frame) or a frame
  24298. +configuration (all frames), restore that frame or all frames accordingly.
  24299. +First argument is a character, naming the register.
  24300. +Optional second arg non-nil (interactively, prefix argument) says to
  24301. +delete any existing frames that the frame configuration doesn't mention.
  24302. +(Otherwise, these frames are iconified.)Fview-register
  24303. +Display what is contained in register named REGISTER.
  24304. +REGISTER is a character.Finsert-register
  24305. +Insert contents of register REG.  REG is a character.
  24306. +Normally puts point before and mark after the inserted text.
  24307. +If optional second arg is non-nil, puts mark before and point after.
  24308. +Interactively, second arg is non-nil if prefix arg is supplied.Fcopy-to-register
  24309. +Copy region into register REG.  With prefix arg, delete as well.
  24310. +Called from program, takes four args: REG, START, END and DELETE-FLAG.
  24311. +START and END are buffer positions indicating what to copy.Fappend-to-register
  24312. +Append region to text in register REG.  With prefix arg, delete as well.
  24313. +Called from program, takes four args: REG, START, END and DELETE-FLAG.
  24314. +START and END are buffer positions indicating what to append.Fprepend-to-register
  24315. +Prepend region to text in register REG.  With prefix arg, delete as well.
  24316. +Called from program, takes four args: REG, START, END and DELETE-FLAG.
  24317. +START and END are buffer positions indicating what to prepend.Fcopy-rectangle-to-register
  24318. +Copy rectangular region into register REG.  With prefix arg, delete as well.
  24319. +Called from program, takes four args: REG, START, END and DELETE-FLAG.
  24320. +START and END are buffer positions giving two corners of rectangle.Vcase-replace
  24321. +*Non-nil means query-replace should preserve case in replacements.Fquery-replace
  24322. +Replace some occurrences of FROM-STRING with TO-STRING.
  24323. +As each match is found, the user must type a character saying
  24324. +what to do with it.  For directions, type \[help-command] at that time.
  24325. +
  24326. +Preserves case in each replacement if `case-replace' and `case-fold-search'
  24327. +are non-nil and FROM-STRING has no uppercase letters.
  24328. +Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace
  24329. +only matches surrounded by word boundaries.
  24330. +
  24331. +To customize possible responses, change the "bindings" in `query-replace-map'.Fquery-replace-regexp
  24332. +Replace some things after point matching REGEXP with TO-STRING.
  24333. +As each match is found, the user must type a character saying
  24334. +what to do with it.  For directions, type \[help-command] at that time.
  24335. +
  24336. +Preserves case in each replacement if `case-replace' and `case-fold-search'
  24337. +are non-nil and REGEXP has no uppercase letters.
  24338. +Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace
  24339. +only matches surrounded by word boundaries.
  24340. +In TO-STRING, `\&' stands for whatever matched the whole of REGEXP,
  24341. +and `\=\N' (where N is a digit) stands for
  24342. + whatever what matched the Nth `\(...\)' in REGEXP.Fmap-query-replace-regexp
  24343. +Replace some matches for REGEXP with various strings, in rotation.
  24344. +The second argument TO-STRINGS contains the replacement strings, separated
  24345. +by spaces.  This command works like `query-replace-regexp' except
  24346. +that each successive replacement uses the next successive replacement string,
  24347. +wrapping around from the last such string to the first.
  24348. +
  24349. +Non-interactively, TO-STRINGS may be a list of replacement strings.
  24350. +
  24351. +A prefix argument N says to use each replacement string N times
  24352. +before rotating to the next.Freplace-string
  24353. +Replace occurrences of FROM-STRING with TO-STRING.
  24354. +Preserve case in each match if `case-replace' and `case-fold-search'
  24355. +are non-nil and FROM-STRING has no uppercase letters.
  24356. +Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace
  24357. +only matches surrounded by word boundaries.
  24358. +
  24359. +This function is usually the wrong thing to use in a Lisp program.
  24360. +What you probably want is a loop like this:
  24361. +  (while (search-forward FROM-STRING nil t)
  24362. +    (replace-match TO-STRING nil t))
  24363. +which will run faster and will not set the mark or print anything.Freplace-regexp
  24364. +Replace things after point matching REGEXP with TO-STRING.
  24365. +Preserve case in each match if `case-replace' and `case-fold-search'
  24366. +are non-nil and REGEXP has no uppercase letters.
  24367. +Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace
  24368. +only matches surrounded by word boundaries.
  24369. +In TO-STRING, `\&' stands for whatever matched the whole of REGEXP,
  24370. +and `\=\N' (where N is a digit) stands for
  24371. + whatever what matched the Nth `\(...\)' in REGEXP.
  24372. +
  24373. +This function is usually the wrong thing to use in a Lisp program.
  24374. +What you probably want is a loop like this:
  24375. +  (while (re-search-forward REGEXP nil t)
  24376. +    (replace-match TO-STRING nil nil))
  24377. +which will run faster and will not set the mark or print anything.Vregexp-history
  24378. +History list for some commands that read regular expressions.Fkeep-lines
  24379. +Delete all lines except those containing matches for REGEXP.
  24380. +A match split across lines preserves all the lines it lies in.
  24381. +Applies to all lines after point.Fflush-lines
  24382. +Delete lines containing matches for REGEXP.
  24383. +If a match is split across lines, all the lines it lies in are deleted.
  24384. +Applies to lines after point.Fhow-many
  24385. +Print number of matches for REGEXP following point.Foccur-mode
  24386. +Major mode for output from \[occur].
  24387. +Move point to one of the occurrences in this buffer,
  24388. +then use \[occur-mode-goto-occurrence] to go to the same occurrence
  24389. +in the buffer that the occurrences were found in.
  24390. +Or click \<occur-mode-map>\[occur-mode-mouse-goto] on an occurrence line.
  24391. +\{occur-mode-map}Foccur-mode-mouse-goto
  24392. +In Occur mode, go to the occurrence whose line you click on.Foccur-mode-goto-occurrence
  24393. +Go to the occurrence the current line describes.Vlist-matching-lines-default-context-lines
  24394. +*Default number of context lines to include around a `list-matching-lines'
  24395. +match.  A negative number means to include that many lines before the match.
  24396. +A positive number means to include that many lines both before and after.Foccur
  24397. +Show all lines in the current buffer containing a match for REGEXP.
  24398. +
  24399. +If a match spreads across multiple lines, all those lines are shown.
  24400. +
  24401. +Each line is displayed with NLINES lines before and after, or -NLINES
  24402. +before if NLINES is negative.
  24403. +NLINES defaults to `list-matching-lines-default-context-lines'.
  24404. +Interactively it is the prefix arg.
  24405. +
  24406. +The lines are shown in a buffer named `*Occur*'.
  24407. +It serves as a menu to find any of the occurrences in this buffer.
  24408. +\[describe-mode] in that buffer will explain how.Vquery-replace-help
  24409. +Help message while in query-replaceVquery-replace-map
  24410. +Keymap that defines the responses to questions in `query-replace'.
  24411. +The "bindings" in this map are not commands; they are answers.
  24412. +The valid answers include `act', `skip', `act-and-show',
  24413. +`exit', `act-and-exit', `edit', `delete-and-edit', `recenter',
  24414. +`automatic', `backup', and `help'.Fperform-replace
  24415. +Subroutine of `query-replace'.  Its complexity handles interactive queries.
  24416. +Don't use this in your own program unless you want to query and set the mark
  24417. +just as `query-replace' does.  Instead, write a simple loop like this:
  24418. +  (while (re-search-forward "foo[     ]+bar" nil t)
  24419. +    (replace-match "foobar" nil nil))
  24420. +which will run faster and probably do exactly what you want.Vquery-replace-highlight
  24421. +*Non-nil means to highlight words during query replacement.Fopen-line
  24422. +Insert a newline and leave point before it.
  24423. +If there is a fill prefix, insert the fill prefix on the new line
  24424. +if the line would have been empty.
  24425. +With arg N, insert N newlines.Fsplit-line
  24426. +Split current line, moving portion beyond point vertically down.Fquoted-insert
  24427. +Read next input character and insert it.
  24428. +This is useful for inserting control characters.
  24429. +You may also type up to 3 octal digits, to insert a character with that code.
  24430. +
  24431. +In overwrite mode, this function inserts the character anyway, and
  24432. +does not handle octal digits specially.  This means that if you use
  24433. +overwrite as your normal editing mode, you can use this function to
  24434. +insert characters when necessary.
  24435. +
  24436. +In binary overwrite mode, this function does overwrite, and octal
  24437. +digits are interpreted as a character code.  This is supposed to make
  24438. +this function useful in editing binary files.Fdelete-indentation
  24439. +Join this line to previous and fix up whitespace at join.
  24440. +If there is a fill prefix, delete it from the beginning of this line.
  24441. +With argument, join this line to following line.Ffixup-whitespace
  24442. +Fixup white space between objects around point.
  24443. +Leave one space or none, according to the context.Fdelete-horizontal-space
  24444. +Delete all spaces and tabs around point.Fjust-one-space
  24445. +Delete all spaces and tabs around point, leaving one space.Fdelete-blank-lines
  24446. +On blank line, delete all surrounding blank lines, leaving just one.
  24447. +On isolated blank line, delete that one.
  24448. +On nonblank line, delete any immediately following blank lines.Fback-to-indentation
  24449. +Move point to the first non-whitespace character on this line.Fnewline-and-indent
  24450. +Insert a newline, then indent according to major mode.
  24451. +Indentation is done using the value of `indent-line-function'.
  24452. +In programming language modes, this is the same as TAB.
  24453. +In some text modes, where TAB inserts a tab, this command indents to the
  24454. +column specified by the variable `left-margin'.Freindent-then-newline-and-indent
  24455. +Reindent current line, insert newline, then indent the new line.
  24456. +Indentation of both lines is done according to the current major mode,
  24457. +which means calling the current value of `indent-line-function'.
  24458. +In programming language modes, this is the same as TAB.
  24459. +In some text modes, where TAB inserts a tab, this indents to the
  24460. +column specified by the variable `left-margin'.Fbackward-delete-char-untabify
  24461. +Delete characters backward, changing tabs into spaces.
  24462. +Delete ARG chars, and kill (save in kill ring) if KILLP is non-nil.
  24463. +Interactively, ARG is the prefix arg (default 1)
  24464. +and KILLP is t if a prefix arg was specified.Fzap-to-char
  24465. +Kill up to and including ARG'th occurrence of CHAR.
  24466. +Goes backward if ARG is negative; error if CHAR not found.Fbeginning-of-buffer
  24467. +Move point to the beginning of the buffer; leave mark at previous position.
  24468. +With arg N, put point N/10 of the way from the true beginning.
  24469. +
  24470. +Don't use this command in Lisp programs!
  24471. +(goto-char (point-min)) is faster and avoids clobbering the mark.Fend-of-buffer
  24472. +Move point to the end of the buffer; leave mark at previous position.
  24473. +With arg N, put point N/10 of the way from the true end.
  24474. +
  24475. +Don't use this command in Lisp programs!
  24476. +(goto-char (point-max)) is faster and avoids clobbering the mark.Fmark-whole-buffer
  24477. +Put point at beginning and mark at end of buffer.
  24478. +You probably should not use this function in Lisp programs;
  24479. +it is usually a mistake for a Lisp function to use any subroutine
  24480. +that uses or sets the mark.Fcount-lines-region
  24481. +Print number of lines and characters in the region.Fwhat-line
  24482. +Print the current line number (in the buffer) of point.Fcount-lines
  24483. +Return number of lines between START and END.
  24484. +This is usually the number of newlines between them,
  24485. +but can be one more if START is not equal to END
  24486. +and the greater of them is not at the start of a line.Fwhat-cursor-position
  24487. +Print info on cursor position (on screen and within buffer).Ffundamental-mode
  24488. +Major mode not specialized for anything in particular.
  24489. +Other major modes are defined by comparison with this one.Vread-expression-map
  24490. +Minibuffer keymap used for reading Lisp expressions.Feval-expression
  24491. +Evaluate EXPRESSION and print value in minibuffer.
  24492. +Value is also consed on to front of the variable `values'.Fedit-and-eval-command
  24493. +Prompting with PROMPT, let user edit COMMAND and eval result.
  24494. +COMMAND is a Lisp expression.  Let user edit that expression in
  24495. +the minibuffer, then read and evaluate the result.Frepeat-complex-command
  24496. +Edit and re-evaluate last complex command, or ARGth from last.
  24497. +A complex command is one which used the minibuffer.
  24498. +The command is placed in the minibuffer as a Lisp form for editing.
  24499. +The result is executed, repeating the command as changed.
  24500. +If the command has been changed or is not the most recent previous command
  24501. +it is added to the front of the command history.
  24502. +You can use the minibuffer history commands \<minibuffer-local-map>\[next-history-element] and \[previous-history-element]
  24503. +to get different commands to edit and resubmit.Vminibuffer-history
  24504. +Default minibuffer history list.
  24505. +This is used for all minibuffer input
  24506. +except when an alternate history list is specified.Vminibuffer-history-sexp-flag
  24507. +Non-nil when doing history operations on `command-history'.
  24508. +More generally, indicates that the history list being acted on
  24509. +contains expressions rather than strings.Fprevious-matching-history-element
  24510. +Find the previous history element that matches REGEXP.
  24511. +(Previous history elements refer to earlier actions.)
  24512. +With prefix argument N, search for Nth previous match.
  24513. +If N is negative, find the next or Nth next match.Fnext-matching-history-element
  24514. +Find the next history element that matches REGEXP.
  24515. +(The next history element refers to a more recent action.)
  24516. +With prefix argument N, search for Nth next match.
  24517. +If N is negative, find the previous or Nth previous match.Fnext-history-element
  24518. +Insert the next element of the minibuffer history into the minibuffer.Fprevious-history-element
  24519. +Inserts the previous element of the minibuffer history into the minibuffer.Fnext-complete-history-element
  24520. +Get next element of history which is a completion of minibuffer contents.Fprevious-complete-history-element
  24521. +Get previous element of history which is a completion of minibuffer contents.Fgoto-line
  24522. +Goto line ARG, counting from line 1 at beginning of buffer.Fundo
  24523. +Undo some previous changes.
  24524. +Repeat this command to undo more changes.
  24525. +A numeric argument serves as a repeat count.Vpending-undo-list
  24526. +Within a run of consecutive undo commands, list remaining to be undone.Fundo-start
  24527. +Set `pending-undo-list' to the front of the undo list.
  24528. +The next call to `undo-more' will undo the most recently made change.Fundo-more
  24529. +Undo back N undo-boundaries beyond what was already undone recently.
  24530. +Call `undo-start' to get ready to undo recent changes,
  24531. +then call `undo-more' one or more times to undo them.Vshell-command-history
  24532. +History list for some commands that read shell commands.Fshell-command
  24533. +Execute string COMMAND in inferior shell; display output, if any.
  24534. +If COMMAND ends in ampersand, execute it asynchronously.
  24535. +Optional second arg non-nil (prefix arg, if interactive)
  24536. +means insert output in current buffer after point (leave mark after it).
  24537. +This cannot be done asynchronously.Fshell-command-on-region
  24538. +Execute string COMMAND in inferior shell with region as input.
  24539. +Normally display output (if any) in temp buffer `*Shell Command Output*';
  24540. +Prefix arg means replace the region with it.
  24541. +Noninteractive args are START, END, COMMAND, FLAG.
  24542. +Noninteractively FLAG means insert output in place of text from START to END,
  24543. +and put point at the end, but don't alter the mark.
  24544. +
  24545. +If the output is one line, it is displayed in the echo area,
  24546. +but it is nonetheless available in buffer `*Shell Command Output*'
  24547. +even though that buffer is not automatically displayed.  If there is no output
  24548. +or output is inserted in the current buffer then `*Shell Command Output*' is
  24549. +deleted.Funiversal-argument
  24550. +Begin a numeric argument for the following command.
  24551. +Digits or minus sign following \[universal-argument] make up the numeric argument.
  24552. +\[universal-argument] following the digits or minus sign ends the argument.
  24553. +\[universal-argument] without digits or minus sign provides 4 as argument.
  24554. +Repeating \[universal-argument] without digits or minus sign
  24555. + multiplies the argument by 4 each time.Fdigit-argument
  24556. +Part of the numeric argument for the next command.
  24557. +\[universal-argument] following digits or minus sign ends the argument.Fnegative-argument
  24558. +Begin a negative numeric argument for the next command.
  24559. +\[universal-argument] following digits or minus sign ends the argument.Fforward-to-indentation
  24560. +Move forward ARG lines and position at first nonblank character.Fbackward-to-indentation
  24561. +Move backward ARG lines and position at first nonblank character.Vkill-whole-line
  24562. +*If non-nil, `kill-line' with no arg at beg of line kills the whole line.Fkill-line
  24563. +Kill the rest of the current line; if no nonblanks there, kill thru newline.
  24564. +With prefix argument, kill that many lines from point.
  24565. +Negative arguments kill lines backward.
  24566. +
  24567. +When calling from a program, nil means "no arg",
  24568. +a number counts as a prefix arg.
  24569. +
  24570. +If `kill-whole-line' is non-nil, then kill the whole line
  24571. +when given no argument at the beginning of a line.Vinterprogram-cut-function
  24572. +Function to call to make a killed region available to other programs.
  24573. +
  24574. +Most window systems provide some sort of facility for cutting and
  24575. +pasting text between the windows of different programs.
  24576. +This variable holds a function that Emacs calls whenever text
  24577. +is put in the kill ring, to make the new kill available to other
  24578. +programs.
  24579. +
  24580. +The function takes one or two arguments.
  24581. +The first argument, TEXT, is a string containing
  24582. +the text which should be made available.
  24583. +The second, PUSH, if non-nil means this is a "new" kill;
  24584. +nil means appending to an "old" kill.Vinterprogram-paste-function
  24585. +Function to call to get text cut from other programs.
  24586. +
  24587. +Most window systems provide some sort of facility for cutting and
  24588. +pasting text between the windows of different programs.
  24589. +This variable holds a function that Emacs calls to obtain
  24590. +text that other programs have provided for pasting.
  24591. +
  24592. +The function should be called with no arguments.  If the function
  24593. +returns nil, then no other program has provided such text, and the top
  24594. +of the Emacs kill ring should be used.  If the function returns a
  24595. +string, that string should be put in the kill ring as the latest kill.
  24596. +
  24597. +Note that the function should return a string only if a program other
  24598. +than Emacs has provided a string for pasting; if Emacs provided the
  24599. +most recent string, the function should return nil.  If it is
  24600. +difficult to tell whether Emacs or some other program provided the
  24601. +current string, it is probably good enough to return nil if the string
  24602. +is equal (according to `string=') to the last text Emacs provided.Vkill-ring
  24603. +List of killed text sequences.
  24604. +Since the kill ring is supposed to interact nicely with cut-and-paste
  24605. +facilities offered by window systems, use of this variable should
  24606. +interact nicely with `interprogram-cut-function' and
  24607. +`interprogram-paste-function'.  The functions `kill-new',
  24608. +`kill-append', and `current-kill' are supposed to implement this
  24609. +interaction; you may want to use them instead of manipulating the kill
  24610. +ring directly.Vkill-ring-max
  24611. +*Maximum length of kill ring before oldest elements are thrown away.Vkill-ring-yank-pointer
  24612. +The tail of the kill ring whose car is the last thing yanked.Fkill-new
  24613. +Make STRING the latest kill in the kill ring.
  24614. +Set the kill-ring-yank pointer to point to it.
  24615. +If `interprogram-cut-function' is non-nil, apply it to STRING.Fkill-append
  24616. +Append STRING to the end of the latest kill in the kill ring.
  24617. +If BEFORE-P is non-nil, prepend STRING to the kill.
  24618. +If `interprogram-cut-function' is set, pass the resulting kill to
  24619. +it.Fcurrent-kill
  24620. +Rotate the yanking point by N places, and then return that kill.
  24621. +If N is zero, `interprogram-paste-function' is set, and calling it
  24622. +returns a string, then that string is added to the front of the
  24623. +kill ring and returned as the latest kill.
  24624. +If optional arg DO-NOT-MOVE is non-nil, then don't actually move the 
  24625. +yanking point; just return the Nth kill forward.Vkill-read-only-ok
  24626. +*Non-nil means don't signal an error for killing read-only text.Fkill-region
  24627. +Kill between point and mark.
  24628. +The text is deleted but saved in the kill ring.
  24629. +The command \[yank] can retrieve it from there.
  24630. +(If you want to kill and then yank immediately, use \[copy-region-as-kill].)
  24631. +If the buffer is read-only, Emacs will beep and refrain from deleting
  24632. +the text, but put the text in the kill ring anyway.  This means that
  24633. +you can use the killing commands to copy text from a read-only buffer.
  24634. +
  24635. +This is the primitive for programs to kill text (as opposed to deleting it).
  24636. +Supply two arguments, character numbers indicating the stretch of text
  24637. + to be killed.
  24638. +Any command that calls this function is a "kill command".
  24639. +If the previous command was also a kill command,
  24640. +the text killed this time appends to the text killed last time
  24641. +to make one entry in the kill ring.Fcopy-region-as-kill
  24642. +Save the region as if killed, but don't kill it.
  24643. +If `interprogram-cut-function' is non-nil, also save the text for a window
  24644. +system cut and paste.Fkill-ring-save
  24645. +Save the region as if killed, but don't kill it.
  24646. +This command is similar to `copy-region-as-kill', except that it gives
  24647. +visual feedback indicating the extent of the region being copied.
  24648. +If `interprogram-cut-function' is non-nil, also save the text for a window
  24649. +system cut and paste.Fappend-next-kill
  24650. +Cause following command, if it kills, to append to previous kill.Fyank-pop
  24651. +Replace just-yanked stretch of killed text with a different stretch.
  24652. +This command is allowed only immediately after a `yank' or a `yank-pop'.
  24653. +At such a time, the region contains a stretch of reinserted
  24654. +previously-killed text.  `yank-pop' deletes that text and inserts in its
  24655. +place a different stretch of killed text.
  24656. +
  24657. +With no argument, the previous kill is inserted.
  24658. +With argument N, insert the Nth previous kill.
  24659. +If N is negative, this is a more recent kill.
  24660. +
  24661. +The sequence of kills wraps around, so that after the oldest one
  24662. +comes the newest one.Fyank
  24663. +Reinsert the last stretch of killed text.
  24664. +More precisely, reinsert the stretch of killed text most recently
  24665. +killed OR yanked.  Put point at end, and set mark at beginning.
  24666. +With just C-u as argument, same but put point at beginning (and mark at end).
  24667. +With argument N, reinsert the Nth most recently killed stretch of killed
  24668. +text.
  24669. +See also the command \[yank-pop].Frotate-yank-pointer
  24670. +Rotate the yanking point in the kill ring.
  24671. +With argument, rotate that many kills forward (or backward, if negative).Finsert-buffer
  24672. +Insert after point the contents of BUFFER.
  24673. +Puts mark after the inserted text.
  24674. +BUFFER may be a buffer or a buffer name.Fappend-to-buffer
  24675. +Append to specified buffer the text of the region.
  24676. +It is inserted into that buffer before its point.
  24677. +
  24678. +When calling from a program, give three arguments:
  24679. +BUFFER (or buffer name), START and END.
  24680. +START and END specify the portion of the current buffer to be copied.Fprepend-to-buffer
  24681. +Prepend to specified buffer the text of the region.
  24682. +It is inserted into that buffer after its point.
  24683. +
  24684. +When calling from a program, give three arguments:
  24685. +BUFFER (or buffer name), START and END.
  24686. +START and END specify the portion of the current buffer to be copied.Fcopy-to-buffer
  24687. +Copy to specified buffer the text of the region.
  24688. +It is inserted into that buffer, replacing existing text there.
  24689. +
  24690. +When calling from a program, give three arguments:
  24691. +BUFFER (or buffer name), START and END.
  24692. +START and END specify the portion of the current buffer to be copied.Vmark-even-if-inactive
  24693. +*Non-nil means you can use the mark even when inactive.
  24694. +This option makes a difference in Transient Mark mode.
  24695. +When the option is non-nil, deactivation of the mark
  24696. +turns off region highlighting, but commands that use the mark
  24697. +behave as if the mark were still active.Fmark
  24698. +Return this buffer's mark value as integer; error if mark inactive.
  24699. +If optional argument FORCE is non-nil, access the mark value
  24700. +even if the mark is not currently active, and return nil
  24701. +if there is no mark at all.
  24702. +
  24703. +If you are using this in an editing command, you are most likely making
  24704. +a mistake; see the documentation of `set-mark'.Fdeactivate-mark
  24705. +Deactivate the mark by setting `mark-active' to nil.
  24706. +(That makes a difference only in Transient Mark mode.)
  24707. +Also runs the hook `deactivate-mark-hook'.Fset-mark
  24708. +Set this buffer's mark to POS.  Don't use this function!
  24709. +That is to say, don't use this function unless you want
  24710. +the user to see that the mark has moved, and you want the previous
  24711. +mark position to be lost.
  24712. +
  24713. +Normally, when a new mark is set, the old one should go on the stack.
  24714. +This is why most applications should use push-mark, not set-mark.
  24715. +
  24716. +Novice Emacs Lisp programmers often try to use the mark for the wrong
  24717. +purposes.  The mark saves a location for the user's convenience.
  24718. +Most editing commands should not alter the mark.
  24719. +To remember a location for internal use in the Lisp program,
  24720. +store it in a Lisp variable.  Example:
  24721. +
  24722. +   (let ((beg (point))) (forward-line 1) (delete-region beg (point))).Vmark-ring
  24723. +The list of former marks of the current buffer, most recent first.Vmark-ring-max
  24724. +*Maximum size of mark ring.  Start discarding off end if gets this big.Vglobal-mark-ring
  24725. +The list of saved global marks, most recent first.Vglobal-mark-ring-max
  24726. +*Maximum size of global mark ring.  Start discarding off end if gets this big.Fset-mark-command
  24727. +Set mark at where point is, or jump to mark.
  24728. +With no prefix argument, set mark, push old mark position on local mark
  24729. +ring, and push mark on global mark ring.
  24730. +With argument, jump to mark, and pop a new position for mark off the ring
  24731. +(does not affect global mark ring).
  24732. +
  24733. +Novice Emacs Lisp programmers often try to use the mark for the wrong
  24734. +purposes.  See the documentation of `set-mark' for more information.Fpush-mark
  24735. +Set mark at LOCATION (point, by default) and push old mark on mark ring.
  24736. +If the last global mark pushed was not in the current buffer,
  24737. +also push LOCATION on the global mark ring.
  24738. +Display `Mark set' unless the optional second arg NOMSG is non-nil.
  24739. +In Transient Mark mode, activate mark if optional third arg ACTIVATE non-nil.
  24740. +
  24741. +Novice Emacs Lisp programmers often try to use the mark for the wrong
  24742. +purposes.  See the documentation of `set-mark' for more information.
  24743. +
  24744. +In Transient Mark mode, this does not activate the mark.Fpop-mark
  24745. +Pop off mark ring into the buffer's actual mark.
  24746. +Does not set point.  Does nothing if mark ring is empty.Fexchange-point-and-mark
  24747. +Put the mark where point is now, and point where the mark is now.
  24748. +This command works even when the mark is not active,
  24749. +and it reactivates the mark.Ftransient-mark-mode
  24750. +Toggle Transient Mark mode.
  24751. +With arg, turn Transient Mark mode on if arg is positive, off otherwise.
  24752. +
  24753. +In Transient Mark mode, when the mark is active, the region is highlighted.
  24754. +Changing the buffer "deactivates" the mark.
  24755. +So do certain other operations that set the mark
  24756. +but whose main purpose is something else--for example,
  24757. +incremental search, \[beginning-of-buffer], and \[end-of-buffer].Fpop-global-mark
  24758. +Pop off global mark ring and jump to the top location.Vnext-line-add-newlines
  24759. +*If non-nil, `next-line' inserts newline to avoid `end of buffer' error.Fnext-line
  24760. +Move cursor vertically down ARG lines.
  24761. +If there is no character in the target line exactly under the current column,
  24762. +the cursor is positioned after the character in that line which spans this
  24763. +column, or at the end of the line if it is not long enough.
  24764. +If there is no line in the buffer after this one, behavior depends on the
  24765. +value of next-line-add-newlines.  If non-nil, a newline character is inserted
  24766. +to create a line and the cursor moves to that line, otherwise the cursor is
  24767. +moved to the end of the buffer (if already at the end of the buffer, an error
  24768. +is signaled).
  24769. +
  24770. +The command \[set-goal-column] can be used to create
  24771. +a semipermanent goal column to which this command always moves.
  24772. +Then it does not try to move vertically.  This goal column is stored
  24773. +in `goal-column', which is nil when there is none.
  24774. +
  24775. +If you are thinking of using this in a Lisp program, consider
  24776. +using `forward-line' instead.  It is usually easier to use
  24777. +and more reliable (no dependence on goal column, etc.).Fprevious-line
  24778. +Move cursor vertically up ARG lines.
  24779. +If there is no character in the target line exactly over the current column,
  24780. +the cursor is positioned after the character in that line which spans this
  24781. +column, or at the end of the line if it is not long enough.
  24782. +
  24783. +The command \[set-goal-column] can be used to create
  24784. +a semipermanent goal column to which this command always moves.
  24785. +Then it does not try to move vertically.
  24786. +
  24787. +If you are thinking of using this in a Lisp program, consider using
  24788. +`forward-line' with a negative argument instead.  It is usually easier
  24789. +to use and more reliable (no dependence on goal column, etc.).Vtrack-eol
  24790. +*Non-nil means vertical motion starting at end of line keeps to ends of lines.
  24791. +This means moving to the end of each line moved onto.
  24792. +The beginning of a blank line does not count as the end of a line.Vgoal-column
  24793. +*Semipermanent goal column for vertical motion, as set by \[set-goal-column], or nil.Vtemporary-goal-column
  24794. +Current goal column for vertical motion.
  24795. +It is the column where point was
  24796. +at the start of current run of vertical motion commands.
  24797. +When the `track-eol' feature is doing its job, the value is 9999.Fset-goal-column
  24798. +Set the current horizontal position as a goal for \[next-line] and \[previous-line].
  24799. +Those commands will move to this position in the line moved to
  24800. +rather than trying to keep the same horizontal position.
  24801. +With a non-nil argument, clears out the goal column
  24802. +so that \[next-line] and \[previous-line] resume vertical motion.
  24803. +The goal column is stored in the variable `goal-column'.Vhscroll-step
  24804. +*The number of columns to try scrolling a window by when point moves out.
  24805. +If that fails to bring point back on frame, point is centered instead.
  24806. +If this is zero, point is always centered after it moves off frame.Fhscroll-point-visible
  24807. +Scrolls the selected window horizontally to make point visible.Fscroll-other-window-down
  24808. +Scroll the "other window" down.Fbeginning-of-buffer-other-window
  24809. +Move point to the beginning of the buffer in the other window.
  24810. +Leave mark at previous position.
  24811. +With arg N, put point N/10 of the way from the true beginning.Fend-of-buffer-other-window
  24812. +Move point to the end of the buffer in the other window.
  24813. +Leave mark at previous position.
  24814. +With arg N, put point N/10 of the way from the true end.Ftranspose-chars
  24815. +Interchange characters around point, moving forward one character.
  24816. +With prefix arg ARG, effect is to take character before point
  24817. +and drag it forward past ARG other characters (backward if ARG negative).
  24818. +If no argument and at end of line, the previous two chars are exchanged.Ftranspose-words
  24819. +Interchange words around point, leaving point at end of them.
  24820. +With prefix arg ARG, effect is to take word before or around point
  24821. +and drag it forward past ARG other words (backward if ARG negative).
  24822. +If ARG is zero, the words around or after point and around or after mark
  24823. +are interchanged.Ftranspose-sexps
  24824. +Like \[transpose-words] but applies to sexps.
  24825. +Does not work on a sexp that point is in the middle of
  24826. +if it is a list or string.Ftranspose-lines
  24827. +Exchange current line and previous line, leaving point after both.
  24828. +With argument ARG, takes previous line and moves it past ARG lines.
  24829. +With argument 0, interchanges line point is in with line mark is in.Vcomment-column
  24830. +*Column to indent right-margin comments to.
  24831. +Setting this variable automatically makes it local to the current buffer.
  24832. +Each mode establishes a different default value for this variable; you
  24833. +can set the value for a particular mode using that mode's hook.Vcomment-start
  24834. +*String to insert to start a new comment, or nil if no comment syntax defined.Vcomment-start-skip
  24835. +*Regexp to match the start of a comment plus everything up to its body.
  24836. +If there are any \(...\) pairs, the comment delimiter text is held to begin
  24837. +at the place matched by the close of the first pair.Vcomment-end
  24838. +*String to insert to end a new comment.
  24839. +Should be an empty string if comments are terminated by end-of-line.Vcomment-indent-hook
  24840. +Obsolete variable for function to compute desired indentation for a comment.
  24841. +This function is called with no args with point at the beginning of
  24842. +the comment's starting delimiter.Vcomment-indent-function
  24843. +Function to compute desired indentation for a comment.
  24844. +This function is called with no args with point at the beginning of
  24845. +the comment's starting delimiter.Findent-for-comment
  24846. +Indent this line's comment to comment column, or insert an empty comment.Fset-comment-column
  24847. +Set the comment column based on point.
  24848. +With no arg, set the comment column to the current column.
  24849. +With just minus as arg, kill any comment on this line.
  24850. +With any other arg, set comment column to indentation of the previous comment
  24851. + and then align or create a comment on this line at that column.Fkill-comment
  24852. +Kill the comment on this line, if any.
  24853. +With argument, kill comments on that many lines starting with this one.Fcomment-region
  24854. +Comment or uncomment each line in the region.
  24855. +With just C-u prefix arg, uncomment each line in region.
  24856. +Numeric prefix arg ARG means use ARG comment characters.
  24857. +If ARG is negative, delete that many comment characters instead.
  24858. +Comments are terminated on each line, even for syntax in which newline does
  24859. +not end the comment.  Blank lines do not get comments.Fbackward-word
  24860. +Move backward until encountering the end of a word.
  24861. +With argument, do this that many times.
  24862. +In programs, it is faster to call `forward-word' with negative arg.Fmark-word
  24863. +Set mark arg words away from point.Fkill-word
  24864. +Kill characters forward until encountering the end of a word.
  24865. +With argument, do this that many times.Fbackward-kill-word
  24866. +Kill characters backward until encountering the end of a word.
  24867. +With argument, do this that many times.Fcurrent-word
  24868. +Return the word point is on (or a nearby word) as a string.
  24869. +If optional arg STRICT is non-nil, return nil unless point is within
  24870. +or adjacent to a word.Vfill-prefix
  24871. +*String for filling to insert at front of new line, or nil for none.
  24872. +Setting this variable automatically makes it local to the current buffer.Vauto-fill-inhibit-regexp
  24873. +*Regexp to match lines which should not be auto-filled.Fauto-fill-mode
  24874. +Toggle auto-fill mode.
  24875. +With arg, turn Auto-Fill mode on if and only if arg is positive.
  24876. +In Auto-Fill mode, inserting a space at a column beyond `fill-column'
  24877. +automatically breaks the line at a previous space.Fauto-fill-function
  24878. +Automatically break line at a previous space, in insertion of text.Fturn-on-auto-fill
  24879. +Unconditionally turn on Auto Fill mode.Fset-fill-column
  24880. +Set `fill-column' to current column, or to argument if given.
  24881. +The variable `fill-column' has a separate value for each buffer.Vcomment-multi-line
  24882. +*Non-nil means \[indent-new-comment-line] should continue same comment
  24883. +on new line, with no new terminator or starter.
  24884. +This is obsolete because you might as well use \[newline-and-indent].Findent-new-comment-line
  24885. +Break line at point and indent, continuing comment if within one.
  24886. +This indents the body of the continued comment
  24887. +under the previous comment line.
  24888. +
  24889. +This command is intended for styles where you write a comment per line,
  24890. +starting a new comment (and terminating it if necessary) on each line.
  24891. +If you want to continue one comment across several lines, use \[newline-and-indent].Fset-selective-display
  24892. +Set `selective-display' to ARG; clear it if no arg.
  24893. +When the value of `selective-display' is a number > 0,
  24894. +lines whose indentation is >= that value are not displayed.
  24895. +The variable `selective-display' has a separate value for each buffer.Voverwrite-mode-textual
  24896. +The string displayed in the mode line when in overwrite mode.Voverwrite-mode-binary
  24897. +The string displayed in the mode line when in binary overwrite mode.Foverwrite-mode
  24898. +Toggle overwrite mode.
  24899. +With arg, turn overwrite mode on iff arg is positive.
  24900. +In overwrite mode, printing characters typed in replace existing text
  24901. +on a one-for-one basis, rather than pushing it to the right.  At the
  24902. +end of a line, such characters extend the line.  Before a tab,
  24903. +such characters insert until the tab is filled in.
  24904. +\[quoted-insert] still inserts characters in overwrite mode; this
  24905. +is supposed to make it easier to insert characters when necessary.Fbinary-overwrite-mode
  24906. +Toggle binary overwrite mode.
  24907. +With arg, turn binary overwrite mode on iff arg is positive.
  24908. +In binary overwrite mode, printing characters typed in replace
  24909. +existing text.  Newlines are not treated specially, so typing at the
  24910. +end of a line joins the line to the next, with the typed character
  24911. +between them.  Typing before a tab character simply replaces the tab
  24912. +with the character typed.
  24913. +\[quoted-insert] replaces the text at the cursor, just as ordinary
  24914. +typing characters do.
  24915. +
  24916. +Note that binary overwrite mode is not its own minor mode; it is a
  24917. +specialization of overwrite-mode, entered by setting the
  24918. +`overwrite-mode' variable to `overwrite-mode-binary'.Vline-number-mode
  24919. +*Non-nil means display line number in mode line.Fline-number-mode
  24920. +Toggle Line Number mode.
  24921. +With arg, turn Line Number mode on iff arg is positive.
  24922. +When Line Number mode is enabled, the line number appears
  24923. +in the mode line.Vblink-matching-paren
  24924. +*Non-nil means show matching open-paren when close-paren is inserted.Vblink-matching-paren-distance
  24925. +*If non-nil, is maximum distance to search for matching open-paren.Fblink-matching-open
  24926. +Move cursor momentarily to the beginning of the sexp before point.Fkeyboard-quit
  24927. +Signal a  quit  condition.
  24928. +During execution of Lisp code, this character causes a quit directly.
  24929. +At top-level, as an editor command, this simply beeps.Fset-variable
  24930. +Set VARIABLE to VALUE.  VALUE is a Lisp object.
  24931. +When using this interactively, supply a Lisp expression for VALUE.
  24932. +If you want VALUE to be a string, you must surround it with doublequotes.
  24933. +
  24934. +If VARIABLE has a `variable-interactive' property, that is used as if
  24935. +it were the arg to `interactive' (which see) to interactively read the value.Fchoose-completion
  24936. +Choose the completion that point is in or next to.Fcompletion-list-mode
  24937. +Major mode for buffers showing lists of possible completions.
  24938. +Type \<completion-list-mode-map>\[choose-completion] in the completion list to select the completion near point.
  24939. +Use \<completion-list-mode-map>\[mouse-choose-completion] to select one with the mouse.Vcommand-line-processed
  24940. +t once command line has been processedVinhibit-startup-message
  24941. +*Non-nil inhibits the initial startup message.
  24942. +This is for use in your personal init file, once you are familiar
  24943. +with the contents of the startup message.Vinhibit-startup-echo-area-message
  24944. +*Non-nil inhibits the initial startup echo area message.
  24945. +Inhibition takes effect only if your `.emacs' file contains
  24946. +a line of this form:
  24947. + (setq inhibit-startup-echo-area-message "YOUR-USER-NAME")
  24948. +If your `.emacs' file is byte-compiled, use the following form instead:
  24949. + (eval '(setq inhibit-startup-echo-area-message "YOUR-USER-NAME"))
  24950. +Thus, someone else using a copy of your `.emacs' file will see
  24951. +the startup message unless he personally acts to inhibit it.Vinhibit-default-init
  24952. +*Non-nil inhibits loading the `default' library.Vcommand-switch-alist
  24953. +Alist of command-line switches.
  24954. +Elements look like (SWITCH-STRING . HANDLER-FUNCTION).
  24955. +HANDLER-FUNCTION receives switch name as sole arg;
  24956. +remaining command-line args are in the variable `command-line-args-left'.Vcommand-line-args-left
  24957. +List of command-line args not yet processed.Vcommand-line-functions
  24958. +List of functions to process unrecognized command-line arguments.
  24959. +Each function should access the dynamically bound variables
  24960. +`argi' (the current argument) and `command-line-args-left' (the remaining
  24961. +arguments).  The function should return non-nil only if it recognizes and
  24962. +processes `argi'.  If it does so, it may consume successive arguments by
  24963. +altering `command-line-args-left' to remove them.Vcommand-line-default-directory
  24964. +Default directory to use for command line arguments.
  24965. +This is normally copied from `default-directory' when Emacs starts.Vbefore-init-hook
  24966. +Functions to call after handling urgent options but before init files.
  24967. +The frame system uses this to open frames to display messages while
  24968. +Emacs loads the user's initialization file.Vafter-init-hook
  24969. +Functions to call after loading the init file (`~/.emacs').
  24970. +The call is not protected by a condition-case, so you can set `debug-on-error'
  24971. +in `.emacs', and put all the actual code on `after-init-hook'.Vterm-setup-hook
  24972. +Functions to be called after loading terminal-specific Lisp code.
  24973. +See `run-hooks'.  This variable exists for users to set,
  24974. +so as to override the definitions made by the terminal-specific file.
  24975. +Emacs never sets this variable itself.Vkeyboard-type
  24976. +The brand of keyboard you are using.
  24977. +This variable is used to define
  24978. +the proper function and keypad keys for use under X.  It is used in a
  24979. +fashion analogous to the environment value TERM.Vwindow-setup-hook
  24980. +Normal hook run to initialize window system display.
  24981. +Emacs runs this hook after processing the command line arguments and loading
  24982. +the user's init file.Vinitial-major-mode
  24983. +Major mode command symbol to use for the initial *scratch* buffer.Vinit-file-user
  24984. +Identity of user whose `.emacs' file is or was read.
  24985. +The value is nil if no init file is being used; otherwise, it may be either
  24986. +the null string, meaning that the init file was taken from the user that
  24987. +originally logged in, or it may be a string containing a user's name.
  24988. +
  24989. +In either of the latter cases, `(concat "~" init-file-user "/")'
  24990. +evaluates to the name of the directory where the `.emacs' file was
  24991. +looked for.Vsite-run-file
  24992. +File containing site-wide run-time initializations.
  24993. +This file is loaded at run-time before `~/.emacs'.  It contains inits
  24994. +that need to be in place for the entire site, but which, due to their
  24995. +higher incidence of change, don't make sense to load into emacs'
  24996. +dumped image.  Thus, the run-time load order is: 1. file described in
  24997. +this variable, if non-nil; 2. `~/.emacs'; 3. `default.el'.Viso-8859-1-locale-regexp
  24998. +Regexp that specifies when to enable the ISO 8859-1 character set.
  24999. +We do that if this regexp matches the locale name
  25000. +specified by the LC_ALL, LC_CTYPE and LANG environment variables.Vuser-mail-address
  25001. +Full mailing address of this user.Flambda
  25002. +Return a lambda expression.
  25003. +A call of the form (lambda ARGS DOCSTRING INTERACTIVE BODY) is
  25004. +self-quoting; the result of evaluating the lambda expression is the
  25005. +expression itself.  The lambda expression may then be treated as a
  25006. +function, i. e. stored as the function value of a symbol, passed to
  25007. +funcall or mapcar, etcetera.
  25008. +ARGS should take the same form as an argument list for a `defun'.
  25009. +DOCSTRING should be a string, as described for `defun'.  It may be omitted.
  25010. +INTERACTIVE should be a call to the function `interactive', which see.
  25011. +It may also be omitted.
  25012. +BODY should be a list of lisp expressions.Fone-window-p
  25013. +Returns non-nil if the selected window is the only window (in its frame).
  25014. +Optional arg NOMINI non-nil means don't count the minibuffer
  25015. +even if it is active.
  25016. +
  25017. +The optional arg ALL-FRAMES t means count windows on all frames.
  25018. +If it is `visible', count windows on all visible frames.
  25019. +ALL-FRAMES nil or omitted means count only the selected frame, 
  25020. +plus the minibuffer it uses (which may be on another frame).
  25021. +If ALL-FRAMES is neither nil nor t, count only the selected frame.Fwalk-windows
  25022. +Cycle through all visible windows, calling PROC for each one.
  25023. +PROC is called with a window as argument.
  25024. +Optional second arg MINIBUF t means count the minibuffer window
  25025. +even if not active.  If MINIBUF is neither t nor nil it means
  25026. +not to count the minibuffer even if it is active.
  25027. +
  25028. +Optional third arg ALL-FRAMES, if t, means include all frames.
  25029. +ALL-FRAMES nil or omitted means cycle within the selected frame,
  25030. +but include the minibuffer window (if MINIBUF says so) that that
  25031. +frame uses, even if it is on another frame.
  25032. +If ALL-FRAMES is neither nil nor t, stick strictly to the selected frame.Fminibuffer-window-active-p
  25033. +Return t if WINDOW (a minibuffer window) is now active.Fsuppress-keymap
  25034. +Make MAP override all normally self-inserting keys to be undefined.
  25035. +Normally, as an exception, digits and minus-sign are set to make prefix args,
  25036. +but optional second arg NODIGITS non-nil treats them like other chars.Vkey-substitution-in-progress
  25037. +Used internally by substitute-key-definition.Fsubstitute-key-definition
  25038. +Replace OLDDEF with NEWDEF for any keys in KEYMAP now defined as OLDDEF.
  25039. +In other words, OLDDEF is replaced with NEWDEF where ever it appears.
  25040. +If optional fourth argument OLDMAP is specified, we redefine
  25041. +in KEYMAP as NEWDEF those chars which are defined as OLDDEF in OLDMAP.Fdefine-key-after
  25042. +Add binding in KEYMAP for KEY => DEFINITION, right after AFTER's binding.
  25043. +This is like `define-key' except that the binding for KEY is placed
  25044. +just after the binding for the event AFTER, instead of at the beginning
  25045. +of the map.
  25046. +The order matters when the keymap is used as a menu.
  25047. +KEY must contain just one event type--that is to say, it must be
  25048. +a string or vector of length 1.Fkeyboard-translate
  25049. +Translate character FROM to TO at a low level.
  25050. +This function creates a `keyboard-translate-table' if necessary
  25051. +and then modifies one entry in it.Vglobal-map
  25052. +Default global keymap mapping Emacs keyboard input into commands.
  25053. +The value is a keymap which is usually (but not necessarily) Emacs's
  25054. +global map.Vesc-map
  25055. +Default keymap for ESC (meta) commands.
  25056. +The normal global definition of the character ESC indirects to this keymap.Vctl-x-map
  25057. +Default keymap for C-x commands.
  25058. +The normal global definition of the character C-x indirects to this keymap.Vctl-x-4-map
  25059. +Keymap for subcommands of C-x 4Vctl-x-5-map
  25060. +Keymap for frame commands.Flistify-key-sequence
  25061. +Convert a key sequence to a list of events.Feventp
  25062. +True if the argument is an event object.Fevent-modifiers
  25063. +Returns a list of symbols representing the modifier keys in event EVENT.
  25064. +The elements of the list may include `meta', `control',
  25065. +`shift', `hyper', `super', `alt', `click', `double', `triple', `drag',
  25066. +and `down'.Fevent-basic-type
  25067. +Returns the basic type of the given event (all modifiers removed).
  25068. +The value is an ASCII printing character (not upper case) or a symbol.Fmouse-movement-p
  25069. +Return non-nil if OBJECT is a mouse movement event.Fevent-start
  25070. +Return the starting position of EVENT.
  25071. +If EVENT is a mouse press or a mouse click, this returns the location
  25072. +of the event.
  25073. +If EVENT is a drag, this returns the drag's starting position.
  25074. +The return value is of the form
  25075. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  25076. +The `posn-' functions access elements of such lists.Fevent-end
  25077. +Return the ending location of EVENT.  EVENT should be a click or drag event.
  25078. +If EVENT is a click event, this function is the same as `event-start'.
  25079. +The return value is of the form
  25080. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  25081. +The `posn-' functions access elements of such lists.Fevent-click-count
  25082. +Return the multi-click count of EVENT, a click or drag event.
  25083. +The return value is a positive integer.Fposn-window
  25084. +Return the window in POSITION.
  25085. +POSITION should be a list of the form
  25086. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  25087. +as returned by the `event-start' and `event-end' functions.Fposn-point
  25088. +Return the buffer location in POSITION.
  25089. +POSITION should be a list of the form
  25090. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  25091. +as returned by the `event-start' and `event-end' functions.Fposn-x-y
  25092. +Return the x and y coordinates in POSITION.
  25093. +POSITION should be a list of the form
  25094. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  25095. +as returned by the `event-start' and `event-end' functions.Fposn-col-row
  25096. +Return the column and row in POSITION, measured in characters.
  25097. +POSITION should be a list of the form
  25098. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  25099. +as returned by the `event-start' and `event-end' functions.
  25100. +For a scroll-bar event, the result column is 0, and the row
  25101. +corresponds to the vertical position of the click in the scroll bar.Fposn-timestamp
  25102. +Return the timestamp of POSITION.
  25103. +POSITION should be a list of the form
  25104. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  25105. +as returned by the `event-start' and `event-end' functions.Fbaud-rate
  25106. +Obsolete function returning the value of the `baud-rate' variable.
  25107. +Please convert your programs to use the variable `baud-rate' directly.Frun-hooks
  25108. +Takes hook names and runs each one in turn.  Major mode functions use this.
  25109. +Each argument should be a symbol, a hook variable.
  25110. +These symbols are processed in the order specified.
  25111. +If a hook symbol has a non-nil value, that value may be a function
  25112. +or a list of functions to be called to run the hook.
  25113. +If the value is a function, it is called with no arguments.
  25114. +If it is a list, the elements are called, in order, with no arguments.Frun-hook-with-args
  25115. +Run HOOK with the specified arguments ARGS.
  25116. +HOOK should be a symbol, a hook variable.  If HOOK has a non-nil
  25117. +value, that value may be a function or a list of functions to be
  25118. +called to run the hook.  If the value is a function, it is called with
  25119. +the given arguments and its return value is returned.  If it is a list
  25120. +of functions, those functions are called, in order,
  25121. +with the given arguments ARGS.
  25122. +It is best not to depend on the value return by `run-hook-with-args',
  25123. +as that may change.Vrun-hooks
  25124. +Variable by which C primitives find the function `run-hooks'.
  25125. +Don't change it.Fadd-hook
  25126. +Add to the value of HOOK the function FUNCTION.
  25127. +FUNCTION is not added if already present.
  25128. +FUNCTION is added (if necessary) at the beginning of the hook list
  25129. +unless the optional argument APPEND is non-nil, in which case
  25130. +FUNCTION is added at the end.
  25131. +
  25132. +HOOK should be a symbol, and FUNCTION may be any valid function.  If
  25133. +HOOK is void, it is first set to nil.  If HOOK's value is a single
  25134. +function, it is changed to a list of functions.Fremove-hook
  25135. +Remove from the value of HOOK the function FUNCTION.
  25136. +HOOK should be a symbol, and FUNCTION may be any valid function.  If
  25137. +FUNCTION isn't the value of HOOK, or, if FUNCTION doesn't appear in the
  25138. +list of hooks to run in HOOK, then nothing is done.  See `add-hook'.Feval-after-load
  25139. +Arrange that, if FILE is ever loaded, FORM will be run at that time.
  25140. +This makes or adds to an entry on `after-load-alist'.
  25141. +It does nothing if FORM is already on the list for FILE.
  25142. +FILE should be the name of a library, with no directory name.Feval-next-after-load
  25143. +Read the following input sexp, and run it whenever FILE is loaded.
  25144. +This makes or adds to an entry on `after-load-alist'.
  25145. +FILE should be the name of a library, with no directory name.Fread-quoted-char
  25146. +Like `read-char', except that if the first character read is an octal
  25147. +digit, we read up to two more octal digits and return the character
  25148. +represented by the octal number consisting of those digits.
  25149. +Optional argument PROMPT specifies a string to use to prompt the user.Fforce-mode-line-update
  25150. +Force the mode-line of the current buffer to be redisplayed.
  25151. +With optional non-nil ALL, force redisplay of all mode-lines.Fmomentary-string-display
  25152. +Momentarily display STRING in the buffer at POS.
  25153. +Display remains until next character is typed.
  25154. +If the char is EXIT-CHAR (optional third arg, default is SPC) it is swallowed;
  25155. +otherwise it is then available as input (as a command if nothing else).
  25156. +Display MESSAGE (optional fourth arg) in the echo area.
  25157. +If MESSAGE is nil, instructions to type EXIT-CHAR are displayed there.Fignore
  25158. +Do nothing and return nil.
  25159. +This function accepts any number of arguments, but ignores them.Ferror
  25160. +Signal an error, making error message by passing all args to `format'.Fstart-process-shell-command
  25161. +Start a program in a subprocess.  Return the process object for it.
  25162. +Args are NAME BUFFER COMMAND &rest COMMAND-ARGS.
  25163. +NAME is name for process.  It is modified if necessary to make it unique.
  25164. +BUFFER is the buffer or (buffer-name) to associate with the process.
  25165. + Process output goes at end of that buffer, unless you specify
  25166. + an output stream or filter function to handle the output.
  25167. + BUFFER may be also nil, meaning that this process is not associated
  25168. + with any buffer
  25169. +Third arg is command name, the name of a shell command.
  25170. +Remaining arguments are the arguments for the command.
  25171. +Wildcards and redirection are handled as usual in the shell.Fsave-match-data
  25172. +Execute the BODY forms, restoring the global value of the match data.Fshell-quote-argument
  25173. +Quote an argument for passing as argument to an inferior shell.Fmake-syntax-table
  25174. +Return a new syntax table.
  25175. +It inherits all letters and control characters from the standard
  25176. +syntax table; other characters are copied from the standard syntax table.Vtext-mode-syntax-table
  25177. +Syntax table used while in text mode.Vtext-mode-abbrev-table
  25178. +Abbrev table used while in text mode.Vtext-mode-map
  25179. +Keymap for Text mode.
  25180. +Many other modes, such as Mail mode, Outline mode and Indented Text mode,
  25181. +inherit all the commands defined in this map.Ftext-mode
  25182. +Major mode for editing text intended for humans to read.
  25183. +Special commands:
  25184. +\{text-mode-map}
  25185. +Turning on Text mode calls the value of the variable `text-mode-hook',
  25186. +if that value is non-nil.Vindented-text-mode-map
  25187. +Keymap for Indented Text mode.
  25188. +All the commands defined in Text mode are inherited unless overridden.Findented-text-mode
  25189. +Major mode for editing text with indented paragraphs.
  25190. +In this mode, paragraphs are delimited only by blank lines.
  25191. +You can thus get the benefit of adaptive filling
  25192. + (see the variable `adaptive-fill-mode').
  25193. +\{indented-text-mode-map}
  25194. +Turning on `indented-text-mode' calls the value of the variable
  25195. +`text-mode-hook', if that value is non-nil.Fcenter-paragraph
  25196. +Center each nonblank line in the paragraph at or after point.
  25197. +See `center-line' for more info.Fcenter-region
  25198. +Center each nonblank line starting in the region.
  25199. +See `center-line' for more info.Fcenter-line
  25200. +Center the line point is on, within the width specified by `fill-column'.
  25201. +This means adjusting the indentation so that it equals
  25202. +the distance between the end of the text and `fill-column'.Vvc-master-templates
  25203. +*Where to look for version-control master files.
  25204. +The first pair corresponding to a given back end is used as a template
  25205. +when creating new masters.Vvc-make-backup-files
  25206. +*If non-nil, backups of registered files are made as with other files.
  25207. +If nil (the default), files covered by version control don't get backups.Vvc-rcs-status
  25208. +*If non-nil, revision and locks on RCS working file displayed in modeline.
  25209. +Otherwise, not displayed.Vvc-file-prop-obarray
  25210. +Obarray for per-file properties.Fvc-name
  25211. +Return the master name of a file, nil if it is not registered.Fvc-backend-deduce
  25212. +Return the version-control type of a file, nil if it is not registered.Fvc-toggle-read-only
  25213. +Change read-only status of current buffer, perhaps via version control.
  25214. +If the buffer is visiting a file registered with version control,
  25215. +then check the file in or out.  Otherwise, just change the read-only flag
  25216. +of the buffer.Fvc-mode-line
  25217. +Set `vc-mode' to display type of version control for FILE.
  25218. +The value is set in the current buffer, which should be the buffer
  25219. +visiting FILE.Fvc-file-not-found-hook
  25220. +When file is not found, try to check it out from RCS or SCCS.
  25221. +Returns t if checkout was successful, nil otherwise.Fcount-windows
  25222. +Returns the number of visible windows.
  25223. +Optional arg NO-MINI non-nil means don't count the minibuffer
  25224. +even if it is active.Fbalance-windows
  25225. +Makes all visible windows the same height (approximately).Vsplit-window-keep-point
  25226. +*If non-nil, split windows keeps the original point in both children.
  25227. +This is often more convenient for editing.
  25228. +If nil, adjust point in each of the two windows to minimize redisplay.
  25229. +This is convenient on slow terminals, but point can move strangely.Fsplit-window-vertically
  25230. +Split current window into two windows, one above the other.
  25231. +The uppermost window gets ARG lines and the other gets the rest.
  25232. +Negative arg means select the size of the lowermost window instead.
  25233. +With no argument, split equally or close to it.
  25234. +Both windows display the same buffer now current.
  25235. +
  25236. +If the variable split-window-keep-point is non-nil, both new windows
  25237. +will get the same value of point as the current window.  This is often
  25238. +more convenient for editing.
  25239. +
  25240. +Otherwise, we chose window starts so as to minimize the amount of
  25241. +redisplay; this is convenient on slow terminals.  The new selected
  25242. +window is the one that the current value of point appears in.  The
  25243. +value of point can change if the text around point is hidden by the
  25244. +new mode line.Fsplit-window-horizontally
  25245. +Split current window into two windows side by side.
  25246. +This window becomes the leftmost of the two, and gets ARG columns.
  25247. +Negative arg means select the size of the rightmost window instead.
  25248. +No arg means split equally.Fenlarge-window-horizontally
  25249. +Make current window ARG columns wider.Fshrink-window-horizontally
  25250. +Make current window ARG columns narrower.Fshrink-window-if-larger-than-buffer
  25251. +Shrink the WINDOW to be as small as possible to display its contents.
  25252. +Do not shrink to less than `window-min-height' lines.
  25253. +Do nothing if the buffer contains more lines than the present window height,
  25254. +or if some of the window's contents are scrolled out of view,
  25255. +or if the window is not the full width of the frame,
  25256. +or if the window is the only window of its frame.Vemacs-version
  25257. +Version numbers of this version of Emacs.Vemacs-build-time
  25258. +Time at which Emacs was dumped out.Femacs-version
  25259. +Return string describing the version of Emacs that is running.
  25260. +If optional argument HERE is non-nil, insert string at point.
  25261. +Don't use this function in programs to choose actions according
  25262. +to the system configuration; look at `system-configuration' instead.
  25263. \ No newline at end of file
  25264. Binary files baseline/fsf/emacs/etc/EMACS-DATA and amiga/fsf/emacs/etc/EMACS-DATA differ
  25265. diff -ru --new-file baseline/fsf/emacs/lib-src/SCOPTIONS amiga/fsf/emacs/lib-src/SCOPTIONS
  25266. --- baseline/fsf/emacs/lib-src/SCOPTIONS    Wed Dec 31 17:00:00 1969
  25267. +++ amiga/fsf/emacs/lib-src/SCOPTIONS    Sun Oct 15 17:05:54 1995
  25268. @@ -0,0 +1,23 @@
  25269. +MATH=68881
  25270. +CPU=68030
  25271. +ANSI
  25272. +STRINGMERGE
  25273. +UNSIGNEDCHARS
  25274. +NOMULTIPLEINCLUDES
  25275. +SMALLCODE
  25276. +SMALLDATA
  25277. +VERBOSE
  25278. +ADDSYMBOLS
  25279. +NOVERSION
  25280. +STRICT
  25281. +STACKEXTEND
  25282. +NOCONSTLIBBASE
  25283. +COVERAGE
  25284. +NOERRORHIGHLIGHT
  25285. +GENPROTOSTATICS
  25286. +NOGENPROTOTYPEDEFS
  25287. +NOGENPROTODATAITEMS
  25288. +LINKEROPTIONS="bufsize 4096"
  25289. +OPTIMIZERCOMPLEXITY=10
  25290. +OPTIMIZERDEPTH=6
  25291. +OPTIMIZERRECURDEPTH=6
  25292. diff -ru --new-file baseline/fsf/emacs/lib-src/env.c amiga/fsf/emacs/lib-src/env.c
  25293. --- baseline/fsf/emacs/lib-src/env.c    Wed Dec 31 17:00:00 1969
  25294. +++ amiga/fsf/emacs/lib-src/env.c    Sun Oct 15 17:05:56 1995
  25295. @@ -0,0 +1,338 @@
  25296. +/* env - manipulate environment and execute a program in that environment
  25297. +   Copyright (C) 1986 Free Software Foundation, Inc.
  25298. +
  25299. +   This program is free software; you can redistribute it and/or modify
  25300. +   it under the terms of the GNU General Public License as published by
  25301. +   the Free Software Foundation; either version 2, or (at your option)
  25302. +   any later version.
  25303. +
  25304. +   This program is distributed in the hope that it will be useful,
  25305. +   but WITHOUT ANY WARRANTY; without even the implied warranty of
  25306. +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  25307. +   GNU General Public License for more details.
  25308. +
  25309. +   You should have received a copy of the GNU General Public License
  25310. +   along with this program; if not, write to the Free Software
  25311. +   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  25312. +
  25313. +/* Mly 861126 */
  25314. +
  25315. +/* If first argument is "-", then a new environment is constructed
  25316. +   from scratch; otherwise the environment is inherited from the parent
  25317. +   process, except as modified by other options.
  25318. +
  25319. +   So, "env - foo" will invoke the "foo" program in a null environment,
  25320. +   whereas "env foo" would invoke "foo" in the same environment as that
  25321. +   passed to "env" itself.
  25322. +
  25323. +   Subsequent arguments are interpreted as follows:
  25324. +
  25325. +   * "variable=value" (i.e., an arg containing a "=" character)
  25326. +     means to set the specified environment variable to that value.
  25327. +     `value' may be of zero length ("variable=").  Note that setting
  25328. +     a variable to a zero-length value is different from unsetting it.
  25329. +
  25330. +   * "-u variable" or "-unset variable"
  25331. +     means to unset that variable.
  25332. +     If that variable isn't set, does nothing.
  25333. +
  25334. +   * "-s variable value" or "-set variable value"
  25335. +     same as "variable=value".
  25336. +
  25337. +   * "-" or "--"
  25338. +     are used to indicate that the following argument is the program
  25339. +     to invoke.  This is only necessary when the program's name
  25340. +     begins with "-" or contains a "=".
  25341. +
  25342. +   * anything else
  25343. +     The first remaining argument specifies a program to invoke
  25344. +     (it is searched for according to the specification of the PATH
  25345. +     environment variable) and any arguments following that are
  25346. +     passed as arguments to that program.
  25347. +
  25348. +     If no program-name is specified following the environment
  25349. +     specifications, the resulting environment is printed.
  25350. +     This is like specifying a program-name of "printenv".
  25351. +
  25352. +   Examples:
  25353. +     If the environment passed to "env" is
  25354. +     { USER=rms EDITOR=emacs PATH=.:/gnubin:/hacks }
  25355. +
  25356. +     * "env DISPLAY=gnu:0 nemacs"
  25357. +        calls "nemacs" in the environment
  25358. +    { USER=rms EDITOR=emacs PATH=.:/gnubin:/hacks DISPLAY=gnu:0 }
  25359. +
  25360. +     * "env - USER=foo /hacks/hack bar baz"
  25361. +       calls the "hack" program on arguments "bar" and "baz"
  25362. +       in an environment in which the only variable is "USER".
  25363. +       Note that the "-" option clears out the PATH variable,
  25364. +       so one should be careful to specify in which directory
  25365. +       to find the program to call.
  25366. +
  25367. +     * "env -u EDITOR USER=foo PATH=/energy -- e=mc2 bar baz"
  25368. +       The program "/energy/e=mc2" is called with environment
  25369. +       { USER=foo PATH=/energy }
  25370. +*/
  25371. +
  25372. +#ifdef EMACS
  25373. +#define NO_SHORTNAMES
  25374. +#include "../src/config.h"
  25375. +#endif /* EMACS */
  25376. +
  25377. +#include <stdio.h>
  25378. +
  25379. +extern int execvp ();
  25380. +
  25381. +char *xmalloc (), *xrealloc ();
  25382. +char *concat ();
  25383. +
  25384. +extern char **environ;
  25385. +
  25386. +char **nenv;
  25387. +int nenv_size;
  25388. +
  25389. +char *progname;
  25390. +void setenv ();
  25391. +void fatal ();
  25392. +char *myindex ();
  25393. +
  25394. +main (argc, argv, envp)
  25395. +     register int argc;
  25396. +     register char **argv;
  25397. +     char **envp;
  25398. +{
  25399. +  register char *tem;
  25400. +
  25401. +  progname = argv[0];
  25402. +  argc--;
  25403. +  argv++;
  25404. +
  25405. +  nenv_size = 100;
  25406. +  nenv = (char **) xmalloc (nenv_size * sizeof (char *));
  25407. +  *nenv = (char *) 0;
  25408. +
  25409. +  /* "-" flag means to not inherit parent's environment */
  25410. +  if (argc && !strcmp (*argv, "-"))
  25411. +    {
  25412. +      argc--;
  25413. +      argv++;
  25414. +    }
  25415. +  else
  25416. +    /* Else pass on existing env vars. */
  25417. +    for (; *envp; envp++)
  25418. +      {
  25419. +    tem = myindex (*envp, '=');
  25420. +    if (tem)
  25421. +      {
  25422. +        *tem = '\000';
  25423. +        setenv (*envp, tem + 1);
  25424. +      }
  25425. +      }
  25426. +
  25427. +  while (argc > 0)
  25428. +    {
  25429. +      tem = myindex (*argv, '=');
  25430. +      if (tem)
  25431. +    /* If arg contains a "=" it specifies to set a variable */
  25432. +    {
  25433. +      *tem = '\000';
  25434. +      setenv (*argv, tem + 1);
  25435. +      argc--;
  25436. +      argv++;
  25437. +      continue;
  25438. +    }
  25439. +
  25440. +      if (**argv != '-')
  25441. +    /* Remaining args are program name and args to pass it */
  25442. +    break;
  25443. +
  25444. +      if (argc < 2)
  25445. +    fatal ("no argument for `%s' option", *argv);
  25446. +      if (!strcmp (*argv, "-u")
  25447. +      || !strcmp (*argv, "-unset"))
  25448. +    /* Unset a variable */
  25449. +    {
  25450. +      argc--;
  25451. +      argv++;
  25452. +      setenv (*argv, (char *) 0);
  25453. +      argc--;
  25454. +      argv++;
  25455. +    }
  25456. +      else if (!strcmp (*argv, "-s") ||
  25457. +           !strcmp (*argv, "-set"))
  25458. +    /* Set a variable */
  25459. +    {
  25460. +      argc--;
  25461. +      argv++;
  25462. +      tem = *argv;
  25463. +      if (argc < 2)
  25464. +        fatal ("no value specified for variable \"%s\"", tem);
  25465. +      argc--;
  25466. +      argv++;
  25467. +      setenv (tem, *argv);
  25468. +      argc--;
  25469. +      argv++;
  25470. +    }
  25471. +      else if (!strcmp (*argv, "-") || !strcmp (*argv, "--"))
  25472. +    {
  25473. +      argc--;
  25474. +      argv++;
  25475. +      break;
  25476. +    }
  25477. +      else
  25478. +    {
  25479. +      fatal ("unrecognized option `%s'", *argv);
  25480. +    }
  25481. +    }
  25482. +
  25483. +  /* If no program specified print the environment and exit */
  25484. +  if (argc <= 0)
  25485. +    {
  25486. +      while (*nenv)
  25487. +    printf ("%s\n", *nenv++);
  25488. +      exit (0);
  25489. +    }
  25490. +  else
  25491. +    {
  25492. +      extern int errno, sys_nerr;
  25493. +      extern char *sys_errlist[];
  25494. +
  25495. +      environ = nenv;
  25496. +      (void) execvp (*argv, argv);
  25497. +
  25498. +      fprintf (stderr, "%s: cannot execute `%s'", progname, *argv);
  25499. +      if (errno < sys_nerr)
  25500. +    fprintf (stderr, ": %s\n", sys_errlist[errno]);
  25501. +      else
  25502. +    putc ('\n', stderr);
  25503. +      exit (errno != 0 ? errno : 1);
  25504. +    }
  25505. +}
  25506. +
  25507. +void
  25508. +setenv (var, val)
  25509. +     register char *var, *val;
  25510. +{
  25511. +  register char **e;
  25512. +  int len = strlen (var);
  25513. +
  25514. +  {
  25515. +    register char *tem = myindex (var, '=');
  25516. +    if (tem)
  25517. +      fatal ("environment variable names can not contain `=': %s", var);
  25518. +    else if (*var == '\000')
  25519. +      fatal ("zero-length environment variable name specified");
  25520. +  }
  25521. +
  25522. +  for (e = nenv; *e; e++)
  25523. +    if (!strncmp (var, *e, len) && (*e)[len] == '=')
  25524. +      {
  25525. +    if (val)
  25526. +      goto set;
  25527. +    else
  25528. +      do
  25529. +        {
  25530. +          *e = *(e + 1);
  25531. +      } while (*e++);
  25532. +    return;
  25533. +      }
  25534. +
  25535. +  if (!val)
  25536. +    return;            /* Nothing to unset */
  25537. +
  25538. +  len = e - nenv;
  25539. +  if (len + 1 >= nenv_size)
  25540. +    {
  25541. +      nenv_size += 100;
  25542. +      nenv = (char **) xrealloc (nenv, nenv_size * sizeof (char *));
  25543. +      e = nenv + len;
  25544. +    }
  25545. +
  25546. +set:
  25547. +  val = concat (var, "=", val);
  25548. +  if (*e)
  25549. +    free (*e);
  25550. +  else
  25551. +    *(e + 1) = (char *) 0;
  25552. +  *e = val;
  25553. +  return;
  25554. +}
  25555. +
  25556. +void
  25557. +fatal (msg, arg1, arg2)
  25558. +     char *msg, *arg1, *arg2;
  25559. +{
  25560. +  fprintf (stderr, "%s: ", progname);
  25561. +  fprintf (stderr, msg, arg1, arg2);
  25562. +  putc ('\n', stderr);
  25563. +  exit (1);
  25564. +}
  25565. +
  25566. +
  25567. +extern char *malloc (), *realloc ();
  25568. +
  25569. +void
  25570. +memory_fatal ()
  25571. +{
  25572. +  fatal ("virtual memory exhausted");
  25573. +}
  25574. +
  25575. +char *
  25576. +xmalloc (size)
  25577. +     int size;
  25578. +{
  25579. +  register char *value;
  25580. +  value = (char *) malloc (size);
  25581. +  if (!value)
  25582. +    memory_fatal ();
  25583. +  return (value);
  25584. +}
  25585. +
  25586. +char *
  25587. +xrealloc (ptr, size)
  25588. +     char *ptr;
  25589. +     int size;
  25590. +{
  25591. +  register char *value;
  25592. +  value = (char *) realloc (ptr, size);
  25593. +  if (!value)
  25594. +    memory_fatal ();
  25595. +  return (value);
  25596. +}
  25597. +
  25598. +/* Return a newly-allocated string whose contents concatenate
  25599. +   those of S1, S2, S3.  */
  25600. +
  25601. +char *
  25602. +concat (s1, s2, s3)
  25603. +     char *s1, *s2, *s3;
  25604. +{
  25605. +  int len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3);
  25606. +  char *result = (char *) xmalloc (len1 + len2 + len3 + 1);
  25607. +
  25608. +  strcpy (result, s1);
  25609. +  strcpy (result + len1, s2);
  25610. +  strcpy (result + len1 + len2, s3);
  25611. +  result[len1 + len2 + len3] = 0;
  25612. +
  25613. +  return result;
  25614. +}
  25615. +
  25616. +/* Return a pointer to the first occurrence in STR of C,
  25617. +   or 0 if C does not occur.  */
  25618. +
  25619. +char *
  25620. +myindex (str, c)
  25621. +     char *str;
  25622. +     char c;
  25623. +{
  25624. +  char *s = str;
  25625. +
  25626. +  while (*s)
  25627. +    {
  25628. +      if (*s == c)
  25629. +    return s;
  25630. +      s++;
  25631. +    }
  25632. +  return 0;
  25633. +}
  25634. diff -ru --new-file baseline/fsf/emacs/lib-src/make-docfile.lnk amiga/fsf/emacs/lib-src/make-docfile.lnk
  25635. --- baseline/fsf/emacs/lib-src/make-docfile.lnk    Wed Dec 31 17:00:00 1969
  25636. +++ amiga/fsf/emacs/lib-src/make-docfile.lnk    Sun Oct 15 17:05:58 1995
  25637. @@ -0,0 +1,8 @@
  25638. +FROM LIB:c.o "/lib-src/make-docfile.o"
  25639. +TO "/lib-src/make-docfile"
  25640. +LIB LIB:scm881.lib
  25641. +    LIB:sc.lib LIB:amiga.lib
  25642. +ADDSYM
  25643. +QUIET
  25644. +NOICONS
  25645. +
  25646. diff -ru --new-file baseline/fsf/emacs/lib-src/sh.c amiga/fsf/emacs/lib-src/sh.c
  25647. --- baseline/fsf/emacs/lib-src/sh.c    Wed Dec 31 17:00:00 1969
  25648. +++ amiga/fsf/emacs/lib-src/sh.c    Sun Oct 15 17:06:00 1995
  25649. @@ -0,0 +1,146 @@
  25650. +;/*
  25651. +SC LINK NOSTKCHK DEF SASC=1 sh.c
  25652. +QUIT
  25653. +*/
  25654. +/*
  25655. + * original version: David Gay
  25656. + *
  25657. + * 05/18/93 ch added SAS support, external verbose flag and primitive_parse
  25658. + */
  25659. +#include <exec/types.h>
  25660. +#include <dos/dostags.h>
  25661. +#include <stdio.h>
  25662. +
  25663. +#ifdef SASC
  25664. +#include <string.h>
  25665. +#include <stdlib.h>
  25666. +#endif
  25667. +
  25668. +#include <proto/dos.h>
  25669. +
  25670. +/*
  25671. +  translates:
  25672. +  echo "string1;string2" ; cd xx:c ; copy xx yy
  25673. +      into
  25674. +  echo "string1;string2" \n cd xx:c \n copy xx yy
  25675. +
  25676. +  note:
  25677. +    this is a really primitive function ;-) , it may be 
  25678. +    changed if necessary
  25679. +
  25680. +*/
  25681. +
  25682. +#define QUOTE    '"'
  25683. +
  25684. +void primitive_parse(char *s)
  25685. +{
  25686. +    int c;
  25687. +
  25688. +    while(c = *s++)
  25689. +    {
  25690. +    if(c == QUOTE)
  25691. +    {
  25692. +        while((c = *s++) && (c != QUOTE))
  25693. +        ;
  25694. +        if(!c)
  25695. +        break;
  25696. +    }
  25697. +    else if(c == ';')
  25698. +        *(s-1) = '\n';
  25699. +    }
  25700. +}
  25701. +
  25702. +int execute(char *cmd, int debug)
  25703. +{
  25704. +    long rc;
  25705. +    char *s;
  25706. +
  25707. +    while (*cmd == ' ') cmd++;
  25708. +    if (strncmp(cmd, "exec", 4) == 0 && (cmd[4] == ' ' || cmd[4] == '\t')) 
  25709. +    cmd += 4;
  25710. +    
  25711. +    s = cmd;
  25712. +    primitive_parse(s);
  25713. +
  25714. +    if(debug)
  25715. +    fprintf(stderr,"/etc/sh: preparsed line:\n%s\n", cmd);
  25716. +
  25717. +    if ((rc = SystemTags(cmd, SYS_UserShell, TRUE, TAG_END)) == -1)
  25718. +    {
  25719. +    fprintf(stderr, "Failed to execute command %s\n", cmd);
  25720. +    return 1;
  25721. +    }
  25722. +    else
  25723. +    return rc ? 1 : 0;
  25724. +}
  25725. +
  25726. +void main(int argc, char **argv)
  25727. +{
  25728. +  int command;
  25729. +  char *command_string;
  25730. +  char *program_name = argv[0];
  25731. +  struct RDArgs *args;
  25732. +  long opts[1];
  25733. +  static char options[] = "";
  25734. +  long debug = 0;
  25735. +  char *shenv;
  25736. +
  25737. +  /* Throw out AmigaDOS args so that Input() is clean */
  25738. +  if (args = ReadArgs(options, opts, NULL)) FreeArgs(args);
  25739. +
  25740. +  shenv = getenv("EMACS_SH_DEBUG");
  25741. +
  25742. +  if(shenv)
  25743. +      if(strstr(shenv, "-v")) /* external verbose flag */
  25744. +      debug = 1;
  25745. +  
  25746. +  command = 0;
  25747. +  /* Simplistic argument parsing */
  25748. +  argv++;
  25749. +  argc--;
  25750. +  while (argc > 0 && argv[0][0] == '-')
  25751. +    {
  25752. +      switch (argv[0][1])
  25753. +    {
  25754. +    case 'c':
  25755. +      if (argc == 1) goto usage;
  25756. +      command = 1;
  25757. +      command_string = argv[1];
  25758. +      argv++;
  25759. +      argc--;
  25760. +      break;
  25761. +    case 'v':
  25762. +      debug = 1;
  25763. +      break;
  25764. +    case 'i':
  25765. +      /* ignored for now */
  25766. +      break;
  25767. +    default: goto usage;
  25768. +    }
  25769. +      argc--;
  25770. +      argv++;
  25771. +    }
  25772. +  if (argc != 0) goto usage;
  25773. +
  25774. +  if (command) 
  25775. +  {
  25776. +      if(debug)
  25777. +      fprintf(stderr,"%s: command_string = %s\n", argv[0], command_string);
  25778. +      exit(execute(command_string, debug));
  25779. +  }
  25780. +  else exit(Execute("", Input(), NULL) ? 0 : 1);
  25781. +
  25782. + usage:
  25783. +  fprintf(stderr, "%s [-i] [-v] [-c command]\n", program_name);
  25784. +  exit(1);
  25785. +}
  25786. +
  25787. +
  25788. +/*
  25789. + * Local variables:
  25790. + * compile-command: "sc link nostkchk def SASC=1 DEBUG=FULL sh.c"
  25791. + * end:
  25792. + */
  25793. diff -ru --new-file baseline/fsf/emacs/lisp/amiga-init.el amiga/fsf/emacs/lisp/amiga-init.el
  25794. --- baseline/fsf/emacs/lisp/amiga-init.el    Wed Dec 31 17:00:00 1969
  25795. +++ amiga/fsf/emacs/lisp/amiga-init.el    Sun Oct 15 17:06:20 1995
  25796. @@ -0,0 +1,302 @@
  25797. +(global-set-key "\C-z" 'amiga-iconify)
  25798. +(setq amiga-map (make-keymap))
  25799. +(global-set-key "\C-x\C-^" amiga-map)
  25800. +
  25801. +(load "amiga-mouse")
  25802. +;; (load "amiga-menu")
  25803. +
  25804. +; these are directly mapped now
  25805. +;(define-key amiga-map "A" [up])
  25806. +;(define-key amiga-map "B" [down])
  25807. +;(define-key amiga-map "D" [left])
  25808. +;(define-key amiga-map "C" [right])
  25809. +;(define-key amiga-map "0~" [f1])
  25810. +;(define-key amiga-map "1~" [f2])
  25811. +;(define-key amiga-map "2~" [f3])
  25812. +;(define-key amiga-map "3~" [f4])
  25813. +;(define-key amiga-map "4~" [f5])
  25814. +;(define-key amiga-map "5~" [f6])
  25815. +;(define-key amiga-map "6~" [f7])
  25816. +;(define-key amiga-map "7~" [f8])
  25817. +;(define-key amiga-map "8~" [f9])
  25818. +;(define-key amiga-map "9~" [f10])
  25819. +;(define-key amiga-map "10~" [S-f1])
  25820. +;(define-key amiga-map "11~" [S-f2])
  25821. +;(define-key amiga-map "12~" [S-f3])
  25822. +;(define-key amiga-map "13~" [S-f4])
  25823. +;(define-key amiga-map "14~" [S-f5])
  25824. +;(define-key amiga-map "15~" [S-f6])
  25825. +;(define-key amiga-map "16~" [S-f7])
  25826. +;(define-key amiga-map "17~" [S-f8])
  25827. +;(define-key amiga-map "18~" [S-f9])
  25828. +;(define-key amiga-map "19~" [S-f10])
  25829. +
  25830. +(define-key global-map [help] 'info)
  25831. +
  25832. +(define-key global-map [S-left] [prior])
  25833. +(define-key global-map [S-right] [next])
  25834. +(define-key global-map [S-down] 'scroll-up)
  25835. +(define-key global-map [S-up] 'scroll-down)
  25836. +(define-key global-map [C-left] 'forward-sexp)
  25837. +(define-key global-map [C-right] 'backward-sexp)
  25838. +(define-key global-map [C-down] 'scroll-down-1)
  25839. +(define-key global-map [C-up] 'scroll-up-1)
  25840. +
  25841. +; CHFIXME: use default emacs binding? 
  25842. +(define-key global-map [M-up] [begin])
  25843. +(define-key global-map [M-down] [end])
  25844. +(define-key global-map [M-left] 'beginning-of-line)
  25845. +(define-key global-map [M-right] 'end-of-line)
  25846. +
  25847. +; Keypad sequences
  25848. +(setq amiga-keypad-map (make-sparse-keymap))
  25849. +(define-key amiga-map "K" amiga-keypad-map)
  25850. +(define-key amiga-keypad-map "[" "[")
  25851. +(define-key amiga-keypad-map "]" "]")
  25852. +(define-key amiga-keypad-map "{" "{")
  25853. +(define-key amiga-keypad-map "}" "}")
  25854. +(define-key amiga-keypad-map "/" [kp-divide])
  25855. +(define-key amiga-keypad-map "*" [kp-multiply])
  25856. +(define-key amiga-keypad-map "-" [kp-subtract])
  25857. +(define-key amiga-keypad-map "+" [kp-add])
  25858. +(define-key amiga-keypad-map "." [kp-decimal])
  25859. +(define-key amiga-keypad-map [RET] [kp-enter])
  25860. +(define-key amiga-keypad-map [0] [kp-0])
  25861. +(define-key amiga-keypad-map [1] [kp-1])
  25862. +(define-key amiga-keypad-map [2] [kp-2])
  25863. +(define-key amiga-keypad-map [3] [kp-3])
  25864. +(define-key amiga-keypad-map [4] [kp-4])
  25865. +(define-key amiga-keypad-map [5] [kp-5])
  25866. +(define-key amiga-keypad-map [6] [kp-6])
  25867. +(define-key amiga-keypad-map [7] [kp-7])
  25868. +(define-key amiga-keypad-map [8] [kp-8])
  25869. +(define-key amiga-keypad-map [9] [kp-9])
  25870. +
  25871. +(defun scroll-down-1 ()
  25872. +  "Move up one line on screen."
  25873. +  (interactive)
  25874. +  (scroll-down 1))
  25875. +
  25876. +(defun scroll-up-1 ()
  25877. +  "Move down one line on screen."
  25878. +  (interactive)
  25879. +  (scroll-up 1))
  25880. +
  25881. +(defun unfocus-frame ()
  25882. +  "A dummy, used by general mouse.el."
  25883. +  (interactive))
  25884. +
  25885. +
  25886. +(defun window-frame (w)
  25887. +  "Return the frame object that window WINDOW is on."
  25888. +  (interactive)
  25889. +  (selected-frame))
  25890. +
  25891. +;; ARexx stuff
  25892. +
  25893. +;;; This function needs to be re-written to handle rexx returned results.
  25894. +;;;
  25895. +(setq amiga-arexx-processing nil)
  25896. +(setq amiga-arexx-errors nil)
  25897. +
  25898. +(defvar amiga-arexx-failat 5
  25899. +  "Return level from which arexx commands returns cause errors")
  25900. +
  25901. +;;
  25902. +;; process incoming rexx messages
  25903. +;;
  25904. +(defun amiga-arexx-process ()
  25905. +  (interactive)
  25906. +  (if (not amiga-arexx-processing)
  25907. +      (progn
  25908. +    (setq amiga-arexx-processing t)
  25909. +    (condition-case nil ; Avoid blocking of processing in case of bugs
  25910. +        (let (arexxcmd)
  25911. +          (while (setq arexxcmd (amiga-arexx-get-next-msg))
  25912. +        (let ((rc 0) result)
  25913. +          (condition-case err ; detect errors in arexx command
  25914. +              (let ((expr (car (read-from-string arexxcmd))))
  25915. +            (setq result (prin1-to-string (eval expr))))
  25916. +            (error (progn
  25917. +                 (setq rc 20)
  25918. +                 (setq result (prin1-to-string err)))))
  25919. +          (amiga-arexx-reply rc result))))
  25920. +      (error nil))
  25921. +    (setq amiga-arexx-processing nil))))
  25922. +
  25923. +(defun amiga-arexx-wait-command (id)
  25924. +  "Waits for a pending ARexx commands (MSGID) to complete.
  25925. +Also processes any pending ARexx requests during this interval.
  25926. +returns the result list associated with this id, which takes the
  25927. +form: (msgid result-code error-or-string)
  25928. +``error-or-string'' depends on ``result-code''.
  25929. +if ``result-code'' is 0 the command finished successfully and
  25930. +``error-or-string'' will be a string or nil, otherwise the command
  25931. +returned with an error and ``error-or-string'' will be an interger
  25932. +that is the secondary error code of the arexx command."
  25933. +  (amiga-arexx-process)
  25934. +  (while (not (amiga-arexx-check-command id))
  25935. +    (amiga-arexx-wait)
  25936. +    (amiga-arexx-process))
  25937. +  (amiga-arexx-get-msg-results id))
  25938. +
  25939. +(defconst amiga-arexx-error-messages
  25940. +["No cause"
  25941. +"Program not found"
  25942. +"Execution halted"
  25943. +"Insufficient memory"
  25944. +"Invalid character"
  25945. +"Unmatched quote"
  25946. +"Unterminated comment"
  25947. +"Clause too long"
  25948. +"Invalid token"
  25949. +"Symbol or string too long"
  25950. +"Invalid message packet"
  25951. +"Command string error"
  25952. +"Error return from function"
  25953. +"Host environment not found"
  25954. +"Requested library not found"
  25955. +"Function not found"
  25956. +"Function did not return value"
  25957. +"Wrong number of arguments"
  25958. +"Invalid argument to function"
  25959. +"Invalid PROCEDURE"
  25960. +"Unexpected THEN or WHEN"
  25961. +"Unexpected ELSE or OTHERWISE"
  25962. +"Unexpected BREAK, LEAVE or ITERATE"
  25963. +"Invalid statement in SELECT"
  25964. +"Missing or multiple THEN"
  25965. +"Missing OTHERWISE"
  25966. +"Missing or unexpected END"
  25967. +"Symbol mismatch"
  25968. +"Invalid DO syntax"
  25969. +"Incomplete IF or SELECT"
  25970. +"Label not found"
  25971. +"Symbol expected"
  25972. +"Symbol or string expected"
  25973. +"Invalid keyword"
  25974. +"Required keyword missing"
  25975. +"Extraneous characters"
  25976. +"Keyword conflict"
  25977. +"Invalid template"
  25978. +"Invalid TRACE request"
  25979. +"Unitialized variable"
  25980. +"Invalid variable name"
  25981. +"Invalid expression"
  25982. +"Unbalanced parentheses"
  25983. +"Nesting limit exceeded"
  25984. +"Invalid expression result"
  25985. +"Expression required"
  25986. +"Boolean value not 0 or 1"
  25987. +"Arithmetic conversion error"
  25988. +"Invalid operand"
  25989. +]
  25990. +"The arexx error messages, sorted by number")
  25991. +
  25992. +(defun amiga-arexx-do-command (str as-file)
  25993. +  "Sends ARexx command STR (like amiga-arexx-send-command).
  25994. +If AS-FILE is true, STR is an arexx command, otherwise it is a file name.
  25995. +Waits for the command to return.  If the arexx command fails an error will
  25996. +be caused.
  25997. +
  25998. +If you would like to get result strings and errors (ie. not cause
  25999. +a lisp error) use: (amiga-arexx-do-command-with-results)"
  26000. +  (interactive "sARexx command:
  26001. +P")
  26002. +  (let ((id (amiga-arexx-send-command str as-file)))
  26003. +    (if (not id)
  26004. +    (error "Failed to send arexx command.")
  26005. +      (let ((reslist (amiga-arexx-wait-command id)))
  26006. +    (let ((rc (nth 1 reslist)) (second (nth 2 reslist)))
  26007. +      (if (> rc 0)
  26008. +          (progn            ; error
  26009. +        (let ((error-message
  26010. +               (if (< second (length amiga-arexx-error-messages))
  26011. +             (aref amiga-arexx-error-messages second)
  26012. +             (format nil "Unknown error %d" second))))
  26013. +          (error "Arexx command failed, level %d, cause %s" rc error-message))
  26014. +        reslist)
  26015. +      second))))))
  26016. +
  26017. +(defun amiga-arexx-do-command-with-results (str as-file)
  26018. +  "Sends ARexx command STR (like amiga-arexx-do-command).
  26019. +If AS-FILE is true, STR is an arexx command, otherwise it is a file name.
  26020. +Waits for the command to return.
  26021. +
  26022. +The return value is one of three things:
  26023. + - the command executed succesfully: nil or a result string.
  26024. + - the command failed: a list of the form (RC ERROR-CODE)
  26025. +   where RC is the severity and ERROR-CODE is the secondary error."
  26026. +  (interactive "sARexx command:
  26027. +P")
  26028. +  (let ((id (amiga-arexx-send-command str as-file)))
  26029. +    (if (not id)
  26030. +    (error "Failed to send arexx command.")
  26031. +      (let ((reslist (amiga-arexx-wait-command id)))
  26032. +    (let ((rc (nth 1 reslist)) (second (nth 2 reslist)))
  26033. +      (if (and rc (> rc 0))
  26034. +          (list rc second)
  26035. +        second))))))
  26036. +
  26037. +(define-key amiga-map "X" 'amiga-arexx-process)
  26038. +(setq amiga-arexx-initialized t) ;; ARexx commands can now be processed.
  26039. +
  26040. +(defun amiga-wb-process ()
  26041. +  "Process all pending workbench events, ie load all files requested"
  26042. +  (interactive)
  26043. +  (let (file)
  26044. +    (condition-case nil
  26045. +    (while (setq file (amiga-get-wb-event t))
  26046. +      (condition-case nil
  26047. +          (find-file file)
  26048. +        (error nil)))
  26049. +      (error nil))))
  26050. +
  26051. +(define-key amiga-map "W" 'amiga-wb-process)
  26052. +(setq amiga-wb-initialized t) ;; WB events can now be processed.
  26053. +
  26054. +(setq completion-ignore-case t)
  26055. +;; Default is no numbered versions on Amiga, because directory searches are too
  26056. +;; slow.
  26057. +(setq version-control 'never)
  26058. +
  26059. +(defun safe-amiga-paste ()
  26060. +  "Paste from the amiga clipboard, trapping any errors."
  26061. +  (if amiga-new-clip
  26062. +      nil)
  26063. +  (condition-case nil
  26064. +      (amiga-paste)
  26065. +    (error nil)))
  26066. +
  26067. +(defun check-clipboard ()
  26068. +  "If there is anything new in the clipboard, add it to the emacs kill ring.
  26069. +Returns t if there was something added, nil otherwise."
  26070. +  (let (added)
  26071. +    (if amiga-new-clip
  26072. +        (let ((str (safe-amiga-paste)))
  26073. +          (setq amiga-new-clip nil)
  26074. +          (if str
  26075. +              (progn
  26076. +                (kill-add str)
  26077. +                (setq added t)
  26078. +                (setq kill-ring-yank-pointer kill-ring)))))
  26079. +          added))
  26080. +
  26081. +(defun update-clipboard (str &optional dummy)
  26082. +  (amiga-cut str)
  26083. +  (setq amiga-new-clip nil))
  26084. +
  26085. +(setq interprogram-cut-function 'update-clipboard)
  26086. +(setq interprogram-paste-function 'safe-amiga-paste)
  26087. +
  26088. +;;; VM creates nasty names that we need to patch with this function.
  26089. +;;; dgilbert.
  26090. +
  26091. +(defun amiga-auto-save-check (file-name)
  26092. +  "Determines that an auto-save-file-name is valid on the Amiga"
  26093. +  (let ((max (length file-name)) (i 0))
  26094. +    (while (< i max)
  26095. +      (if (= (aref file-name i) ?:)
  26096. +          (aset file-name i ?-))
  26097. +      (setq i (1+ i)))
  26098. +  file-name))
  26099. Binary files baseline/fsf/emacs/lisp/amiga-init.elc and amiga/fsf/emacs/lisp/amiga-init.elc differ
  26100. diff -ru --new-file baseline/fsf/emacs/lisp/amiga-menu-bar.el amiga/fsf/emacs/lisp/amiga-menu-bar.el
  26101. --- baseline/fsf/emacs/lisp/amiga-menu-bar.el    Wed Dec 31 17:00:00 1969
  26102. +++ amiga/fsf/emacs/lisp/amiga-menu-bar.el    Sun Oct 15 17:06:24 1995
  26103. @@ -0,0 +1,435 @@
  26104. +;;; amiga-menu-bar.el --- define a default menu bar.
  26105. +;;; it's nearly menu-bar.el except multi-frame stuff (CHFIXME)
  26106. +
  26107. +(defun frame-list () "Dummy frame-list, returns list of selected- frame."
  26108. +  (list (selected-frame))) ; CHFIXME
  26109. +
  26110. +;;; menu-bar.el --- define a default menu bar.
  26111. +
  26112. +;; Author: RMS
  26113. +;; Keywords: internal
  26114. +
  26115. +;; Copyright (C) 1993, 1994 Free Software Foundation, Inc.
  26116. +
  26117. +;; This file is part of GNU Emacs.
  26118. +
  26119. +;; GNU Emacs is free software; you can redistribute it and/or modify
  26120. +;; it under the terms of the GNU General Public License as published by
  26121. +;; the Free Software Foundation; either version 2, or (at your option)
  26122. +;; any later version.
  26123. +
  26124. +;; GNU Emacs is distributed in the hope that it will be useful,
  26125. +;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  26126. +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  26127. +;; GNU General Public License for more details.
  26128. +
  26129. +;; You should have received a copy of the GNU General Public License
  26130. +;; along with GNU Emacs; see the file COPYING.  If not, write to
  26131. +;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  26132. +
  26133. +;;; Code:
  26134. +
  26135. +;; Don't clobber an existing menu-bar keymap, to preserve any menu-bar key
  26136. +;; definitions made in loaddefs.el.
  26137. +(or (lookup-key global-map [menu-bar])
  26138. +    (define-key global-map [menu-bar] (make-sparse-keymap "menu-bar")))
  26139. +(defvar menu-bar-help-menu (make-sparse-keymap "Help"))
  26140. +;; Put Help item last.
  26141. +(setq menu-bar-final-items '(help))
  26142. +(define-key global-map [menu-bar help] (cons "Help" menu-bar-help-menu))
  26143. +(defvar menu-bar-edit-menu (make-sparse-keymap "Edit"))
  26144. +(define-key global-map [menu-bar edit] (cons "Edit" menu-bar-edit-menu))
  26145. +(defvar menu-bar-file-menu (make-sparse-keymap "File"))
  26146. +(define-key global-map [menu-bar file] (cons "File" menu-bar-file-menu))
  26147. +
  26148. +(define-key menu-bar-file-menu [exit-emacs]
  26149. +  '("Exit Emacs" . save-buffers-kill-emacs))
  26150. +(define-key menu-bar-file-menu [kill-buffer]
  26151. +  '("Kill Buffer" . kill-this-buffer))
  26152. +;; (define-key menu-bar-file-menu [delete-frame] '("Delete Frame" . delete-frame)) 
  26153. +(define-key menu-bar-file-menu [epatch]
  26154. +  '("Apply Patch" . menu-bar-epatch-menu))
  26155. +(define-key menu-bar-file-menu [ediff]
  26156. +  '("Compare Files" . menu-bar-ediff-menu))
  26157. +(define-key menu-bar-file-menu [emerge] '("Emerge" . menu-bar-emerge-menu))
  26158. +(define-key menu-bar-file-menu [calendar] '("Calendar" . calendar))
  26159. +(define-key menu-bar-file-menu [rmail] '("Read Mail" . rmail))
  26160. +(define-key menu-bar-file-menu [gnus] '("Read Net News" . gnus))
  26161. +(define-key menu-bar-file-menu [bookmark]
  26162. +  '("Bookmarks" . menu-bar-bookmark-map))
  26163. +(define-key menu-bar-file-menu [print-buffer] '("Print Buffer" . print-buffer))
  26164. +(define-key menu-bar-file-menu [revert-buffer]
  26165. +  '("Revert Buffer" . revert-buffer))
  26166. +(define-key menu-bar-file-menu [write-file]
  26167. +  '("Save Buffer As..." . write-file))
  26168. +(define-key menu-bar-file-menu [save-buffer] '("Save Buffer" . save-buffer))
  26169. +(define-key menu-bar-file-menu [dired] '("Open Directory..." . dired))
  26170. +(define-key menu-bar-file-menu [open-file] '("Open File..." . find-file))
  26171. +;; (define-key menu-bar-file-menu [make-frame] '("Make New Frame" . make-frame))
  26172. +
  26173. +(define-key menu-bar-edit-menu [spell] '("Spell" . ispell-menu-map))
  26174. +(define-key menu-bar-edit-menu [fill] '("Fill" . fill-region))
  26175. +(define-key menu-bar-edit-menu [clear] '("Clear" . delete-region))
  26176. +(define-key menu-bar-edit-menu [query-replace]
  26177. +  '("Query Replace" . query-replace))
  26178. +(define-key menu-bar-edit-menu [re-search-back]
  26179. +  '("Regexp Search Backwards" . re-search-backward))
  26180. +(define-key menu-bar-edit-menu [search-back]
  26181. +  '("Search Backwards" . search-backward))
  26182. +(define-key menu-bar-edit-menu [re-search-fwd]
  26183. +  '("Regexp Search" . re-search-forward))
  26184. +(define-key menu-bar-edit-menu [search-fwd]
  26185. +  '("Search" . search-forward))
  26186. +(define-key menu-bar-edit-menu [choose-next-paste]
  26187. +  '("Choose Next Paste >" . mouse-menu-choose-yank))
  26188. +(define-key menu-bar-edit-menu [paste] '("Paste" . yank))
  26189. +(define-key menu-bar-edit-menu [copy] '("Copy" . kill-ring-save))
  26190. +(define-key menu-bar-edit-menu [cut] '("Cut" . kill-region))
  26191. +(define-key menu-bar-edit-menu [undo] '("Undo" . undo))
  26192. +
  26193. +(put 'fill-region 'menu-enable 'mark-active)
  26194. +(put 'kill-region 'menu-enable 'mark-active)
  26195. +(put 'kill-ring-save 'menu-enable 'mark-active)
  26196. +(put 'yank 'menu-enable '(x-selection-exists-p))
  26197. +(put 'delete-region 'menu-enable 'mark-active)
  26198. +(put 'undo 'menu-enable '(if (eq last-command 'undo)
  26199. +                 pending-undo-list
  26200. +               (consp buffer-undo-list)))
  26201. +(put 'query-replace 'menu-enable (not buffer-read-only))
  26202. +
  26203. +(autoload 'ispell-menu-map "ispell" nil t 'keymap)
  26204. +
  26205. +;; These are alternative definitions for the cut, paste and copy
  26206. +;; menu items.  Use them if your system expects these to use the clipboard
  26207. +
  26208. +(put 'clipboard-kill-region 'menu-enable 'mark-active)
  26209. +(put 'clipboard-kill-ring-save 'menu-enable 'mark-active)
  26210. +(put 'clipboard-yank 'menu-enable
  26211. +     '(or (x-selection-exists-p) (x-selection-exists-p 'CLIPBOARD)))
  26212. +
  26213. +(defun clipboard-yank ()
  26214. +  "Reinsert the last stretch of killed text, or the clipboard contents."
  26215. +  (interactive)
  26216. +  (let ((x-select-enable-clipboard t))
  26217. +    (yank)))
  26218. +
  26219. +(defun clipboard-kill-ring-save (beg end)
  26220. +  "Copy region to kill ring, and save in the X clipboard."
  26221. +  (interactive "r")
  26222. +  (let ((x-select-enable-clipboard t))
  26223. +    (kill-ring-save beg end)))
  26224. +
  26225. +(defun clipboard-kill-region (beg end)
  26226. +  "Kill the region, and save it in the X clipboard."
  26227. +  (interactive "r")
  26228. +  (let ((x-select-enable-clipboard t))
  26229. +    (kill-region beg end)))
  26230. +
  26231. +(defun menu-bar-enable-clipboard ()
  26232. +  "Make the menu bar CUT, PASTE and COPY items use the clipboard."
  26233. +  (interactive)
  26234. +  ;; We can't use constant list structure here because it becomes pure,
  26235. +  ;; and because it gets modified with cache data.
  26236. +  (define-key menu-bar-edit-menu [paste]
  26237. +    (cons "Paste" 'clipboard-yank))
  26238. +  (define-key menu-bar-edit-menu [copy]
  26239. +    (cons "Copy" 'clipboard-kill-ring-save))
  26240. +  (define-key menu-bar-edit-menu [cut]
  26241. +    (cons "Cut" 'clipboard-kill-region)))
  26242. +
  26243. +;; Sun expects these commands on these keys, so why not?
  26244. +(define-key global-map [f20] 'clipboard-kill-region)
  26245. +(define-key global-map [f16] 'clipboard-kill-ring-save)
  26246. +(define-key global-map [f18] 'clipboard-yank)
  26247. +
  26248. +(define-key menu-bar-help-menu [emacs-version]
  26249. +  '("Show Version" . emacs-version))
  26250. +(define-key menu-bar-help-menu [report-emacs-bug]
  26251. +  '("Send Bug Report" . report-emacs-bug))
  26252. +(define-key menu-bar-help-menu [emacs-tutorial]
  26253. +  '("Emacs Tutorial" . help-with-tutorial))
  26254. +(define-key menu-bar-help-menu [man] '("Man..." . manual-entry))
  26255. +(define-key menu-bar-help-menu [describe-variable]
  26256. +  '("Describe Variable..." . describe-variable))
  26257. +(define-key menu-bar-help-menu [describe-function]
  26258. +  '("Describe Function..." . describe-function))
  26259. +(define-key menu-bar-help-menu [describe-key]
  26260. +  '("Describe Key..." . describe-key))
  26261. +(define-key menu-bar-help-menu [list-keybindings]
  26262. +  '("List Keybindings" . describe-bindings))
  26263. +(define-key menu-bar-help-menu [command-apropos]
  26264. +  '("Command Apropos..." . command-apropos))
  26265. +(define-key menu-bar-help-menu [describe-mode]
  26266. +  '("Describe Mode" . describe-mode))
  26267. +(define-key menu-bar-help-menu [info] '("Info" . info))
  26268. +
  26269. +(define-key menu-bar-help-menu [emacs-news] '("Emacs News" . view-emacs-news))
  26270. +(defun kill-this-buffer ()    ; for the menubar
  26271. +  "Kills the current buffer."
  26272. +  (interactive)
  26273. +  (kill-buffer (current-buffer)))
  26274. +
  26275. +(defun kill-this-buffer-enabled-p ()
  26276. +  (let ((count 0)
  26277. +    (buffers (buffer-list)))
  26278. +    (while buffers
  26279. +      (or (string-match "^ " (buffer-name (car buffers)))
  26280. +      (setq count (1+ count)))
  26281. +      (setq buffers (cdr buffers)))
  26282. +    (> count 1)))
  26283. +
  26284. +(put 'save-buffer 'menu-enable '(buffer-modified-p))
  26285. +(put 'revert-buffer 'menu-enable
  26286. +     '(or revert-buffer-function revert-buffer-insert-file-contents-function
  26287. +      (and (buffer-file-name)
  26288. +           (or (buffer-modified-p)
  26289. +           (not (verify-visited-file-modtime (current-buffer)))))))
  26290. +;; Permit deleting frame if it would leave a visible or iconified frame.
  26291. +;(put 'delete-frame 'menu-enable
  26292. +;     '(let ((frames (frame-list))
  26293. +;        (count 0))
  26294. +;    (while frames
  26295. +;      (if (cdr (assq 'visibility (frame-parameters (car frames))))
  26296. +;          (setq count (1+ count)))
  26297. +;      (setq frames (cdr frames)))
  26298. +;    (> count 1)))
  26299. +(put 'kill-this-buffer 'menu-enable '(kill-this-buffer-enabled-p))
  26300. +
  26301. +(put 'advertised-undo 'menu-enable
  26302. +     '(and (not (eq t buffer-undo-list))
  26303. +       (if (eq last-command 'undo)
  26304. +           (and (boundp 'pending-undo-list)
  26305. +            pending-undo-list)
  26306. +         buffer-undo-list)))
  26307. +
  26308. +(defvar yank-menu-length 100
  26309. +  "*Maximum length of an item in the menu for \
  26310. +\\[mouse-menu-choose-yank].")
  26311. +
  26312. +(defun mouse-menu-choose-yank (event)
  26313. +  "Pop up a menu of the kill-ring for selection with the mouse.
  26314. +The kill-ring-yank-pointer is moved to the selected element.
  26315. +A subsequent \\[yank] yanks the choice just selected."
  26316. +  (interactive "e")
  26317. +  (let* ((count 0)
  26318. +     (menu (mapcar (lambda (string)
  26319. +             (if (> (length string) yank-menu-length)
  26320. +                 (setq string (substring string
  26321. +                             0 yank-menu-length)))
  26322. +             (prog1 (cons string count)
  26323. +               (setq count (1+ count))))
  26324. +               kill-ring))
  26325. +     (arg (x-popup-menu event 
  26326. +                (list "Yank Menu"
  26327. +                  (cons "Choose Next Yank" menu)))))
  26328. +    ;; A mouse click outside the menu returns nil.
  26329. +    ;; Avoid a confusing error from passing nil to rotate-yank-pointer.
  26330. +    ;; XXX should this perhaps do something other than simply return? -rm
  26331. +    (if arg
  26332. +    (progn
  26333. +      ;; We don't use `rotate-yank-pointer' because we want to move
  26334. +      ;; relative to the beginning of kill-ring, not the current
  26335. +      ;; position.  Also, that would ask for any new X selection and
  26336. +      ;; thus change the list of items the user just chose from, which
  26337. +      ;; would be highly confusing.
  26338. +      (setq kill-ring-yank-pointer (nthcdr arg kill-ring))
  26339. +      (if (interactive-p)
  26340. +          (message "The next yank will insert the selected text.")
  26341. +        (current-kill 0))))))
  26342. +(put 'mouse-menu-choose-yank 'menu-enable 'kill-ring)
  26343. +
  26344. +(define-key global-map [menu-bar buffer] '("Buffers" . menu-bar-buffers))
  26345. +
  26346. +(defalias 'menu-bar-buffers (make-sparse-keymap "Buffers"))
  26347. +
  26348. +(defvar complex-buffers-menu-p nil
  26349. +  "*Non-nil says, offer a choice of actions after you pick a buffer.
  26350. +This applies to the Buffers menu from the menu bar.")
  26351. +
  26352. +(defvar buffers-menu-max-size 10
  26353. +  "*Maximum number of entries which may appear on the Buffers menu.
  26354. +If this is 10, then only the ten most-recently-selected buffers are shown.
  26355. +If this is nil, then all buffers are shown.
  26356. +A large number or nil slows down menu responsiveness.")
  26357. +
  26358. +(defvar list-buffers-directory nil)
  26359. +
  26360. +(defun menu-bar-select-buffer ()
  26361. +  (interactive)
  26362. +  (switch-to-buffer last-command-event))
  26363. +
  26364. +;(defun menu-bar-select-frame ()
  26365. +;  (interactive)
  26366. +;  (make-frame-visible last-command-event)
  26367. +;  (raise-frame last-command-event)
  26368. +;  (select-frame last-command-event))
  26369. +
  26370. +(defvar menu-bar-update-buffers-last-buffers nil)
  26371. +(defvar menu-bar-update-buffers-last-frames nil)
  26372. +
  26373. +(defun menu-bar-update-buffers ()
  26374. +  (let ((buffers (buffer-list))
  26375. +    (frames (frame-list))
  26376. +    buffers-info
  26377. +    buffers-menu frames-menu)
  26378. +    (setq buffers-info
  26379. +      (mapcar (function (lambda (buffer)
  26380. +                  (list buffer (buffer-modified-p buffer)
  26381. +                    (save-excursion
  26382. +                      (set-buffer buffer)
  26383. +                      buffer-read-only))))
  26384. +          buffers))
  26385. +    (if (and (equal buffers-info menu-bar-update-buffers-last-buffers)
  26386. +         (equal frames menu-bar-update-buffers-last-frames))
  26387. +    nil
  26388. +      (setq menu-bar-update-buffers-last-buffers buffers-info)
  26389. +      (setq menu-bar-update-buffers-last-frames frames)
  26390. +      ;; If requested, list only the N most recently selected buffers.
  26391. +      (if (and (integerp buffers-menu-max-size)
  26392. +           (> buffers-menu-max-size 1))
  26393. +      (if (> (length buffers) buffers-menu-max-size)
  26394. +          (setcdr (nthcdr buffers-menu-max-size buffers) nil)))
  26395. +
  26396. +      ;; Make the menu of buffers proper.
  26397. +      (setq buffers-menu
  26398. +        (cons "Select Buffer"
  26399. +          (let ((tail buffers)
  26400. +            (maxbuf 0)
  26401. +            (maxlen 0)
  26402. +            alist
  26403. +            head)
  26404. +            (while tail
  26405. +              (or (eq ?\ (aref (buffer-name (car tail)) 0))
  26406. +              (setq maxbuf
  26407. +                (max maxbuf
  26408. +                     (length (buffer-name (car tail))))))
  26409. +              (setq tail (cdr tail)))
  26410. +            (setq tail buffers)
  26411. +            (while tail
  26412. +              (let ((elt (car tail)))
  26413. +            (or (eq ?\ (aref (buffer-name elt) 0))
  26414. +                (setq alist (cons
  26415. +                     (cons
  26416. +                      (format
  26417. +                       (format "%%%ds  %%s%%s  %%s"
  26418. +                           maxbuf)
  26419. +                       (buffer-name elt)
  26420. +                       (if (buffer-modified-p elt)
  26421. +                           "*" " ")
  26422. +                       (save-excursion
  26423. +                         (set-buffer elt)
  26424. +                         (if buffer-read-only "%" " "))
  26425. +                       (or (buffer-file-name elt)
  26426. +                           (save-excursion
  26427. +                         (set-buffer elt)
  26428. +                         list-buffers-directory)
  26429. +                           ""))
  26430. +                      elt)
  26431. +                     alist)))
  26432. +            (and alist (> (length (car (car alist))) maxlen)
  26433. +                 (setq maxlen (length (car (car alist))))))
  26434. +              (setq tail (cdr tail)))
  26435. +            (setq alist (nreverse alist))
  26436. +            (nconc (mapcar '(lambda (pair)
  26437. +                      ;; This is somewhat risque, to use
  26438. +                      ;; the buffer name itself as the event type
  26439. +                      ;; to define, but it works.
  26440. +                      ;; It would not work to use the buffer
  26441. +                      ;; since a buffer as an event has its
  26442. +                      ;; own meaning.
  26443. +                      (nconc (list (buffer-name (cdr pair))
  26444. +                           (car pair)
  26445. +                           (cons nil nil))
  26446. +                         'menu-bar-select-buffer))
  26447. +                   alist)
  26448. +               (list (cons 'list-buffers
  26449. +                       (cons
  26450. +                    (concat (make-string (max (- (/ maxlen
  26451. +                                    2)
  26452. +                                     8)
  26453. +                                  0) ?\ )
  26454. +                        "List All Buffers")
  26455. +                    'list-buffers)))))))
  26456. +
  26457. +
  26458. +      ;; Make a Frames menu if we have more than one frame.
  26459. +      (if (cdr frames)
  26460. +      (setq frames-menu
  26461. +        (cons "Select Frame"
  26462. +              (mapcar '(lambda (frame)
  26463. +                 (nconc (list frame
  26464. +                          (cdr (assq 'name
  26465. +                             (frame-parameters frame)))
  26466. +                          (cons nil nil))
  26467. +                    'menu-bar-select-frame))
  26468. +                  frames))))
  26469. +      (if buffers-menu
  26470. +      (setq buffers-menu (cons 'keymap buffers-menu)))
  26471. +      (if frames-menu
  26472. +      (setq frames-menu (cons 'keymap frames-menu)))
  26473. +      (define-key global-map [menu-bar buffer]
  26474. +    (cons "Buffers"
  26475. +          (if (and buffers-menu frames-menu)
  26476. +          (list 'keymap "Buffers and Frames"
  26477. +            (cons 'buffers (cons "Buffers" buffers-menu))
  26478. +            (cons 'frames (cons "Frames" frames-menu)))
  26479. +        (or buffers-menu frames-menu 'undefined)))))))
  26480. +
  26481. +(add-hook 'menu-bar-update-hook 'menu-bar-update-buffers)
  26482. +
  26483. +;; this version is too slow
  26484. +;;;(defun format-buffers-menu-line (buffer)
  26485. +;;;  "Returns a string to represent the given buffer in the Buffer menu.
  26486. +;;;nil means the buffer shouldn't be listed.  You can redefine this."
  26487. +;;;  (if (string-match "\\` " (buffer-name buffer))
  26488. +;;;      nil
  26489. +;;;    (save-excursion
  26490. +;;;     (set-buffer buffer)
  26491. +;;;     (let ((size (buffer-size)))
  26492. +;;;       (format "%s%s %-19s %6s %-15s %s"
  26493. +;;;           (if (buffer-modified-p) "*" " ")
  26494. +;;;           (if buffer-read-only "%" " ")
  26495. +;;;           (buffer-name)
  26496. +;;;           size
  26497. +;;;           mode-name
  26498. +;;;           (or (buffer-file-name) ""))))))
  26499. +
  26500. +(defun menu-bar-mode (flag)
  26501. +  "Toggle display of a menu bar on each frame.
  26502. +This command applies to all frames that exist and frames to be
  26503. +created in the future.
  26504. +With a numeric argument, if the argument is negative,
  26505. +turn off menu bars; otherwise, turn on menu bars."
  26506. + (interactive "P")
  26507. +
  26508. + ;; Obtain the current setting by looking at default-frame-alist.
  26509. + (let ((menu-bar-mode
  26510. +    (not (zerop (let ((assq (assq 'menu-bar-lines default-frame-alist)))
  26511. +              (if assq (cdr assq) 0))))))
  26512. +
  26513. +   ;; Tweedle it according to the argument.
  26514. +   (setq menu-bar-mode (if (null flag) (not menu-bar-mode)
  26515. +             (> (prefix-numeric-value flag) 0)))
  26516. +
  26517. +   ;; Apply it to default-frame-alist.
  26518. +   (let ((parameter (assq 'menu-bar-lines default-frame-alist)))
  26519. +     (if (consp parameter)
  26520. +     (setcdr parameter (if menu-bar-mode 1 0))
  26521. +       (setq default-frame-alist
  26522. +         (cons (cons 'menu-bar-lines (if menu-bar-mode 1 0))
  26523. +           default-frame-alist))))
  26524. +
  26525. +   ;; Apply it to existing frames.
  26526. +   (let ((frames (frame-list)))
  26527. +     (while frames
  26528. +       (let ((height (cdr (assq 'height (frame-parameters (car frames))))))
  26529. +     (modify-frame-parameters (car frames)
  26530. +                  (list (cons 'menu-bar-lines
  26531. +                        (if menu-bar-mode 1 0))))
  26532. +     (modify-frame-parameters (car frames)
  26533. +                  (list (cons 'height height))))
  26534. +       (setq frames (cdr frames))))))
  26535. +
  26536. +(provide 'menu-bar)
  26537. +
  26538. +;;; menu-bar.el ends here
  26539. diff -ru --new-file baseline/fsf/emacs/lisp/amiga-menu.el amiga/fsf/emacs/lisp/amiga-menu.el
  26540. --- baseline/fsf/emacs/lisp/amiga-menu.el    Wed Dec 31 17:00:00 1969
  26541. +++ amiga/fsf/emacs/lisp/amiga-menu.el    Sun Oct 15 17:06:26 1995
  26542. @@ -0,0 +1,135 @@
  26543. +;(provide 'amiga-menu)
  26544. +
  26545. +(defconst amiga-menu-pick (char-to-string 3))
  26546. +(defconst amiga-menu-help (char-to-string 7))
  26547. +
  26548. +(defvar amiga-menus-description nil
  26549. +  "Variable containing the menus setup for Emacs")
  26550. +
  26551. +(defun amiga-menus-set (menus)
  26552. +  "Setup menus for emacs (parameter as for amiga-menus)"
  26553. +  (define-key mouse-map amiga-menu-pick 'amiga-menus-dispatch)
  26554. +  (define-key mouse-map amiga-menu-help 'amiga-menus-help)
  26555. +  (setq amiga-menus-description menus)
  26556. +  (amiga-menus menus))
  26557. +
  26558. +(defun amiga-menus-dispatch (selection)
  26559. +  (let* ((menu (car selection))
  26560. +     (item (cadr selection))
  26561. +     (code (cadr (nth item (cadr (nth menu amiga-menus-description))))))
  26562. +    (if (and (listp code) (eq (car code) 'call-interactively)
  26563. +         (listp (cadr code)) (eq (car (cadr code)) 'quote))
  26564. +    (setq this-command (cadr (cadr code))))
  26565. +    (eval code)))
  26566. +
  26567. +(defun amiga-menus-help (selection)
  26568. +  (let* ((menu (car selection))
  26569. +     (item (cadr selection))
  26570. +     (cmd (cadr (nth item (cadr (nth menu amiga-menus-description))))))
  26571. +    (if (and (listp cmd) (eq (car cmd) 'call-interactively)
  26572. +         (listp (car (cdr cmd))) (eq (car (car (cdr cmd))) 'quote))
  26573. +    (describe-function (car (cdr (car (cdr cmd)))))
  26574. +    (error "Don't know how to describe %s" cmd))))
  26575. +
  26576. +(defun make-explicit-string (str)
  26577. +  (if (and (>= (length str) 2) (= (elt str 0) 27) (< (elt str 1) 128))
  26578. +      (key-description (concat (char-to-string (+ 128 (elt str 1)))
  26579. +                   (substring str 2)))
  26580. +      (key-description str)))
  26581. +
  26582. +(defun make-command-name (command str width)
  26583. +  (let ((keys (where-is-internal command nil t))
  26584. +    (string (if str str (symbol-name command))))
  26585. +    (if keys
  26586. +    (format (if width (format "%%-%ds%%s" (+ width 2)) "%s (%s)")
  26587. +        string (make-explicit-string keys))
  26588. +    string)))
  26589. +
  26590. +(defun menu-items (commands proportional)
  26591. +  (let* ((width (if proportional nil 0))
  26592. +     (names (mapcar
  26593. +         (function (lambda (cmd)
  26594. +                 (if cmd
  26595. +                 (let* ((name (if (symbolp cmd)
  26596. +                          (symbol-name cmd)
  26597. +                          (car cmd)))
  26598. +                    (len (length name)))
  26599. +                   (if (and (not proportional) (> len width))
  26600. +                       (setq width len))
  26601. +                   name))))
  26602. +         commands)))
  26603. +    (mapcar
  26604. +     (function (lambda (cmd)
  26605. +         (let ((name (car names)))
  26606. +           (setq names (cdr names))
  26607. +           (if cmd
  26608. +               (let ((command (if (symbolp cmd) cmd (cadr cmd))))
  26609. +             (list (make-command-name command name width)
  26610. +                   (list 'call-interactively (list 'quote command))
  26611. +                   (caddr cmd)))))))
  26612. +     commands)))
  26613. +
  26614. +(defun convert-menu-buffer (proportional)
  26615. +  "Convert the current buffer into a loadable menu file for emacs.\n\
  26616. +If PROPORTIONAL is true (or if a prefix arg is given), assume menu is in a \n\
  26617. +proportional font & present it differently."
  26618. +  (interactive "P")
  26619. +  (save-buffer)
  26620. +  (widen)
  26621. +  (goto-char 1)
  26622. +  (let ((menu-spec (reverse (read (current-buffer))))
  26623. +    menu-code)
  26624. +    (while menu-spec
  26625. +      (let ((menu-item (car menu-spec)))
  26626. +    (setq menu-code
  26627. +          (cons (list (car menu-item)
  26628. +              (menu-items (cdr menu-item) proportional))
  26629. +            menu-code))
  26630. +    (setq menu-spec (cdr menu-spec))))
  26631. +    (let ((new-buf
  26632. +       (find-file (concat
  26633. +               (substring (buffer-file-name) 0
  26634. +                  (string-match "\\.menu$" (buffer-file-name)))
  26635. +               ".el"))))
  26636. +      (erase-buffer)
  26637. +      (prin1 (list 'amiga-menus-set (list 'quote menu-code)) (current-buffer))
  26638. +      (beginning-of-buffer))))
  26639. +
  26640. +(defvar menu-mode-syntax-table nil
  26641. +  "Syntax table used while in menu mode.")
  26642. +
  26643. +(defvar menu-mode-abbrev-table nil
  26644. +  "Abbrev table used while in menu mode.")
  26645. +(define-abbrev-table 'menu-mode-abbrev-table ())
  26646. +
  26647. +(if menu-mode-syntax-table
  26648. +    ()
  26649. +  (setq menu-mode-syntax-table (make-syntax-table))
  26650. +  (modify-syntax-entry ?' "w   " menu-mode-syntax-table))
  26651. +
  26652. +(defvar menu-mode-map ())
  26653. +(if menu-mode-map
  26654. +    ()
  26655. +  (setq menu-mode-map (make-sparse-keymap))
  26656. +  (define-key menu-mode-map "\t" 'indent-relative)
  26657. +  (define-key menu-mode-map "\C-c\C-c" 'convert-menu-buffer))
  26658. +
  26659. +(defun menu-mode ()
  26660. +  "Major mode for editing menus intended for humans to read.
  26661. +Indentation works like in indented-text-mode. This could be improved.\\{menu-mode-map}
  26662. +Turning on menu-mode calls the value of the variable menu-mode-hook,
  26663. +if that value is non-nil."
  26664. +  (interactive)
  26665. +  (kill-all-local-variables)
  26666. +  (use-local-map menu-mode-map)
  26667. +  (define-abbrev-table 'menu-mode-abbrev-table ())
  26668. +  (setq local-abbrev-table menu-mode-abbrev-table)
  26669. +  (set-syntax-table menu-mode-syntax-table)
  26670. +  (make-local-variable 'indent-line-function)
  26671. +  (setq indent-line-function 'indent-relative-maybe)
  26672. +  (use-local-map menu-mode-map)
  26673. +  (setq mode-name "Menu")
  26674. +  (setq major-mode 'menu-mode)
  26675. +  (run-hooks 'menu-mode-hook))
  26676. +
  26677. +(setq auto-mode-alist (cons '("\\.menu$" . menu-mode) auto-mode-alist))
  26678. diff -ru --new-file baseline/fsf/emacs/lisp/amiga-mouse-old.el amiga/fsf/emacs/lisp/amiga-mouse-old.el
  26679. --- baseline/fsf/emacs/lisp/amiga-mouse-old.el    Wed Dec 31 17:00:00 1969
  26680. +++ amiga/fsf/emacs/lisp/amiga-mouse-old.el    Sun Oct 15 17:06:27 1995
  26681. @@ -0,0 +1,276 @@
  26682. +;; Mouse support for Amiga Intuition window system.
  26683. +;; Copyright (C) 1985, 1987 Free Software Foundation, Inc.
  26684. +
  26685. +;; This file is part of GNU Emacs.
  26686. +
  26687. +;; GNU Emacs is distributed in the hope that it will be useful,
  26688. +;; but WITHOUT ANY WARRANTY.  No author or distributor
  26689. +;; accepts responsibility to anyone for the consequences of using it
  26690. +;; or for whether it serves any particular purpose or works at all,
  26691. +;; unless he says so in writing.  Refer to the GNU Emacs General Public
  26692. +;; License for full details.
  26693. +
  26694. +;; Everyone is granted permission to copy, modify and redistribute
  26695. +;; GNU Emacs, but only under the conditions described in the
  26696. +;; GNU Emacs General Public License.   A copy of this license is
  26697. +;; supposed to have been given to you along with GNU Emacs so you
  26698. +;; can know your rights and responsibilities.  It should be in a
  26699. +;; file named COPYING.  Among other things, the copyright notice
  26700. +;; and this notice must be preserved on all copies.
  26701. +
  26702. +(provide 'amiga-mouse)
  26703. +
  26704. +(defconst amiga-button-right (char-to-string 0))
  26705. +(defconst amiga-button-middle (char-to-string 1))
  26706. +(defconst amiga-button-left (char-to-string 2))
  26707. +
  26708. +(defconst amiga-button-right-up (char-to-string 4))
  26709. +(defconst amiga-button-middle-up (char-to-string 5))
  26710. +(defconst amiga-button-left-up (char-to-string 6))
  26711. +
  26712. +(defconst amiga-button-s-right (char-to-string 16))
  26713. +(defconst amiga-button-s-middle (char-to-string 17))
  26714. +(defconst amiga-button-s-left (char-to-string 18))
  26715. +
  26716. +(defconst amiga-button-s-right-up (char-to-string 20))
  26717. +(defconst amiga-button-s-middle-up (char-to-string 21))
  26718. +(defconst amiga-button-s-left-up (char-to-string 22))
  26719. +
  26720. +(defconst amiga-button-m-right (char-to-string 32))
  26721. +(defconst amiga-button-m-middle (char-to-string 33))
  26722. +(defconst amiga-button-m-left (char-to-string 34))
  26723. +
  26724. +(defconst amiga-button-m-right-up (char-to-string 36))
  26725. +(defconst amiga-button-m-middle-up (char-to-string 37))
  26726. +(defconst amiga-button-m-left-up (char-to-string 38))
  26727. +
  26728. +(defconst amiga-button-c-right (char-to-string 64))
  26729. +(defconst amiga-button-c-middle (char-to-string 65))
  26730. +(defconst amiga-button-c-left (char-to-string 66))
  26731. +
  26732. +(defconst amiga-button-c-right-up (char-to-string 68))
  26733. +(defconst amiga-button-c-middle-up (char-to-string 69))
  26734. +(defconst amiga-button-c-left-up (char-to-string 70))
  26735. +
  26736. +(defconst amiga-button-m-s-right (char-to-string 48))
  26737. +(defconst amiga-button-m-s-middle (char-to-string 49))
  26738. +(defconst amiga-button-m-s-left (char-to-string 50))
  26739. +
  26740. +(defconst amiga-button-m-s-right-up (char-to-string 52))
  26741. +(defconst amiga-button-m-s-middle-up (char-to-string 53))
  26742. +(defconst amiga-button-m-s-left-up (char-to-string 54))
  26743. +
  26744. +(defconst amiga-button-c-s-right (char-to-string 80))
  26745. +(defconst amiga-button-c-s-middle (char-to-string 81))
  26746. +(defconst amiga-button-c-s-left (char-to-string 82))
  26747. +
  26748. +(defconst amiga-button-c-s-right-up (char-to-string 84))
  26749. +(defconst amiga-button-c-s-middle-up (char-to-string 85))
  26750. +(defconst amiga-button-c-s-left-up (char-to-string 86))
  26751. +
  26752. +(defconst amiga-button-c-m-right (char-to-string 96))
  26753. +(defconst amiga-button-c-m-middle (char-to-string 97))
  26754. +(defconst amiga-button-c-m-left (char-to-string 98))
  26755. +
  26756. +(defconst amiga-button-c-m-right-up (char-to-string 100))
  26757. +(defconst amiga-button-c-m-middle-up (char-to-string 101))
  26758. +(defconst amiga-button-c-m-left-up (char-to-string 102))
  26759. +
  26760. +(defconst amiga-button-c-m-s-right (char-to-string 112))
  26761. +(defconst amiga-button-c-m-s-middle (char-to-string 113))
  26762. +(defconst amiga-button-c-m-s-left (char-to-string 114))
  26763. +
  26764. +(defconst amiga-button-c-m-s-right-up (char-to-string 116))
  26765. +(defconst amiga-button-c-m-s-middle-up (char-to-string 117))
  26766. +(defconst amiga-button-c-m-s-left-up (char-to-string 118))
  26767. +
  26768. +(defmacro cadr (x) (list 'car (list 'cdr x)))
  26769. +(defmacro caddr (x) (list 'car (list 'cdr (list 'cdr x))))
  26770. +(defmacro cadddr (x) (list 'car (list 'cdr (list 'cdr (list 'cdr x)))))
  26771. +
  26772. +(defun coordinates-in-window-p (arg w)
  26773. +  (let ((x (car arg))
  26774. +    (y (cadr arg))
  26775. +    (edges (window-edges w)))
  26776. +    (and (>= x (car edges)) (< x (caddr edges))
  26777. +     (>= y (cadr edges)) (< y (cadddr edges))
  26778. +     (list (- x (car edges)) (- y (cadr edges))))))
  26779. +
  26780. +(defvar amiga-process-mouse-hook nil
  26781. +  "Hook to run after each mouse event is processed.  Should take two
  26782. +arguments; the first being a list (XPOS YPOS) corresponding to character
  26783. +offset from top left of screen and the second being a specifier for the
  26784. +buttons/keys.
  26785. +
  26786. +This will normally be set on a per-buffer basis.")
  26787. +
  26788. +(defun amiga-flush-mouse-queue () 
  26789. +  "Process all queued mouse events."
  26790. +  ;; A mouse event causes a special character sequence to be given
  26791. +  ;; as keyboard input.  That runs this function, which process all
  26792. +  ;; queued mouse events and returns.
  26793. +  (interactive)
  26794. +  (while (> (amiga-mouse-events) 0)
  26795. +    (amiga-proc-mouse-event)
  26796. +    (and (boundp 'amiga-process-mouse-hook)
  26797. +     (symbol-value 'amiga-process-mouse-hook)
  26798. +     (funcall amiga-process-mouse-hook amiga-mouse-pos amiga-mouse-item))))
  26799. +
  26800. +(defun amiga-mouse-select (arg)
  26801. +  "Select Emacs window the mouse is on."
  26802. +  (let ((start-w (selected-window))
  26803. +    (done nil)
  26804. +    (w (selected-window))
  26805. +    (rel-coordinate nil))
  26806. +    (if (eq start-w (minibuffer-window))
  26807. +    (setq rel-coordinate (coordinates-in-window-p arg w))
  26808. +    (while (and (not done)
  26809. +            (null (setq rel-coordinate
  26810. +                (coordinates-in-window-p arg w))))
  26811. +      (setq w (next-window w))
  26812. +      (if (eq w start-w)
  26813. +          (setq done t))))
  26814. +    (select-window w)
  26815. +    rel-coordinate))
  26816. +
  26817. +(defun amiga-mouse-keep-one-window (arg)
  26818. +  "Select Emacs window mouse is on, then kill all other Emacs windows."
  26819. +  (if (amiga-mouse-select arg)
  26820. +      (delete-other-windows)))
  26821. +
  26822. +(defun amiga-mouse-select-and-split (arg)
  26823. +  "Select Emacs window mouse is on, then split it vertically in half."
  26824. +  (if (amiga-mouse-select arg)
  26825. +      (split-window-vertically nil)))
  26826. +
  26827. +
  26828. +(defun amiga-mouse-set-point (arg)
  26829. +  "Select Emacs window mouse is on, and move point to mouse position."
  26830. +  (let* ((relative-coordinate (amiga-mouse-select arg))
  26831. +     margin-column
  26832. +     (rel-x (car relative-coordinate))
  26833. +     (rel-y (car (cdr relative-coordinate))))
  26834. +    (if relative-coordinate
  26835. +    (let ((prompt-width (if (eq (selected-window) (minibuffer-window))
  26836. +                minibuffer-prompt-width 0)))
  26837. +      (move-to-window-line rel-y)
  26838. +      (setq margin-column
  26839. +        (if (or truncate-lines (> (window-hscroll) 0))
  26840. +            (current-column)
  26841. +          ;; If we are using line continuation,
  26842. +          ;; compensate if first character on a continuation line
  26843. +          ;; does not start precisely at the margin.
  26844. +          (- (current-column)
  26845. +             (% (current-column) (1- (window-width))))))
  26846. +      (move-to-column (+ rel-x (1- (max 1 (window-hscroll)))
  26847. +                 (if (= (point) 1)
  26848. +                 (- prompt-width) 0)
  26849. +                 margin-column))))))
  26850. +
  26851. +(defun amiga-mouse-set-mark (arg)
  26852. +  "Select Emacs window mouse is on, and set mark at mouse position.
  26853. +Display cursor at that position for a second."
  26854. +  (if (amiga-mouse-select arg)
  26855. +      (let ((point-save (point)))
  26856. +    (unwind-protect
  26857. +        (progn (amiga-mouse-set-point arg)
  26858. +           (push-mark nil t)
  26859. +           (sit-for 1))
  26860. +      (goto-char point-save)))))
  26861. +
  26862. +(defun amiga-mouse-cut (arg)
  26863. +  "Select Emacs window mouse is on, and set mark at mouse position. 
  26864. +Display cursor at that position for a second. Then cut."
  26865. +  (if (amiga-mouse-select arg)
  26866. +      (let ((point-save (point)))
  26867. +    (unwind-protect
  26868. +        (progn (amiga-mouse-set-point arg)
  26869. +           (push-mark nil t)
  26870. +           (kill-region point-save (point))
  26871. +           (sit-for 1))
  26872. +      (goto-char point-save)))))
  26873. +
  26874. +(defun amiga-mouse-copy (arg)
  26875. +  "Select Emacs window mouse is on, and set mark at mouse position. 
  26876. +Display cursor at that position for a second. Then copy."
  26877. +  (if (amiga-mouse-select arg)
  26878. +      (let ((point-save (point)))
  26879. +    (unwind-protect
  26880. +        (progn (amiga-mouse-set-point arg)
  26881. +           (push-mark nil t)
  26882. +           (copy-region-as-kill point-save (point))
  26883. +           (sit-for 1))
  26884. +      (goto-char point-save)))))
  26885. +
  26886. +(defun amiga-mouse-paste (arg)
  26887. +  "Move point to mouse position (and select window), then paste."
  26888. +  (if (amiga-mouse-select arg)
  26889. +      (progn
  26890. +    (amiga-mouse-set-point arg)
  26891. +    (yank))))
  26892. +
  26893. +(defun amiga-mouse-iconify (arg) (amiga-iconify))
  26894. +
  26895. +(defun amiga-mouse-ignore (arg)
  26896. +  "Don't do anything.")
  26897. +
  26898. +; Prevent beeps. on button-up.  If the button isn't bound to anything, it
  26899. +(define-key mouse-map amiga-button-right 'amiga-mouse-ignore)
  26900. +(define-key mouse-map amiga-button-middle 'amiga-mouse-ignore)
  26901. +(define-key mouse-map amiga-button-left 'amiga-mouse-ignore)
  26902. +(define-key mouse-map amiga-button-right-up 'amiga-mouse-ignore)
  26903. +(define-key mouse-map amiga-button-middle-up 'amiga-mouse-ignore)
  26904. +(define-key mouse-map amiga-button-left-up 'amiga-mouse-ignore)
  26905. +(define-key mouse-map amiga-button-s-right 'amiga-mouse-ignore)
  26906. +(define-key mouse-map amiga-button-s-middle 'amiga-mouse-ignore)
  26907. +(define-key mouse-map amiga-button-s-left 'amiga-mouse-ignore)
  26908. +(define-key mouse-map amiga-button-s-right-up 'amiga-mouse-ignore)
  26909. +(define-key mouse-map amiga-button-s-middle-up 'amiga-mouse-ignore)
  26910. +(define-key mouse-map amiga-button-s-left-up 'amiga-mouse-ignore)
  26911. +(define-key mouse-map amiga-button-m-right 'amiga-mouse-ignore)
  26912. +(define-key mouse-map amiga-button-m-middle 'amiga-mouse-ignore)
  26913. +(define-key mouse-map amiga-button-m-left 'amiga-mouse-ignore)
  26914. +(define-key mouse-map amiga-button-m-right-up 'amiga-mouse-ignore)
  26915. +(define-key mouse-map amiga-button-m-middle-up 'amiga-mouse-ignore)
  26916. +(define-key mouse-map amiga-button-m-left-up 'amiga-mouse-ignore)
  26917. +(define-key mouse-map amiga-button-c-right 'amiga-mouse-ignore)
  26918. +(define-key mouse-map amiga-button-c-middle 'amiga-mouse-ignore)
  26919. +(define-key mouse-map amiga-button-c-left 'amiga-mouse-ignore)
  26920. +(define-key mouse-map amiga-button-c-right-up 'amiga-mouse-ignore)
  26921. +(define-key mouse-map amiga-button-c-middle-up 'amiga-mouse-ignore)
  26922. +(define-key mouse-map amiga-button-c-left-up 'amiga-mouse-ignore)
  26923. +(define-key mouse-map amiga-button-m-s-right 'amiga-mouse-ignore)
  26924. +(define-key mouse-map amiga-button-m-s-middle 'amiga-mouse-ignore)
  26925. +(define-key mouse-map amiga-button-m-s-left 'amiga-mouse-ignore)
  26926. +(define-key mouse-map amiga-button-m-s-right-up 'amiga-mouse-ignore)
  26927. +(define-key mouse-map amiga-button-m-s-middle-up 'amiga-mouse-ignore)
  26928. +(define-key mouse-map amiga-button-m-s-left-up 'amiga-mouse-ignore)
  26929. +(define-key mouse-map amiga-button-c-s-right 'amiga-mouse-ignore)
  26930. +(define-key mouse-map amiga-button-c-s-middle 'amiga-mouse-ignore)
  26931. +(define-key mouse-map amiga-button-c-s-left 'amiga-mouse-ignore)
  26932. +(define-key mouse-map amiga-button-c-s-right-up 'amiga-mouse-ignore)
  26933. +(define-key mouse-map amiga-button-c-s-middle-up 'amiga-mouse-ignore)
  26934. +(define-key mouse-map amiga-button-c-s-left-up 'amiga-mouse-ignore)
  26935. +(define-key mouse-map amiga-button-c-m-right 'amiga-mouse-ignore)
  26936. +(define-key mouse-map amiga-button-c-m-middle 'amiga-mouse-ignore)
  26937. +(define-key mouse-map amiga-button-c-m-left 'amiga-mouse-ignore)
  26938. +(define-key mouse-map amiga-button-c-m-right-up 'amiga-mouse-ignore)
  26939. +(define-key mouse-map amiga-button-c-m-middle-up 'amiga-mouse-ignore)
  26940. +(define-key mouse-map amiga-button-c-m-left-up 'amiga-mouse-ignore)
  26941. +(define-key mouse-map amiga-button-c-m-s-right 'amiga-mouse-ignore)
  26942. +(define-key mouse-map amiga-button-c-m-s-middle 'amiga-mouse-ignore)
  26943. +(define-key mouse-map amiga-button-c-m-s-left 'amiga-mouse-ignore)
  26944. +(define-key mouse-map amiga-button-c-m-s-right-up 'amiga-mouse-ignore)
  26945. +(define-key mouse-map amiga-button-c-m-s-middle-up 'amiga-mouse-ignore)
  26946. +(define-key mouse-map amiga-button-c-m-s-left-up 'amiga-mouse-ignore)
  26947. +
  26948. +; Define a few events
  26949. +(define-key mouse-map amiga-button-left 'amiga-mouse-set-point)
  26950. +(define-key mouse-map amiga-button-s-left 'amiga-mouse-set-mark)
  26951. +(define-key mouse-map amiga-button-c-left 'amiga-mouse-cut)
  26952. +(define-key mouse-map amiga-button-m-left 'amiga-mouse-copy)
  26953. +(define-key mouse-map amiga-button-middle 'amiga-mouse-paste)
  26954. +(define-key mouse-map amiga-button-s-middle 'amiga-mouse-iconify)
  26955. +
  26956. +(define-key amiga-map "M" 'amiga-flush-mouse-queue)
  26957. +(setq amiga-mouse-initialized t)  ;; Mouse commands can now be processed.
  26958. diff -ru --new-file baseline/fsf/emacs/lisp/amiga-mouse.el amiga/fsf/emacs/lisp/amiga-mouse.el
  26959. --- baseline/fsf/emacs/lisp/amiga-mouse.el    Wed Dec 31 17:00:00 1969
  26960. +++ amiga/fsf/emacs/lisp/amiga-mouse.el    Sun Oct 15 17:06:29 1995
  26961. @@ -0,0 +1,1025 @@
  26962. +;;; amiga-mouse.el --- amiga intuition version of mouse.el
  26963. +;;; mouse.el claims to provide window system-independent mouse support but
  26964. +;;; there are too many X dependancies.
  26965. +
  26966. +;;; Copyright (C) 1993, 1994 Free Software Foundation, Inc.
  26967. +
  26968. +;; Maintainer: Alph (change to FSF if you like)
  26969. +;; Keywords: hardware
  26970. +
  26971. +;;; This file is part of GNU Emacs.
  26972. +
  26973. +;;; GNU Emacs is free software; you can redistribute it and/or modify
  26974. +;;; it under the terms of the GNU General Public License as published by
  26975. +;;; the Free Software Foundation; either version 2, or (at your option)
  26976. +;;; any later version.
  26977. +
  26978. +;;; GNU Emacs is distributed in the hope that it will be useful,
  26979. +;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  26980. +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  26981. +;;; GNU General Public License for more details.
  26982. +
  26983. +;;; You should have received a copy of the GNU General Public License
  26984. +;;; along with GNU Emacs; see the file COPYING.  If not, write to
  26985. +;;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  26986. +
  26987. +;;; Commentary:
  26988. +
  26989. +;; This package provides various useful commands (including help
  26990. +;; system access) through the mouse.  All this code assumes that mouse
  26991. +;; interpretation has been abstracted into Emacs input events.
  26992. +;;
  26993. +;; The code is not X-dependent.
  26994. +
  26995. +;;; Code:
  26996. +
  26997. +;;; Utility functions.
  26998. +
  26999. +;;; Indent track-mouse like progn.
  27000. +(put 'track-mouse 'lisp-indent-function 0)
  27001. +
  27002. +(defvar mouse-yank-at-point nil
  27003. +  "*If non-nil, mouse yank commands yank at point instead of at click.")
  27004. +
  27005. +(defun mouse-minibuffer-check (event)
  27006. +  (let ((w (posn-window (event-start event))))
  27007. +    (and (window-minibuffer-p w)
  27008. +     (not (minibuffer-window-active-p w))
  27009. +     (error "Minibuffer window is not active"))))
  27010. +
  27011. +(defun mouse-delete-window (click)
  27012. +  "Delete the window you click on.
  27013. +This must be bound to a mouse click."
  27014. +  (interactive "e")
  27015. +  (mouse-minibuffer-check click)
  27016. +  (delete-window (posn-window (event-start click))))
  27017. +
  27018. +(defun mouse-select-window (click)
  27019. +  "Select the window clicked on; don't move point."
  27020. +  (interactive "e")
  27021. +  (mouse-minibuffer-check click)
  27022. +  (let ((oframe (selected-frame))
  27023. +    (frame (window-frame (posn-window (event-start click)))))
  27024. +    (select-window (posn-window (event-start click)))
  27025. +    (raise-frame frame)
  27026. +    (select-frame frame)
  27027. +    (or (eq frame oframe)
  27028. +    (set-mouse-position (selected-frame) (1- (frame-width)) 0))
  27029. +    (unfocus-frame)))
  27030. +
  27031. +;(defun mouse-tear-off-window (click)
  27032. +;  "Delete the window clicked on, and create a new frame displaying its buffer."
  27033. +;  (interactive "e")
  27034. +;  (mouse-minibuffer-check click)
  27035. +;  (let* ((window (posn-window (event-start click)))
  27036. +;     (buf (window-buffer window))
  27037. +;     (frame (make-frame)))
  27038. +;    (select-frame frame)
  27039. +;    (switch-to-buffer buf)
  27040. +;    (delete-window window)))
  27041. +
  27042. +(defun mouse-delete-other-windows ()
  27043. +  "Delete all window except the one you click on."
  27044. +  (interactive "@")
  27045. +  (delete-other-windows))
  27046. +
  27047. +(defun mouse-split-window-vertically (click)
  27048. +  "Select Emacs window mouse is on, then split it vertically in half.
  27049. +The window is split at the line clicked on.
  27050. +This command must be bound to a mouse click."
  27051. +  (interactive "@e")
  27052. +  (mouse-minibuffer-check click)
  27053. +  (let ((start (event-start click)))
  27054. +    (select-window (posn-window start))
  27055. +    (let ((new-height (1+ (cdr (posn-col-row (event-end click)))))
  27056. +      (first-line window-min-height)
  27057. +      (last-line (- (window-height) window-min-height)))
  27058. +      (if (< last-line first-line)
  27059. +      (error "window too short to split")
  27060. +    (split-window-vertically
  27061. +     (min (max new-height first-line) last-line))))))
  27062. +
  27063. +(defun mouse-split-window-horizontally (click)
  27064. +  "Select Emacs window mouse is on, then split it horizontally in half.
  27065. +The window is split at the column clicked on.
  27066. +This command must be bound to a mouse click."
  27067. +  (interactive "@e")
  27068. +  (mouse-minibuffer-check click)
  27069. +  (let ((start (event-start click)))
  27070. +    (select-window (posn-window start))
  27071. +    (let ((new-width (1+ (car (posn-col-row (event-end click)))))
  27072. +      (first-col window-min-width)
  27073. +      (last-col (- (window-width) window-min-width)))
  27074. +      (if (< last-col first-col)
  27075. +      (error "window too narrow to split")
  27076. +    (split-window-horizontally
  27077. +     (min (max new-width first-col) last-col))))))
  27078. +
  27079. +(defun mouse-set-point (event)
  27080. +  "Move point to the position clicked on with the mouse.
  27081. +This should be bound to a mouse click event type."
  27082. +  (interactive "e")
  27083. +  (mouse-minibuffer-check event)
  27084. +  ;; Use event-end in case called from mouse-drag-region.
  27085. +  ;; If EVENT is a click, event-end and event-start give same value.
  27086. +  (let ((posn (event-end event)))
  27087. +    (select-window (posn-window posn))
  27088. +    (if (numberp (posn-point posn))
  27089. +    (goto-char (posn-point posn)))))
  27090. +
  27091. +(defun mouse-set-region (click)
  27092. +  "Set the region to the text dragged over, and copy to kill ring.
  27093. +This should be bound to a mouse drag event."
  27094. +  (interactive "e")
  27095. +  (mouse-minibuffer-check click)
  27096. +  (let ((posn (event-start click))
  27097. +    (end (event-end click)))
  27098. +    (select-window (posn-window posn))
  27099. +    (if (numberp (posn-point posn))
  27100. +    (goto-char (posn-point posn)))
  27101. +    ;; If mark is highlighted, no need to bounce the cursor.
  27102. +    (or (and transient-mark-mode
  27103. +         (eq (framep (selected-frame)) 'x))
  27104. +    (sit-for 1))
  27105. +    (push-mark)
  27106. +    (set-mark (point))
  27107. +    (if (numberp (posn-point end))
  27108. +    (goto-char (posn-point end)))
  27109. +    ;; Don't set this-command to kill-region, so that a following
  27110. +    ;; C-w will not double the text in the kill ring.
  27111. +    (let (this-command)
  27112. +      (copy-region-as-kill (mark) (point)))))
  27113. +
  27114. +(defvar mouse-scroll-delay 0.25
  27115. +  "*The pause between scroll steps caused by mouse drags, in seconds.
  27116. +If you drag the mouse beyond the edge of a window, Emacs scrolls the
  27117. +window to bring the text beyond that edge into view, with a delay of
  27118. +this many seconds between scroll steps.  Scrolling stops when you move
  27119. +the mouse back into the window, or release the button.
  27120. +This variable's value may be non-integral.
  27121. +Setting this to zero causes Emacs to scroll as fast as it can.")
  27122. +
  27123. +(defun mouse-scroll-subr (jump &optional overlay start)
  27124. +  "Scroll the selected window JUMP lines at a time, until new input arrives.
  27125. +If OVERLAY is an overlay, let it stretch from START to the far edge of
  27126. +the newly visible text.
  27127. +Upon exit, point is at the far edge of the newly visible text."
  27128. +  (while (progn
  27129. +       (goto-char (window-start))
  27130. +       (if (not (zerop (vertical-motion jump)))
  27131. +           (progn
  27132. +         (set-window-start (selected-window) (point))
  27133. +         (if (natnump jump)
  27134. +             (progn
  27135. +               (goto-char (window-end (selected-window)))
  27136. +               ;; window-end doesn't reflect the window's new
  27137. +               ;; start position until the next redisplay.  Hurrah.
  27138. +               (vertical-motion (1- jump)))
  27139. +           (goto-char (window-start (selected-window))))
  27140. +         (if overlay
  27141. +             (move-overlay overlay start (point)))
  27142. +         (if (not (eobp))
  27143. +             (sit-for mouse-scroll-delay))))))
  27144. +  (point))
  27145. +
  27146. +; CHFIXME: no dump support for overlays (yet ?)
  27147. +;(defvar mouse-drag-overlay (make-overlay 1 1))
  27148. +;(overlay-put mouse-drag-overlay 'face 'region)
  27149. +
  27150. +(defvar mouse-selection-click-count 0)
  27151. +
  27152. +(defun mouse-drag-region (start-event)
  27153. +  "Set the region to the text that the mouse is dragged over.
  27154. +Highlight the drag area as you move the mouse.
  27155. +This must be bound to a button-down mouse event.
  27156. +In Transient Mark mode, the highlighting remains once you
  27157. +release the mouse button.  Otherwise, it does not."
  27158. +  (interactive "e")
  27159. +  (mouse-minibuffer-check start-event)
  27160. +  (let* ((start-posn (event-start start-event))
  27161. +     (start-point (posn-point start-posn))
  27162. +     (start-window (posn-window start-posn))
  27163. +     (start-frame (window-frame start-window))
  27164. +     (bounds (window-edges start-window))
  27165. +     (top (nth 1 bounds))
  27166. +     (bottom (if (window-minibuffer-p start-window)
  27167. +             (nth 3 bounds)
  27168. +           ;; Don't count the mode line.
  27169. +           (1- (nth 3 bounds))))
  27170. +     (click-count (1- (event-click-count start-event))))
  27171. +    (setq mouse-selection-click-count click-count)
  27172. +    (mouse-set-point start-event)
  27173. +    (let ((range (mouse-start-end start-point start-point click-count)))
  27174. +      (move-overlay mouse-drag-overlay (car range) (nth 1 range)
  27175. +            (window-buffer start-window)))
  27176. +    (deactivate-mark)
  27177. +    (let (event end end-point)
  27178. +      (track-mouse
  27179. +    (while (progn
  27180. +         (setq event (read-event))
  27181. +         (or (mouse-movement-p event)
  27182. +             (eq (car-safe event) 'switch-frame)))
  27183. +      (if (eq (car-safe event) 'switch-frame)
  27184. +          nil
  27185. +        (setq end (event-end event)
  27186. +          end-point (posn-point end))
  27187. +
  27188. +        (cond
  27189. +
  27190. +         ;; Ignore switch-frame events.
  27191. +         ((eq (car-safe event) 'switch-frame))
  27192. +
  27193. +         ;; Are we moving within the original window?
  27194. +         ((and (eq (posn-window end) start-window)
  27195. +           (integer-or-marker-p end-point))
  27196. +          (goto-char end-point)
  27197. +          (let ((range (mouse-start-end start-point (point) click-count)))
  27198. +        (move-overlay mouse-drag-overlay (car range) (nth 1 range))))
  27199. +
  27200. +         (t
  27201. +          (let ((mouse-row (cdr (cdr (mouse-position)))))
  27202. +        (cond
  27203. +         ((null mouse-row))
  27204. +         ((< mouse-row top)
  27205. +          (mouse-scroll-subr
  27206. +           (- mouse-row top) mouse-drag-overlay start-point))
  27207. +         ((and (not (eobp))
  27208. +               (>= mouse-row bottom))
  27209. +          (mouse-scroll-subr (1+ (- mouse-row bottom))
  27210. +                     mouse-drag-overlay start-point)))))))))
  27211. +
  27212. +      (if (and (eq (get (event-basic-type event) 'event-kind) 'mouse-click)
  27213. +           (eq (posn-window (event-end event)) start-window)
  27214. +           (numberp (posn-point (event-end event))))
  27215. +      (let ((fun (key-binding (vector (car event)))))
  27216. +        (if (memq fun '(mouse-set-region mouse-set-point))
  27217. +        (if (not (= (overlay-start mouse-drag-overlay)
  27218. +                (overlay-end mouse-drag-overlay)))
  27219. +            (let (this-command)
  27220. +              (push-mark (overlay-start mouse-drag-overlay) t t)
  27221. +              (goto-char (overlay-end mouse-drag-overlay))
  27222. +              (copy-region-as-kill (point) (mark t)))
  27223. +          (goto-char (overlay-end mouse-drag-overlay))
  27224. +          (setq this-command 'mouse-set-point))
  27225. +          (if (fboundp fun)
  27226. +          (funcall fun event)))))
  27227. +      (delete-overlay mouse-drag-overlay))))
  27228. +
  27229. +;; Commands to handle xterm-style multiple clicks.
  27230. +
  27231. +(defun mouse-skip-word (dir)
  27232. +  "Skip over word, over whitespace, or over identical punctuation.
  27233. +If DIR is positive skip forward; if negative, skip backward."
  27234. +  (let* ((char (following-char))
  27235. +     (syntax (char-to-string (char-syntax char))))
  27236. +    (if (or (string= syntax "w") (string= syntax " "))
  27237. +    (if (< dir 0)
  27238. +        (skip-syntax-backward syntax)
  27239. +      (skip-syntax-forward syntax))
  27240. +      (if (< dir 0)
  27241. +      (while (and (not (bobp)) (= (preceding-char) char))
  27242. +        (forward-char -1))
  27243. +    (while (and (not (eobp)) (= (following-char) char))
  27244. +      (forward-char 1))))))
  27245. +
  27246. +;; Return a list of region bounds based on START and END according to MODE.
  27247. +;; If MODE is 0 then set point to (min START END), mark to (max START END).
  27248. +;; If MODE is 1 then set point to start of word at (min START END),
  27249. +;; mark to end of word at (max START END).
  27250. +;; If MODE is 2 then do the same for lines.
  27251. +(defun mouse-start-end (start end mode)
  27252. +  (if (> start end)
  27253. +      (let ((temp start))
  27254. +        (setq start end
  27255. +              end temp)))
  27256. +  (setq mode (mod mode 3))
  27257. +  (cond ((= mode 0)
  27258. +     (list start end))
  27259. +        ((and (= mode 1)
  27260. +              (= start end)
  27261. +          (char-after start)
  27262. +              (= (char-syntax (char-after start)) ?\())
  27263. +     (list start
  27264. +           (save-excursion
  27265. +         (goto-char start)
  27266. +         (forward-sexp 1)
  27267. +         (point))))
  27268. +        ((and (= mode 1)
  27269. +              (= start end)
  27270. +          (char-after start)
  27271. +              (= (char-syntax (char-after start)) ?\)))
  27272. +     (list (save-excursion 
  27273. +         (goto-char (1+ start))
  27274. +         (backward-sexp 1)
  27275. +         (point))
  27276. +           (1+ start)))
  27277. +        ((= mode 1)
  27278. +     (list (save-excursion
  27279. +         (goto-char start)
  27280. +         (mouse-skip-word -1)
  27281. +         (point))
  27282. +           (save-excursion
  27283. +         (goto-char end)
  27284. +         (mouse-skip-word 1)
  27285. +         (point))))
  27286. +        ((= mode 2)
  27287. +     (list (save-excursion
  27288. +         (goto-char start)
  27289. +         (beginning-of-line 1)
  27290. +         (point))
  27291. +           (save-excursion
  27292. +         (goto-char end)
  27293. +         (forward-line 1)
  27294. +         (point))))))
  27295. +
  27296. +;; Subroutine: set the mark where CLICK happened,
  27297. +;; but don't do anything else.
  27298. +(defun mouse-set-mark-fast (click)
  27299. +  (mouse-minibuffer-check click)
  27300. +  (let ((posn (event-start click)))
  27301. +    (select-window (posn-window posn))
  27302. +    (if (numberp (posn-point posn))
  27303. +    (push-mark (posn-point posn) t t))))
  27304. +
  27305. +;; Momentarily show where the mark is, if highlighting doesn't show it. 
  27306. +(defun mouse-show-mark ()
  27307. +  (or transient-mark-mode
  27308. +      (save-excursion
  27309. +    (goto-char (mark t))
  27310. +    (sit-for 1))))
  27311. +
  27312. +(defun mouse-set-mark (click)
  27313. +  "Set mark at the position clicked on with the mouse.
  27314. +Display cursor at that position for a second.
  27315. +This must be bound to a mouse click."
  27316. +  (interactive "e")
  27317. +  (let ((point-save (point)))
  27318. +    (unwind-protect
  27319. +    (progn (mouse-set-point click)
  27320. +           (push-mark nil t t)
  27321. +           (or transient-mark-mode
  27322. +           (sit-for 1)))
  27323. +      (goto-char point-save))))
  27324. +
  27325. +(defun mouse-kill (click)
  27326. +  "Kill the region between point and the mouse click.
  27327. +The text is saved in the kill ring, as with \\[kill-region]."
  27328. +  (interactive "e")
  27329. +  (mouse-minibuffer-check click)
  27330. +  (let* ((posn (event-start click))
  27331. +     (click-posn (posn-point posn)))
  27332. +    (select-window (posn-window posn))
  27333. +    (if (numberp click-posn)
  27334. +    (kill-region (min (point) click-posn)
  27335. +             (max (point) click-posn)))))
  27336. +
  27337. +(defun mouse-yank-at-click (click arg)
  27338. +  "Insert the last stretch of killed text at the position clicked on.
  27339. +Also move point to one end of the text thus inserted (normally the end).
  27340. +Prefix arguments are interpreted as with \\[yank].
  27341. +If `mouse-yank-at-point' is non-nil, insert at point
  27342. +regardless of where you click."
  27343. +  (interactive "e\nP")
  27344. +  (or mouse-yank-at-point (mouse-set-point click))
  27345. +  (setq this-command 'yank)
  27346. +  (yank arg))
  27347. +
  27348. +(defun mouse-kill-ring-save (click)
  27349. +  "Copy the region between point and the mouse click in the kill ring.
  27350. +This does not delete the region; it acts like \\[kill-ring-save]."
  27351. +  (interactive "e")
  27352. +  (mouse-set-mark-fast click)
  27353. +  (kill-ring-save (point) (mark t))
  27354. +  (mouse-show-mark))
  27355. +
  27356. +;;; This function used to delete the text between point and the mouse
  27357. +;;; whenever it was equal to the front of the kill ring, but some
  27358. +;;; people found that confusing.
  27359. +
  27360. +;;; A list (TEXT START END), describing the text and position of the last
  27361. +;;; invocation of mouse-save-then-kill.
  27362. +(defvar mouse-save-then-kill-posn nil)
  27363. +
  27364. +(defun mouse-save-then-kill-delete-region (beg end)
  27365. +  ;; We must make our own undo boundaries
  27366. +  ;; because they happen automatically only for the current buffer.
  27367. +  (undo-boundary)
  27368. +  (if (or (= beg end) (eq buffer-undo-list t))
  27369. +      ;; If we have no undo list in this buffer,
  27370. +      ;; just delete.
  27371. +      (delete-region beg end)
  27372. +    ;; Delete, but make the undo-list entry share with the kill ring.
  27373. +    ;; First, delete just one char, so in case buffer is being modified
  27374. +    ;; for the first time, the undo list records that fact.
  27375. +    (delete-region beg
  27376. +           (+ beg (if (> end beg) 1 -1)))
  27377. +    (let ((buffer-undo-list buffer-undo-list))
  27378. +      ;; Undo that deletion--but don't change the undo list!
  27379. +      (primitive-undo 1 buffer-undo-list)
  27380. +      ;; Now delete the rest of the specified region,
  27381. +      ;; but don't record it.
  27382. +      (setq buffer-undo-list t)
  27383. +      (if (/= (length (car kill-ring)) (- (max end beg) (min end beg)))
  27384. +      (error "Lossage in mouse-save-then-kill-delete-region"))
  27385. +      (delete-region beg end))
  27386. +    (let ((tail buffer-undo-list))
  27387. +      ;; Search back in buffer-undo-list for the string
  27388. +      ;; that came from deleting one character.
  27389. +      (while (and tail (not (stringp (car (car tail)))))
  27390. +    (setq tail (cdr tail)))
  27391. +      ;; Replace it with an entry for the entire deleted text.
  27392. +      (and tail
  27393. +       (setcar tail (cons (car kill-ring) (min beg end))))))
  27394. +  (undo-boundary))
  27395. +
  27396. +(defun mouse-save-then-kill (click)
  27397. +  "Save text to point in kill ring; the second time, kill the text.
  27398. +If the text between point and the mouse is the same as what's
  27399. +at the front of the kill ring, this deletes the text.
  27400. +Otherwise, it adds the text to the kill ring, like \\[kill-ring-save],
  27401. +which prepares for a second click to delete the text.
  27402. +
  27403. +If you have selected words or lines, this command extends the
  27404. +selection through the word or line clicked on.  If you do this
  27405. +again in a different position, it extends the selection again.
  27406. +If you do this twice in the same position, the selection is killed." 
  27407. +  (interactive "e")
  27408. +  (mouse-minibuffer-check click)
  27409. +  (let ((click-posn (posn-point (event-start click)))
  27410. +    ;; Don't let a subsequent kill command append to this one:
  27411. +    ;; prevent setting this-command to kill-region.
  27412. +    (this-command this-command))
  27413. +    (if (> (mod mouse-selection-click-count 3) 0)
  27414. +    (if (not (and (eq last-command 'mouse-save-then-kill)
  27415. +              (equal click-posn
  27416. +                 (car (cdr-safe (cdr-safe mouse-save-then-kill-posn))))))
  27417. +        ;; Find both ends of the object selected by this click.
  27418. +        (let* ((range
  27419. +            (mouse-start-end click-posn click-posn
  27420. +                     mouse-selection-click-count)))
  27421. +          ;; Move whichever end is closer to the click.
  27422. +          ;; That's what xterm does, and it seems reasonable.
  27423. +          (if (< (abs (- click-posn (mark t)))
  27424. +             (abs (- click-posn (point))))
  27425. +          (set-mark (car range))
  27426. +        (goto-char (nth 1 range)))
  27427. +          ;; We have already put the old region in the kill ring.
  27428. +          ;; Replace it with the extended region.
  27429. +          ;; (It would be annoying to make a separate entry.)
  27430. +          (setcar kill-ring (buffer-substring (point) (mark t)))
  27431. +          (if interprogram-cut-function
  27432. +          (funcall interprogram-cut-function (car kill-ring)))
  27433. +          ;; Arrange for a repeated mouse-3 to kill this region.
  27434. +          (setq mouse-save-then-kill-posn
  27435. +            (list (car kill-ring) (point) click-posn))
  27436. +          (mouse-show-mark))
  27437. +      ;; If we click this button again without moving it,
  27438. +      ;; that time kill.
  27439. +      (mouse-save-then-kill-delete-region (point) (mark))
  27440. +      (setq mouse-selection-click-count 0)
  27441. +      (setq mouse-save-then-kill-posn nil))
  27442. +      (if (and (eq last-command 'mouse-save-then-kill)
  27443. +           mouse-save-then-kill-posn
  27444. +           (eq (car mouse-save-then-kill-posn) (car kill-ring))
  27445. +           (equal (cdr mouse-save-then-kill-posn) (list (point) click-posn)))
  27446. +      ;; If this is the second time we've called
  27447. +      ;; mouse-save-then-kill, delete the text from the buffer.
  27448. +      (progn
  27449. +        (mouse-save-then-kill-delete-region (point) (mark))
  27450. +        ;; After we kill, another click counts as "the first time".
  27451. +        (setq mouse-save-then-kill-posn nil))
  27452. +    (if (or (and (eq last-command 'mouse-save-then-kill)
  27453. +             mouse-save-then-kill-posn)
  27454. +        (and mark-active transient-mark-mode)
  27455. +        (and (eq last-command 'mouse-drag-region)
  27456. +             (or mark-even-if-inactive
  27457. +             (not transient-mark-mode))))
  27458. +        ;; We have a selection or suitable region, so adjust it.
  27459. +        (let* ((posn (event-start click))
  27460. +           (new (posn-point posn)))
  27461. +          (select-window (posn-window posn))
  27462. +          (if (numberp new)
  27463. +          (progn
  27464. +            ;; Move whichever end of the region is closer to the click.
  27465. +            ;; That is what xterm does, and it seems reasonable.
  27466. +            (if (< (abs (- new (point))) (abs (- new (mark t))))
  27467. +            (goto-char new)
  27468. +              (set-mark new))
  27469. +            (setq deactivate-mark nil)))
  27470. +          (setcar kill-ring (buffer-substring (point) (mark t)))
  27471. +          (if interprogram-cut-function
  27472. +          (funcall interprogram-cut-function (car kill-ring))))
  27473. +      ;; We just have point, so set mark here.
  27474. +      (mouse-set-mark-fast click)
  27475. +      (kill-ring-save (point) (mark t))
  27476. +      (mouse-show-mark))
  27477. +    (setq mouse-save-then-kill-posn
  27478. +          (list (car kill-ring) (point) click-posn))))))
  27479. +
  27480. +;(global-set-key [M-mouse-1] 'mouse-start-secondary)
  27481. +;(global-set-key [M-drag-mouse-1] 'mouse-set-secondary)
  27482. +;(global-set-key [M-down-mouse-1] 'mouse-drag-secondary)
  27483. +;(global-set-key [M-mouse-3] 'mouse-secondary-save-then-kill)
  27484. +;(global-set-key [M-mouse-2] 'mouse-yank-secondary)
  27485. +
  27486. +;;
  27487. +;; CHFIXME no secondary (add clipboard support here?)
  27488. +;;
  27489. +
  27490. +;; An overlay which records the current secondary selection
  27491. +;; or else is deleted when there is no secondary selection.
  27492. +;; May be nil.
  27493. +;(defvar mouse-secondary-overlay nil)
  27494. +
  27495. +;; A marker which records the specified first end for a secondary selection.
  27496. +;; May be nil.
  27497. +;(defvar mouse-secondary-start nil)
  27498. +;
  27499. +;(defun mouse-start-secondary (click)
  27500. +;  "Set one end of the secondary selection to the position clicked on.
  27501. +;Use \\[mouse-secondary-save-then-kill] to set the other end
  27502. +;and complete the secondary selection."
  27503. +;  (interactive "e")
  27504. +;  (mouse-minibuffer-check click)
  27505. +;  (let ((posn (event-start click)))
  27506. +;    (save-excursion
  27507. +;      (set-buffer (window-buffer (posn-window posn)))
  27508. +;      ;; Cancel any preexisting secondary selection.
  27509. +;      (if mouse-secondary-overlay
  27510. +;      (delete-overlay mouse-secondary-overlay))
  27511. +;      (if (numberp (posn-point posn))
  27512. +;      (progn
  27513. +;        (or mouse-secondary-start
  27514. +;        (setq mouse-secondary-start (make-marker)))
  27515. +;        (move-marker mouse-secondary-start (posn-point posn)))))))
  27516. +;
  27517. +;(defun mouse-set-secondary (click)
  27518. +;  "Set the secondary selection to the text that the mouse is dragged over.
  27519. +;This must be bound to a mouse drag event."
  27520. +;  (interactive "e")
  27521. +;  (mouse-minibuffer-check click)
  27522. +;  (let ((posn (event-start click))
  27523. +;    beg
  27524. +;    (end (event-end click)))
  27525. +;    (save-excursion
  27526. +;      (set-buffer (window-buffer (posn-window posn)))
  27527. +;      (if (numberp (posn-point posn))
  27528. +;      (setq beg (posn-point posn)))
  27529. +;      (if mouse-secondary-overlay
  27530. +;      (move-overlay mouse-secondary-overlay beg (posn-point end))
  27531. +;    (setq mouse-secondary-overlay (make-overlay beg (posn-point end))))
  27532. +;      (overlay-put mouse-secondary-overlay 'face 'secondary-selection))))
  27533. +;
  27534. +;(defun mouse-drag-secondary (start-event)
  27535. +;  "Set the secondary selection to the text that the mouse is dragged over.
  27536. +;Highlight the drag area as you move the mouse.
  27537. +;This must be bound to a button-down mouse event."
  27538. +;  (interactive "e")
  27539. +;  (mouse-minibuffer-check start-event)
  27540. +;  (let* ((start-posn (event-start start-event))
  27541. +;     (start-point (posn-point start-posn))
  27542. +;     (start-window (posn-window start-posn))
  27543. +;     (start-frame (window-frame start-window))
  27544. +;     (bounds (window-edges start-window))
  27545. +;     (top (nth 1 bounds))
  27546. +;     (bottom (if (window-minibuffer-p start-window)
  27547. +;             (nth 3 bounds)
  27548. +;           ;; Don't count the mode line.
  27549. +;           (1- (nth 3 bounds))))
  27550. +;     (click-count (1- (event-click-count start-event))))
  27551. +;    (save-excursion
  27552. +;      (set-buffer (window-buffer start-window))
  27553. +;      (setq mouse-selection-click-count click-count)
  27554. +;      (or mouse-secondary-overlay
  27555. +;      (setq mouse-secondary-overlay
  27556. +;        (make-overlay (point) (point))))
  27557. +;      (overlay-put mouse-secondary-overlay 'face 'secondary-selection)
  27558. +;      (if (> (mod click-count 3) 0)
  27559. +;      ;; Double or triple press: make an initial selection
  27560. +;      ;; of one word or line.
  27561. +;      (let ((range (mouse-start-end start-point start-point click-count)))
  27562. +;        (set-marker mouse-secondary-start nil)
  27563. +;        (move-overlay mouse-secondary-overlay 1 1
  27564. +;              (window-buffer start-window))
  27565. +;        (move-overlay mouse-secondary-overlay (car range) (nth 1 range)
  27566. +;              (window-buffer start-window)))
  27567. +;    ;; Single-press: cancel any preexisting secondary selection.
  27568. +;    (or mouse-secondary-start
  27569. +;        (setq mouse-secondary-start (make-marker)))
  27570. +;    (set-marker mouse-secondary-start start-point)
  27571. +;    (delete-overlay mouse-secondary-overlay))
  27572. +;      (let (event end end-point)
  27573. +;    (track-mouse
  27574. +;      (while (progn
  27575. +;           (setq event (read-event))
  27576. +;           (or (mouse-movement-p event)
  27577. +;               (eq (car-safe event) 'switch-frame)))
  27578. +;
  27579. +;        (if (eq (car-safe event) 'switch-frame)
  27580. +;        nil
  27581. +;          (setq end (event-end event)
  27582. +;            end-point (posn-point end))
  27583. +;          (cond
  27584. +;
  27585. +;           ;; Ignore switch-frame events.
  27586. +;           ((eq (car-safe event) 'switch-frame))
  27587. +;
  27588. +;           ;; Are we moving within the original window?
  27589. +;           ((and (eq (posn-window end) start-window)
  27590. +;             (integer-or-marker-p end-point))
  27591. +;        (if (/= start-point end-point)
  27592. +;            (set-marker mouse-secondary-start nil))
  27593. +;        (let ((range (mouse-start-end start-point end-point
  27594. +;                          click-count)))
  27595. +;          (move-overlay mouse-secondary-overlay
  27596. +;                (car range) (nth 1 range))))
  27597. +;               (t
  27598. +;                (let ((mouse-row (cdr (cdr (mouse-position)))))
  27599. +;                  (cond
  27600. +;                   ((null mouse-row))
  27601. +;                   ((< mouse-row top)
  27602. +;                    (mouse-scroll-subr
  27603. +;                     (- mouse-row top) mouse-secondary-overlay start-point))
  27604. +;                   ((and (not (eobp))
  27605. +;                         (>= mouse-row bottom))
  27606. +;                    (mouse-scroll-subr (1+ (- mouse-row bottom))
  27607. +;                                       mouse-secondary-overlay start-point)))))))))
  27608. +;
  27609. +;    (if (and (eq (get (event-basic-type event) 'event-kind) 'mouse-click)
  27610. +;         (eq (posn-window (event-end event)) start-window)
  27611. +;         (numberp (posn-point (event-end event))))
  27612. +;        (if (marker-position mouse-secondary-start)
  27613. +;        (save-window-excursion
  27614. +;          (delete-overlay mouse-secondary-overlay)
  27615. +;          (x-set-selection 'SECONDARY nil)
  27616. +;          (select-window start-window)
  27617. +;          (save-excursion
  27618. +;            (goto-char mouse-secondary-start)
  27619. +;            (sit-for 1)))
  27620. +;          (x-set-selection
  27621. +;           'SECONDARY
  27622. +;           (buffer-substring (overlay-start mouse-secondary-overlay)
  27623. +;                 (overlay-end mouse-secondary-overlay)))))))))
  27624. +;
  27625. +;(defun mouse-yank-secondary (click)
  27626. +;  "Insert the secondary selection at the position clicked on.
  27627. +;Move point to the end of the inserted text.
  27628. +;If `mouse-yank-at-point' is non-nil, insert at point
  27629. +;regardless of where you click."
  27630. +;  (interactive "e")
  27631. +;  (or mouse-yank-at-point (mouse-set-point click))
  27632. +;  (insert (x-get-selection 'SECONDARY)))
  27633. +;
  27634. +;(defun mouse-kill-secondary ()
  27635. +;  "Kill the text in the secondary selection.
  27636. +;This is intended more as a keyboard command than as a mouse command
  27637. +;but it can work as either one.
  27638. +;
  27639. +;The current buffer (in case of keyboard use), or the buffer clicked on,
  27640. +;must be the one that the secondary selection is in.  This requirement
  27641. +;is to prevent accidents."
  27642. +;  (interactive)
  27643. +;  (let* ((keys (this-command-keys))
  27644. +;     (click (elt keys (1- (length keys)))))
  27645. +;    (or (eq (overlay-buffer mouse-secondary-overlay)
  27646. +;        (if (listp click)
  27647. +;        (window-buffer (posn-window (event-start click)))
  27648. +;          (current-buffer)))
  27649. +;    (error "Select or click on the buffer where the secondary selection is")))
  27650. +;  (save-excursion
  27651. +;    (set-buffer (overlay-buffer mouse-secondary-overlay))
  27652. +;    (kill-region (overlay-start mouse-secondary-overlay)
  27653. +;         (overlay-end mouse-secondary-overlay)))
  27654. +;  (delete-overlay mouse-secondary-overlay)
  27655. +;  (x-set-selection 'SECONDARY nil)
  27656. +;  (setq mouse-secondary-overlay nil))
  27657. +;
  27658. +;(defun mouse-secondary-save-then-kill (click)
  27659. +;  "Save text to point in kill ring; the second time, kill the text.
  27660. +;You must use this in a buffer where you have recently done \\[mouse-start-secondary].
  27661. +;If the text between where you did \\[mouse-start-secondary] and where
  27662. +;you use this command matches the text at the front of the kill ring,
  27663. +;this command deletes the text.
  27664. +;Otherwise, it adds the text to the kill ring, like \\[kill-ring-save],
  27665. +;which prepares for a second click with this command to delete the text.
  27666. +;
  27667. +;If you have already made a secondary selection in that buffer,
  27668. +;this command extends or retracts the selection to where you click.
  27669. +;If you do this again in a different position, it extends or retracts
  27670. +;again.  If you do this twice in the same position, it kills the selection."
  27671. +;  (interactive "e")
  27672. +;  (mouse-minibuffer-check click)
  27673. +;  (let ((posn (event-start click))
  27674. +;    (click-posn (posn-point (event-start click)))
  27675. +;    ;; Don't let a subsequent kill command append to this one:
  27676. +;    ;; prevent setting this-command to kill-region.
  27677. +;    (this-command this-command))
  27678. +;    (or (eq (window-buffer (posn-window posn))
  27679. +;        (or (and mouse-secondary-overlay
  27680. +;             (overlay-buffer mouse-secondary-overlay))
  27681. +;        (if mouse-secondary-start
  27682. +;            (marker-buffer mouse-secondary-start))))
  27683. +;    (error "Wrong buffer"))
  27684. +;    (save-excursion
  27685. +;      (set-buffer (window-buffer (posn-window posn)))
  27686. +;      (if (> (mod mouse-selection-click-count 3) 0)
  27687. +;      (if (not (and (eq last-command 'mouse-secondary-save-then-kill)
  27688. +;            (equal click-posn
  27689. +;                   (car (cdr-safe (cdr-safe mouse-save-then-kill-posn))))))
  27690. +;          ;; Find both ends of the object selected by this click.
  27691. +;          (let* ((range
  27692. +;              (mouse-start-end click-posn click-posn
  27693. +;                       mouse-selection-click-count)))
  27694. +;        ;; Move whichever end is closer to the click.
  27695. +;        ;; That's what xterm does, and it seems reasonable.
  27696. +;        (if (< (abs (- click-posn (overlay-start mouse-secondary-overlay)))
  27697. +;               (abs (- click-posn (overlay-end mouse-secondary-overlay))))
  27698. +;            (move-overlay mouse-secondary-overlay (car range)
  27699. +;                  (overlay-end mouse-secondary-overlay))
  27700. +;          (move-overlay mouse-secondary-overlay
  27701. +;                (overlay-start mouse-secondary-overlay)
  27702. +;                (nth 1 range)))
  27703. +;        ;; We have already put the old region in the kill ring.
  27704. +;        ;; Replace it with the extended region.
  27705. +;        ;; (It would be annoying to make a separate entry.)
  27706. +;        (setcar kill-ring (buffer-substring
  27707. +;                   (overlay-start mouse-secondary-overlay)
  27708. +;                   (overlay-end mouse-secondary-overlay)))
  27709. +;        (if interprogram-cut-function
  27710. +;            (funcall interprogram-cut-function (car kill-ring)))
  27711. +;        ;; Arrange for a repeated mouse-3 to kill this region.
  27712. +;        (setq mouse-save-then-kill-posn
  27713. +;              (list (car kill-ring) (point) click-posn)))
  27714. +;        ;; If we click this button again without moving it,
  27715. +;        ;; that time kill.
  27716. +;        (progn
  27717. +;          (mouse-save-then-kill-delete-region
  27718. +;           (overlay-start mouse-secondary-overlay)
  27719. +;           (overlay-end mouse-secondary-overlay))
  27720. +;          (setq mouse-save-then-kill-posn nil)
  27721. +;          (setq mouse-selection-click-count 0)
  27722. +;          (delete-overlay mouse-secondary-overlay)))
  27723. +;    (if (and (eq last-command 'mouse-secondary-save-then-kill)
  27724. +;         mouse-save-then-kill-posn
  27725. +;         (eq (car mouse-save-then-kill-posn) (car kill-ring))
  27726. +;         (equal (cdr mouse-save-then-kill-posn) (list (point) click-posn)))
  27727. +;        ;; If this is the second time we've called
  27728. +;        ;; mouse-secondary-save-then-kill, delete the text from the buffer.
  27729. +;        (progn
  27730. +;          (mouse-save-then-kill-delete-region
  27731. +;           (overlay-start mouse-secondary-overlay)
  27732. +;           (overlay-end mouse-secondary-overlay))
  27733. +;          (setq mouse-save-then-kill-posn nil)
  27734. +;          (delete-overlay mouse-secondary-overlay))
  27735. +;      (if (overlay-start mouse-secondary-overlay)
  27736. +;          ;; We have a selection, so adjust it.
  27737. +;          (progn
  27738. +;        (if (numberp click-posn)
  27739. +;            (progn
  27740. +;              ;; Move whichever end of the region is closer to the click.
  27741. +;              ;; That is what xterm does, and it seems reasonable.
  27742. +;              (if (< (abs (- click-posn (overlay-start mouse-secondary-overlay)))
  27743. +;                 (abs (- click-posn (overlay-end mouse-secondary-overlay))))
  27744. +;              (move-overlay mouse-secondary-overlay click-posn
  27745. +;                    (overlay-end mouse-secondary-overlay))
  27746. +;            (move-overlay mouse-secondary-overlay
  27747. +;                      (overlay-start mouse-secondary-overlay)
  27748. +;                      click-posn))
  27749. +;              (setq deactivate-mark nil)))
  27750. +;        (setcar kill-ring (buffer-substring
  27751. +;                   (overlay-start mouse-secondary-overlay)
  27752. +;                   (overlay-end mouse-secondary-overlay)))
  27753. +;        (if interprogram-cut-function
  27754. +;            (funcall interprogram-cut-function (car kill-ring))))
  27755. +;        (if mouse-secondary-start
  27756. +;        ;; All we have is one end of a selection,
  27757. +;        ;; so put the other end here.
  27758. +;        (let ((start (+ 0 mouse-secondary-start)))
  27759. +;          (kill-ring-save start click-posn)
  27760. +;          (if mouse-secondary-overlay
  27761. +;              (move-overlay mouse-secondary-overlay start click-posn)
  27762. +;            (setq mouse-secondary-overlay (make-overlay start click-posn)))
  27763. +;          (overlay-put mouse-secondary-overlay 'face 'secondary-selection))))
  27764. +;      (setq mouse-save-then-kill-posn
  27765. +;        (list (car kill-ring) (point) click-posn))))
  27766. +;      (x-set-selection 'SECONDARY
  27767. +;               (if (overlay-buffer mouse-secondary-overlay)
  27768. +;               (buffer-substring
  27769. +;                (overlay-start mouse-secondary-overlay)
  27770. +;                (overlay-end mouse-secondary-overlay)))))))
  27771. +
  27772. +; CHFIXME: no menus yet
  27773. +
  27774. +;(defun mouse-buffer-menu (event)
  27775. +;  "Pop up a menu of buffers for selection with the mouse.
  27776. +;This switches buffers in the window that you clicked on,
  27777. +;and selects that window."
  27778. +;  (interactive "e")
  27779. +;  (mouse-minibuffer-check event)
  27780. +;  (let ((menu
  27781. +;     (list "Buffer Menu"
  27782. +;           (cons "Select Buffer"
  27783. +;             (let ((tail (buffer-list))
  27784. +;               (maxbuf 0)
  27785. +;               head)
  27786. +;               (while tail
  27787. +;             (or (eq ?\ (aref (buffer-name (car tail)) 0))
  27788. +;                 (setq maxbuf
  27789. +;                   (max maxbuf
  27790. +;                    (length (buffer-name (car tail))))))
  27791. +;             (setq tail (cdr tail)))
  27792. +;               (setq tail (buffer-list))
  27793. +;               (while tail
  27794. +;             (let ((elt (car tail)))
  27795. +;               (if (not (string-match "^ "
  27796. +;                          (buffer-name elt)))
  27797. +;                   (setq head (cons
  27798. +;                       (cons
  27799. +;                        (format
  27800. +;                         (format "%%%ds  %%s%%s  %%s"
  27801. +;                             maxbuf)
  27802. +;                         (buffer-name elt)
  27803. +;                         (if (buffer-modified-p elt)
  27804. +;                         "*" " ")
  27805. +;                         (save-excursion
  27806. +;                           (set-buffer elt)
  27807. +;                           (if buffer-read-only "%" " "))
  27808. +;                         (or (buffer-file-name elt) ""))
  27809. +;                        elt)
  27810. +;                       head))))
  27811. +;             (setq tail (cdr tail)))
  27812. +;               (reverse head))))))
  27813. +;    (let ((buf (x-popup-menu event menu))
  27814. +;      (window (posn-window (event-start event))))
  27815. +;      (if buf
  27816. +;      (progn
  27817. +;        (or (framep window) (select-window window))
  27818. +;        (switch-to-buffer buf))))))
  27819. +
  27820. +;; Choose a completion with the mouse.
  27821. +
  27822. +(defun mouse-choose-completion (event)
  27823. +  "Click on an alternative in the `*Completions*' buffer to choose it."
  27824. +  (interactive "e")
  27825. +  (let ((buffer (window-buffer))
  27826. +        choice)
  27827. +    (save-excursion
  27828. +      (set-buffer (window-buffer (posn-window (event-start event))))
  27829. +      (if completion-reference-buffer
  27830. +      (setq buffer completion-reference-buffer))
  27831. +      (save-excursion
  27832. +    (goto-char (posn-point (event-start event)))
  27833. +    (let (beg end)
  27834. +      (skip-chars-forward "^ \t\n")
  27835. +      (while (looking-at " [^ \n\t]")
  27836. +        (forward-char 1)
  27837. +        (skip-chars-forward "^ \t\n"))
  27838. +      (setq end (point))
  27839. +      (skip-chars-backward "^ \t\n")
  27840. +      (while (and (= (preceding-char) ?\ )
  27841. +              (not (and (> (point) (1+ (point-min)))
  27842. +                (= (char-after (- (point) 2)) ?\ ))))
  27843. +        (backward-char 1)
  27844. +        (skip-chars-backward "^ \t\n"))
  27845. +      (setq beg (point))
  27846. +      (setq choice (buffer-substring beg end)))))
  27847. +    (let ((owindow (selected-window)))
  27848. +      (select-window (posn-window (event-start event)))
  27849. +      (bury-buffer)
  27850. +      (select-window owindow))
  27851. +    (choose-completion-string choice buffer)))
  27852. +
  27853. +;; Font selection.
  27854. +
  27855. +;(defun font-menu-add-default ()
  27856. +;  (let* ((default (cdr (assq 'font (frame-parameters (selected-frame)))))
  27857. +;     (font-alist x-fixed-font-alist)
  27858. +;     (elt (or (assoc "Misc" font-alist) (nth 1 font-alist))))
  27859. +;    (if (assoc "Default" elt)
  27860. +;    (delete (assoc "Default" elt) elt))
  27861. +;    (setcdr elt
  27862. +;        (cons (list "Default"
  27863. +;            (cdr (assq 'font (frame-parameters (selected-frame)))))
  27864. +;          (cdr elt)))))
  27865. +;
  27866. +;(defvar x-fixed-font-alist
  27867. +;  '("Font menu"
  27868. +;    ("Misc"
  27869. +;     ("6x10" "-misc-fixed-medium-r-normal--10-100-75-75-c-60-*-1" "6x10")
  27870. +;     ("6x12" "-misc-fixed-medium-r-semicondensed--12-110-75-75-c-60-*-1" "6x12")
  27871. +;     ("6x13" "-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-*-1" "6x13")
  27872. +;     ("lucida 13"
  27873. +;      "-b&h-lucidatypewriter-medium-r-normal-sans-0-0-0-0-m-0-*-1")
  27874. +;     ("7x13" "-misc-fixed-medium-r-normal--13-120-75-75-c-70-*-1" "7x13")
  27875. +;     ("7x14" "-misc-fixed-medium-r-normal--14-130-75-75-c-70-*-1" "7x14")
  27876. +;     ("9x15" "-misc-fixed-medium-r-normal--15-140-*-*-c-*-*-1" "9x15")
  27877. +;     ("")
  27878. +;     ("clean 8x8" "-schumacher-clean-medium-r-normal--*-80-*-*-c-*-*-1")
  27879. +;     ("clean 8x14" "-schumacher-clean-medium-r-normal--*-140-*-*-c-*-*-1")
  27880. +;     ("clean 8x10" "-schumacher-clean-medium-r-normal--*-100-*-*-c-*-*-1")
  27881. +;     ("clean 8x16" "-schumacher-clean-medium-r-normal--*-160-*-*-c-*-*-1")
  27882. +;     ("")
  27883. +;     ("sony 8x16" "-sony-fixed-medium-r-normal--16-120-100-100-c-80-*-1")
  27884. +;     ("")
  27885. +;     ("fixed" "fixed")
  27886. +;     ("10x20" "10x20")
  27887. +;     ("11x18" "11x18")
  27888. +;     ("12x24" "12x24"))
  27889. +;;;; We don't seem to have these; who knows what they are.
  27890. +;;;;    ("fg-18" "fg-18")
  27891. +;;;;    ("fg-25" "fg-25")
  27892. +;;;;    ("lucidasanstypewriter-12" "lucidasanstypewriter-12")
  27893. +;;;;    ("lucidasanstypewriter-bold-14" "lucidasanstypewriter-bold-14")
  27894. +;;;;    ("lucidasanstypewriter-bold-24" "lucidasanstypewriter-bold-24")
  27895. +;;;;    ("lucidatypewriter-bold-r-24" "-b&h-lucidatypewriter-bold-r-normal-sans-24-240-75-75-m-140-iso8859-1")
  27896. +;;;;    ("fixed-medium-20" "-misc-fixed-medium-*-*-*-20-*-*-*-*-*-*-*")
  27897. +;    ("Courier"
  27898. +;     ("8" "-adobe-courier-medium-r-normal--*-80-*-*-m-*-iso8859-1")
  27899. +;     ("10" "-adobe-courier-medium-r-normal--*-100-*-*-m-*-iso8859-1")
  27900. +;     ("12" "-adobe-courier-medium-r-normal--*-120-*-*-m-*-iso8859-1")
  27901. +;     ("14" "-adobe-courier-medium-r-normal--*-140-*-*-m-*-iso8859-1")
  27902. +;     ("18" "-adobe-courier-medium-r-normal--*-180-*-*-m-*-iso8859-1")
  27903. +;     ("24" "-adobe-courier-medium-r-normal--*-240-*-*-m-*-iso8859-1")
  27904. +;     ("8 bold" "-adobe-courier-bold-r-normal--*-80-*-*-m-*-iso8859-1")
  27905. +;     ("10 bold" "-adobe-courier-bold-r-normal--*-100-*-*-m-*-iso8859-1")
  27906. +;     ("12 bold" "-adobe-courier-bold-r-normal--*-120-*-*-m-*-iso8859-1")
  27907. +;     ("14 bold" "-adobe-courier-bold-r-normal--*-140-*-*-m-*-iso8859-1")
  27908. +;     ("18 bold" "-adobe-courier-bold-r-normal--*-180-*-*-m-*-iso8859-1")
  27909. +;     ("24 bold" "-adobe-courier-bold-r-normal--*-240-*-*-m-*-iso8859-1")
  27910. +;     ("8 slant" "-adobe-courier-medium-o-normal--*-80-*-*-m-*-iso8859-1")
  27911. +;     ("10 slant" "-adobe-courier-medium-o-normal--*-100-*-*-m-*-iso8859-1")
  27912. +;     ("12 slant" "-adobe-courier-medium-o-normal--*-120-*-*-m-*-iso8859-1")
  27913. +;     ("14 slant" "-adobe-courier-medium-o-normal--*-140-*-*-m-*-iso8859-1")
  27914. +;     ("18 slant" "-adobe-courier-medium-o-normal--*-180-*-*-m-*-iso8859-1")
  27915. +;     ("24 slant" "-adobe-courier-medium-o-normal--*-240-*-*-m-*-iso8859-1")
  27916. +;     ("8 bold slant" "-adobe-courier-bold-o-normal--*-80-*-*-m-*-iso8859-1")
  27917. +;     ("10 bold slant" "-adobe-courier-bold-o-normal--*-100-*-*-m-*-iso8859-1")
  27918. +;     ("12 bold slant" "-adobe-courier-bold-o-normal--*-120-*-*-m-*-iso8859-1")
  27919. +;     ("14 bold slant" "-adobe-courier-bold-o-normal--*-140-*-*-m-*-iso8859-1")
  27920. +;     ("18 bold slant" "-adobe-courier-bold-o-normal--*-180-*-*-m-*-iso8859-1")
  27921. +;     ("24 bold slant" "-adobe-courier-bold-o-normal--*-240-*-*-m-*-iso8859-1"))
  27922. +;    )
  27923. +;  "X fonts suitable for use in Emacs.")
  27924. +;
  27925. +;(defun mouse-set-font (&rest fonts)
  27926. +;  "Select an emacs font from a list of known good fonts"
  27927. +;  (interactive
  27928. +;   (x-popup-menu last-nonmenu-event x-fixed-font-alist))
  27929. +;  (if fonts
  27930. +;      (let (font)
  27931. +;    (while fonts
  27932. +;      (condition-case nil
  27933. +;          (progn
  27934. +;        (set-default-font (car fonts))
  27935. +;        (setq font (car fonts))
  27936. +;        (setq fonts nil))
  27937. +;        (error
  27938. +;         (setq fonts (cdr fonts)))))
  27939. +;    (if (null font)
  27940. +;        (error "Font not found")))))
  27941. +(defun mouse-set-font ()
  27942. +  "Select and set an emacs font from the system list of fonts."
  27943. +  (interactive)
  27944. +  (let ((the-font (amiga-popup-font-request)))
  27945. +    (if the-font
  27946. +    (amiga-set-font (car the-font) (cdr the-font)))))
  27947. +
  27948. +;;; Bindings for mouse commands.
  27949. +
  27950. +;(define-key global-map [down-mouse-1] 'mouse-drag-region) ; CHFIXME: no overlay
  27951. +(global-set-key [mouse-1]    'mouse-set-point)
  27952. +(global-set-key [drag-mouse-1]    'mouse-set-region)
  27953. +
  27954. +;; These are tested for in mouse-drag-region.
  27955. +(global-set-key [double-mouse-1] 'mouse-set-point)
  27956. +(global-set-key [triple-mouse-1] 'mouse-set-point)
  27957. +
  27958. +(global-set-key [mouse-2]    'mouse-yank-at-click)
  27959. +(global-set-key [mouse-3]    'mouse-save-then-kill)
  27960. +
  27961. +;; By binding these to down-going events, we let the user use the up-going
  27962. +;; event to make the selection, saving a click.
  27963. +;(global-set-key [C-down-mouse-1]    'mouse-buffer-menu)
  27964. +(global-set-key [C-down-mouse-1]    'mouse-set-font)
  27965. +
  27966. +;; Replaced with dragging mouse-1
  27967. +;; (global-set-key [S-mouse-1]    'mouse-set-mark)
  27968. +
  27969. +(global-set-key [mode-line mouse-1] 'mouse-select-window)
  27970. +(global-set-key [mode-line mouse-2] 'mouse-delete-other-windows)
  27971. +(global-set-key [mode-line mouse-3] 'mouse-delete-window)
  27972. +(global-set-key [mode-line C-mouse-2] 'mouse-split-window-horizontally)
  27973. +
  27974. +;;
  27975. +;; some old amiga-mouse like bindings
  27976. +
  27977. +(defun amiga-mouse-iconify (arg) (amiga-iconify))
  27978. +
  27979. +(global-set-key [S-mouse-1] 'mouse-set-mark)
  27980. +(global-set-key [C-mouse-1] 'mouse-save-then-kill) ;; CHFIXME ok?
  27981. +(global-set-key [M-mouse-2] 'mouse-set-region)
  27982. +(global-set-key [S-mouse-2] 'amiga-mouse-iconify)
  27983. +
  27984. +(provide 'amiga-mouse)
  27985. +
  27986. +;;; amiga-mouse.el ends here
  27987. diff -ru --new-file baseline/fsf/emacs/lisp/compile.el amiga/fsf/emacs/lisp/compile.el
  27988. --- baseline/fsf/emacs/lisp/compile.el    Mon Sep  5 10:22:05 1994
  27989. +++ amiga/fsf/emacs/lisp/compile.el    Sun Oct 15 17:06:32 1995
  27990. @@ -186,6 +186,20 @@
  27991.      ;; GNU message with program name and column number.
  27992.      ("\n\\([^ \n\t:]+\\):\\([^ \n\t:]+\\):\
  27993.  \\([0-9]+\\):\\([0-9]+\\)[: \t]" 2 3 4)
  27994. +
  27995. +    ;; Compiler Toolkit cocktail
  27996. +    ;; "ctla.pars", 151, 38: Error       illegal character: ;
  27997. +    ;; "ctla.pars", 167,  1: Warning     node type not used: ModuleName
  27998. +    ;; CHFIXME: find out how to "or" functions
  27999. +    ("\n\\\"\\([^ \n\\\"]+\\)\\\",[ ]*\\([0-9]+\\),[ ]*\\([0-9]+\\): Error" 1 2 3)
  28000. +    ("\n\\\"\\([^ \n\\\"]+\\)\\\",[ ]*\\([0-9]+\\),[ ]*\\([0-9]+\\): Warning" 1 2 3)
  28001. +
  28002. +    ;; Amigados SAS/C Compiler 6.3
  28003. +    ;; amiga_dump.c 53 Error 72: conflict with previous declaration
  28004. +    ;; amiga_dump.c 164 Warning 72: conflict with previous declaration
  28005. +    ;; CHFIXME: find out how to "or" functions
  28006. +    ("\n\\([^ \n]+\\) \\([0-9]+\\) Warning" 1 2)
  28007. +    ("\n\\([^ \n]+\\) \\([0-9]+\\) Error" 1 2)
  28008.      )
  28009.    "Alist that specifies how to match errors in compiler output.
  28010.  Each element has the form (REGEXP FILE-IDX LINE-IDX [COLUMN-IDX]).
  28011. @@ -296,7 +310,9 @@
  28012.    (interactive
  28013.     (list (read-from-minibuffer "Run grep (like this): "
  28014.                     grep-command nil nil 'grep-history)))
  28015. -  (compile-internal (concat command-args " /dev/null")
  28016. +  (compile-internal (concat command-args 
  28017. +                (if (eq system-type 'amigados) " nil:"
  28018. +                  " /dev/null"))
  28019.              "No more grep hits" "grep"
  28020.              ;; Give it a simpler regexp to match.
  28021.              nil grep-regexp-alist))
  28022. diff -ru --new-file baseline/fsf/emacs/lisp/files.el amiga/fsf/emacs/lisp/files.el
  28023. --- baseline/fsf/emacs/lisp/files.el    Sun Aug 28 00:37:49 1994
  28024. +++ amiga/fsf/emacs/lisp/files.el    Sun Oct 15 17:06:36 1995
  28025. @@ -231,6 +231,15 @@
  28026.  The command \\[normal-mode] always obeys local-variables lists
  28027.  and ignores this variable.")
  28028.  
  28029. +(defconst backup-char (if (eq system-type 'amigados) "!" "~")
  28030. +  "Character to add to file names to make backup names.")
  28031. +
  28032. +(defconst autosave-char (if (eq system-type 'amigados) "@" "#")
  28033. +  "Character to add to file names to make autosave names.")
  28034. +
  28035. +(defconst bufferfile-char (if (eq system-type 'amigados) "^" "%")
  28036. +  "Character to add to buffer names to make file names.")
  28037. +
  28038.  ;; Avoid losing in versions where CLASH_DETECTION is disabled.
  28039.  (or (fboundp 'lock-buffer)
  28040.      (defalias 'lock-buffer 'ignore))
  28041. @@ -986,7 +995,8 @@
  28042.            (let ((alist auto-mode-alist)
  28043.              (mode nil))
  28044.          ;; Find first matching alist entry.
  28045. -        (let ((case-fold-search (eq system-type 'vax-vms)))
  28046. +        (let ((case-fold-search (or (eq system-type 'vax-vms)
  28047. +                        (ed system-type 'amigados))))
  28048.            (while (and (not mode) alist)
  28049.              (if (string-match (car (car alist)) name)
  28050.              (if (and (consp (cdr (car alist)))
  28051. @@ -1379,8 +1389,11 @@
  28052.              (setq setmodes (file-modes backupname)))
  28053.          (file-error
  28054.           ;; If trouble writing the backup, write it in ~.
  28055. -         (setq backupname (expand-file-name "~/%backup%~"))
  28056. -         (message "Cannot write backup file; backing up in ~/%%backup%%~")
  28057. +         (setq backupname 
  28058. +               (expand-file-name (concat "~/" bufferfile-char "backup"
  28059. +                         bufferfile-char backup-char)))
  28060. +         (message "Cannot write backup file; backing up in ~/%sbackup%s%s"
  28061. +              bufferfile-char bufferfile-char backup-char)
  28062.           (sleep-for 1)
  28063.           (condition-case ()
  28064.               (copy-file real-file-name backupname t t)
  28065. @@ -1425,8 +1438,11 @@
  28066.               (length name))
  28067.             (if keep-backup-version
  28068.                 (length name)
  28069. -             (or (string-match "\\.~[0-9]+~\\'" name)
  28070. -             (string-match "~\\'" name)
  28071. +             (or (string-match 
  28072. +              (concat "\\." backup-char
  28073. +                  "[0-9]+" backup-char "\\'") name)
  28074. +             (string-match 
  28075. +              (concat backup-char "\\'") name)
  28076.               (length name))))))))
  28077.  
  28078.  (defun make-backup-file-name (file)
  28079. @@ -1438,7 +1454,7 @@
  28080.          (if (string-match "\\([^.]*\\)\\(\\..*\\)?" fn)
  28081.              (substring fn 0 (match-end 1)))
  28082.          ".bak"))
  28083. -    (concat file "~")))
  28084. +    (concat file backup-char)))
  28085.  
  28086.  (defun backup-file-name-p (file)
  28087.    "Return non-nil if FILE is a backup file name (numeric or not).
  28088. @@ -1446,7 +1462,7 @@
  28089.  You may need to redefine `file-name-sans-versions' as well."
  28090.    (if (eq system-type 'ms-dos)
  28091.        (string-match "\\.bak$" file)
  28092. -    (string-match "~$" file)))
  28093. +    (string-match (concat backup-char "$") file)))
  28094.  
  28095.  ;; This is used in various files.
  28096.  ;; The usage of bv-length is not very clean,
  28097. @@ -1456,7 +1472,7 @@
  28098.    "Given the name of a numeric backup file, return the backup number.
  28099.  Uses the free variable `bv-length', whose value should be
  28100.  the index in the name where the version number begins."
  28101. -  (if (and (string-match "[0-9]+~$" fn bv-length)
  28102. +  (if (and (string-match (concat "[0-9]+" backup-char "$") fn bv-length)
  28103.         (= (match-beginning 0) bv-length))
  28104.        (string-to-int (substring fn bv-length -1))
  28105.        0))
  28106. @@ -1469,7 +1485,7 @@
  28107.   and whose cdr is a list of old versions to consider deleting now."
  28108.    (if (eq version-control 'never)
  28109.        (list (make-backup-file-name fn))
  28110. -    (let* ((base-versions (concat (file-name-nondirectory fn) ".~"))
  28111. +    (let* ((base-versions (concat (file-name-nondirectory fn) "." backup-char))
  28112.         (bv-length (length base-versions))
  28113.         possibilities
  28114.         (versions nil)
  28115. @@ -1493,13 +1509,13 @@
  28116.       (setq possibilities nil)))
  28117.        (if (not deserve-versions-p)
  28118.        (list (make-backup-file-name fn))
  28119. -    (cons (concat fn ".~" (int-to-string (1+ high-water-mark)) "~")
  28120. +    (cons (concat fn "." backup-char (int-to-string (1+ high-water-mark)) backup-char)
  28121.            (if (and (> number-to-delete 0)
  28122.                         ;; Delete nothing if there is overflow
  28123.                 ;; in the number of versions to keep.
  28124.                 (>= (+ kept-new-versions kept-old-versions -1) 0))
  28125.            (mapcar (function (lambda (n)
  28126. -                      (concat fn ".~" (int-to-string n) "~")))
  28127. +                      (concat fn "." backup-char (int-to-string n) backup-char)))
  28128.                (let ((v (nthcdr kept-old-versions versions)))
  28129.                  (rplacd (nthcdr (1- number-to-delete) v) ())
  28130.                  v))))))))
  28131. @@ -1660,6 +1676,7 @@
  28132.          (setq nogood t)
  28133.          ;; Find the temporary name to write under.
  28134.          (while nogood
  28135. +          (setq tempname (format (concat "%s" autosave-char "tmp" autosave-char "%d" dir i)))
  28136.            (setq tempname (format "%s#tmp#%d" dir i))
  28137.            (setq nogood (file-exists-p tempname))
  28138.            (setq i (1+ i)))
  28139. @@ -1686,6 +1703,9 @@
  28140.             ;; Change the mode back, after writing.
  28141.             (setq setmodes (file-modes buffer-file-name))
  28142.             (set-file-modes buffer-file-name 511)))
  28143. +    (if (eq system-type 'amigados)
  28144. +        (if amiga-create-icons
  28145. +        (amiga-put-icon buffer-file-name nil)))
  28146.      (write-region (point-min) (point-max)
  28147.                buffer-file-name nil t)))
  28148.      setmodes))
  28149. @@ -2008,6 +2028,12 @@
  28150.           (recent-auto-save-p))
  28151.      (rename-file osave buffer-auto-save-file-name t))))
  28152.  
  28153. +;;; VM (the mailreader) creates nasty buffer names with ":"s in them.
  28154. +;;; After much discussion with the VM maintainers, we trap there here.
  28155. +;;; They assert that Emacs should always generate a valid name.  This
  28156. +;;; may also be needed for VM to work on DOS and VMS.  The function
  28157. +;;; amiga-auto-save-check performs this function.
  28158. +
  28159.  (defun make-auto-save-file-name ()
  28160.    "Return file name to use for auto-saves of current buffer.
  28161.  Does not consider `auto-save-visited-file-name' as that variable is checked
  28162. @@ -2015,9 +2041,9 @@
  28163.  See also `auto-save-file-name-p'."
  28164.    (if buffer-file-name
  28165.        (concat (file-name-directory buffer-file-name)
  28166. -          "#"
  28167. +          autosave-char
  28168.            (file-name-nondirectory buffer-file-name)
  28169. -          "#")
  28170. +          autosave-char)
  28171.  
  28172.      ;; Deal with buffers that don't have any associated files.  (Mail
  28173.      ;; mode tends to create a good number of these.)
  28174. @@ -2039,12 +2065,19 @@
  28175.              (substring buffer-name (match-end 0))))
  28176.      (setq limit (1+ (match-end 0))))
  28177.  
  28178. -      (expand-file-name (format "#%s#%s#" buffer-name (make-temp-name ""))))))
  28179. +      ;; For non-file bfr, use bfr name and Emacs pid.
  28180. +    (let ((file-name 
  28181. +          (format (concat autosave-char "%s" 
  28182. +                          autosave-char "%s"
  28183. +                          autosave-char) (buffer-name) (make-temp-name ""))))
  28184. +      (if (eq system-type 'amigados)
  28185. +          (setq file-name (amiga-auto-save-check file-name)))
  28186. +    (expand-file-name file-name)))))
  28187.  
  28188.  (defun auto-save-file-name-p (filename)
  28189.    "Return non-nil if FILENAME can be yielded by `make-auto-save-file-name'.
  28190.  FILENAME should lack slashes.  You can redefine this for customization."
  28191. -  (string-match "^#.*#$" filename))
  28192. +  (string-match (concat "^" autosave-char ".*" autosave-char "$") filename))
  28193.  
  28194.  (defconst list-directory-brief-switches
  28195.    (if (eq system-type 'vax-vms) "" "-CF")
  28196. Binary files baseline/fsf/emacs/lisp/files.elc and amiga/fsf/emacs/lisp/files.elc differ
  28197. diff -ru --new-file baseline/fsf/emacs/lisp/loadup.el amiga/fsf/emacs/lisp/loadup.el
  28198. --- baseline/fsf/emacs/lisp/loadup.el    Sat Jul  9 12:03:57 1994
  28199. +++ amiga/fsf/emacs/lisp/loadup.el    Sun Oct 15 17:06:42 1995
  28200. @@ -59,7 +59,11 @@
  28201.        (garbage-collect)
  28202.        (load "menu-bar")
  28203.        (load "scroll-bar")
  28204. -      (load "select")))
  28205. +      (load "select"))
  28206. +  (if (eq system-type 'amigados)
  28207. +      (progn
  28208. +      (load "amiga-menu-bar")
  28209. +      )))
  28210.  (garbage-collect)
  28211.  (load "paths.el")  ;Don't get confused if someone compiled paths by mistake.
  28212.  (garbage-collect)
  28213. @@ -106,6 +110,10 @@
  28214.        (garbage-collect)
  28215.        (load "disp-table") ; needed to setup ibm-pc char set, see internal.el
  28216.        (garbage-collect)))
  28217. +(if (eq system-type 'amigados)
  28218. +    (progn
  28219. +      (garbage-collect)
  28220. +      (load "amiga-init")))
  28221.  (if (fboundp 'atan)    ; preload some constants and 
  28222.      (progn        ; floating pt. functions if 
  28223.        (garbage-collect)    ; we have float support.
  28224. @@ -154,14 +162,21 @@
  28225.      (setq name (concat (downcase (substring name 0 (match-beginning 0)))
  28226.                 "-"
  28227.                 (substring name (match-end 0)))))
  28228. -      (if (eq system-type 'ms-dos)
  28229. -      (setq name (expand-file-name "../etc/DOC"))
  28230. -    (setq name (concat (expand-file-name "../etc/DOC-") name))
  28231. +      (if (eq system-type 'amigados)
  28232. +      (progn
  28233. +        (setq name (concat (expand-file-name "/etc/DOC-") name))
  28234. +        (if (file-exists-p name)
  28235. +        (delete-file name))
  28236. +        (copy-file (expand-file-name "/etc/DOC") name t))
  28237. +    
  28238. +    (if (eq system-type 'ms-dos)
  28239. +        (setq name (expand-file-name "../etc/DOC"))
  28240. +      (setq name (concat (expand-file-name "../etc/DOC-") name)))
  28241.      (if (file-exists-p name)
  28242.          (delete-file name))
  28243.      (copy-file (expand-file-name "../etc/DOC") name t))
  28244.        (Snarf-documentation (file-name-nondirectory name)))
  28245. -    (Snarf-documentation "DOC"))
  28246. +  (Snarf-documentation "DOC"))
  28247.  (message "Finding pointers to doc strings...done")
  28248.  
  28249.  ;Note: You can cause additional libraries to be preloaded
  28250. @@ -181,31 +196,37 @@
  28251.        (message "Dumping data as file temacs.dump")
  28252.        (dump-emacs "temacs.dump" "temacs")
  28253.        (kill-emacs))
  28254. -      (let ((name (concat "emacs-" emacs-version)))
  28255. -    (while (string-match "[^-+_.a-zA-Z0-9]+" name)
  28256. -      (setq name (concat (downcase (substring name 0 (match-beginning 0)))
  28257. -                 "-"
  28258. -                 (substring name (match-end 0)))))
  28259. -    (if (eq system-type 'ms-dos)
  28260. -        (message "Dumping under the name emacs")
  28261. -      (message "Dumping under names emacs and %s" name)))
  28262. -      (condition-case ()
  28263. -      (delete-file "emacs")
  28264. -    (file-error nil))
  28265. -      ;; We used to dump under the name xemacs, but that occasionally
  28266. -      ;; confused people installing Emacs (they'd install the file
  28267. -      ;; under the name `xemacs'), and it's inconsistent with every
  28268. -      ;; other GNU product's build process.
  28269. -      (dump-emacs "emacs" "temacs")
  28270. -      ;; Recompute NAME now, so that it isn't set when we dump.
  28271. -      (if (not (eq system-type 'ms-dos))
  28272. -      (let ((name (concat "emacs-" emacs-version)))
  28273. -        (while (string-match "[^-+_.a-zA-Z0-9]+" name)
  28274. -          (setq name (concat (downcase (substring name 0 (match-beginning 0)))
  28275. -                 "-"
  28276. +      (if (eq system-type 'amigados)
  28277. +      (progn
  28278. +        (message "Dumping data as file /etc/EMACS-DATA")
  28279. +        (dump-emacs-data "/etc/EMACS-DATA")
  28280. +        (kill-emacs))
  28281. +    (let ((name (concat "emacs-" emacs-version)))
  28282. +      (while (string-match "[^-+_.a-zA-Z0-9]+" name)
  28283. +        (setq name (concat (downcase (substring name 0 (match-beginning 0)))
  28284. +                   "-"
  28285. +                   (substring name (match-end 0)))))
  28286. +      (if (eq system-type 'ms-dos)
  28287. +          (message "Dumping under the name emacs")
  28288. +        (message "Dumping under names emacs and %s" name)))
  28289. +    (condition-case ()
  28290. +        (delete-file "emacs")
  28291. +      (file-error nil))
  28292. +    ;; We used to dump under the name xemacs, but that occasionally
  28293. +    ;; confused people installing Emacs (they'd install the file
  28294. +    ;; under the name `xemacs'), and it's inconsistent with every
  28295. +    ;; other GNU product's build process.
  28296. +    (progn
  28297. +      (dump-emacs "emacs" "temacs")
  28298. +      ;; Recompute NAME now, so that it isn't set when we dump.
  28299. +      (if (not (eq system-type 'ms-dos))
  28300. +          (let ((name (concat "emacs-" emacs-version)))
  28301. +        (while (string-match "[^-+_.a-zA-Z0-9]+" name)
  28302. +          (setq name (concat (downcase (substring name 0 (match-beginning 0)))
  28303. +                     "-"
  28304.                   (substring name (match-end 0)))))
  28305. -        (add-name-to-file "emacs" name t)))
  28306. -      (kill-emacs)))
  28307. +        (add-name-to-file "emacs" name t)))
  28308. +      (kill-emacs)))))
  28309.  
  28310.  ;; Avoid error if user loads some more libraries now.
  28311.  (setq purify-flag nil)
  28312. diff -ru --new-file baseline/fsf/emacs/lisp/paths.el amiga/fsf/emacs/lisp/paths.el
  28313. --- baseline/fsf/emacs/lisp/paths.el    Tue Jul  5 11:31:46 1994
  28314. +++ amiga/fsf/emacs/lisp/paths.el    Sun Oct 15 17:06:46 1995
  28315. @@ -32,14 +32,14 @@
  28316.  ;;; Code:
  28317.  
  28318.  (defvar Info-default-directory-list
  28319. -  (let ((start (list "/usr/local/lib/info/"
  28320. +  (let ((start (list "gnuemacs-19.25:info/"
  28321.               ;; This comes second so that, if it is the same
  28322.               ;; as configure-info-directory (which is usually true)
  28323.               ;; and Emacs has been installed (also usually true)
  28324.               ;; then the list will end with two copies of this;
  28325.               ;; which means that the last dir file Info-insert-dir
  28326.               ;; finds will be the one in this directory.
  28327. -             "/usr/local/info/"))
  28328. +             "gnuemacs:info/"))
  28329.      (configdir (file-name-as-directory configure-info-directory)))
  28330.      (setq start (nconc start (list configdir)))
  28331.      start)
  28332. diff -ru --new-file baseline/fsf/emacs/lisp/sendmail.el amiga/fsf/emacs/lisp/sendmail.el
  28333. --- baseline/fsf/emacs/lisp/sendmail.el    Mon Aug  8 16:22:31 1994
  28334. +++ amiga/fsf/emacs/lisp/sendmail.el    Sun Oct 15 17:06:48 1995
  28335. @@ -459,21 +459,24 @@
  28336.            (set-buffer errbuf)
  28337.            (erase-buffer))))
  28338.        (apply 'call-process-region
  28339. -         (append (list (point-min) (point-max)
  28340. -                   (if (boundp 'sendmail-program)
  28341. -                   sendmail-program
  28342. -                 "/usr/lib/sendmail")
  28343. -                   nil errbuf nil "-oi")
  28344. -             ;; Always specify who from,
  28345. -             ;; since some systems have broken sendmails.
  28346. -             (list "-f" (user-login-name))
  28347. +             (append (list (point-min) (point-max)
  28348. +                           (if (boundp 'sendmail-program)
  28349. +                               sendmail-program
  28350. +                             "/usr/lib/sendmail")
  28351. +                           nil errbuf nil)
  28352. +;;;                           "-oi" "-t")
  28353. +                     ;; Always specify who from,
  28354. +                     ;; since some systems have broken sendmails.
  28355. +;;;                     (list "-f" (user-login-name))
  28356.  ;;;             ;; Don't say "from root" if running under su.
  28357.  ;;;             (and (equal (user-real-login-name) "root")
  28358.  ;;;                  (list "-f" (user-login-name)))
  28359. -             (and mail-alias-file
  28360. -                  (list (concat "-oA" mail-alias-file)))
  28361. -             ;; These mean "report errors by mail"
  28362. -             ;; and "deliver in background".
  28363. +;;;                     (and mail-alias-file
  28364. +;;;                          (list (concat "-oA" mail-alias-file)))
  28365. +;;;                     ;; These mean "report errors by mail"
  28366. +;;;                     ;; and "deliver in background".
  28367. +;;;                     (if (null mail-interactive) '("-oem" "-odb"))
  28368. +                     ))
  28369.               (if (null mail-interactive) '("-oem" "-odb"))
  28370.               ;; Get the addresses from the message
  28371.               ;; unless this is a resend.
  28372. diff -ru --new-file baseline/fsf/emacs/lisp/startup.el amiga/fsf/emacs/lisp/startup.el
  28373. --- baseline/fsf/emacs/lisp/startup.el    Tue Aug  9 20:33:45 1994
  28374. +++ amiga/fsf/emacs/lisp/startup.el    Sun Oct 15 17:06:50 1995
  28375. @@ -326,6 +326,8 @@
  28376.                  (concat "~" init-file-user "/_emacs"))
  28377.                 ((eq system-type 'vax-vms) 
  28378.                  "sys$login:.emacs")
  28379. +               ((eq system-type 'amigados) 
  28380. +                "s:.emacs")
  28381.                 (t 
  28382.                  (concat "~" init-file-user "/.emacs"))))
  28383.              (load user-init-file t t t)
  28384. @@ -364,6 +366,10 @@
  28385.      (set-buffer "*scratch*")
  28386.      (if (eq major-mode 'fundamental-mode)
  28387.          (funcall initial-major-mode))))
  28388. +  ;; On Amiga, initialise clipboard CHFIXME
  28389. +;  (if (eq system-type 'amigados)
  28390. +;      (let ((clip (safe-amiga-paste)))
  28391. +;    (if clip (kill-add clip))))
  28392.    ;; Load library for our terminal type.
  28393.    ;; User init file can set term-file-prefix to nil to prevent this.
  28394.    (and term-file-prefix (not noninteractive) (not window-system)
  28395. Binary files baseline/fsf/emacs/lisp/startup.elc and amiga/fsf/emacs/lisp/startup.elc differ
  28396. diff -ru --new-file baseline/fsf/emacs/lisp/term/intuition-win.el amiga/fsf/emacs/lisp/term/intuition-win.el
  28397. --- baseline/fsf/emacs/lisp/term/intuition-win.el    Wed Dec 31 17:00:00 1969
  28398. +++ amiga/fsf/emacs/lisp/term/intuition-win.el    Sun Oct 15 17:07:09 1995
  28399. @@ -0,0 +1,50 @@
  28400. +;(setq stack-trace-on-error t) ; CHFIXME
  28401. +;(load "s:.emacs-menu" t t)
  28402. +(setq command-switch-alist (append '(("-fn" . amiga-handle-set-font)
  28403. +                     ("-fg" . amiga-handle-set-foreground)
  28404. +                     ("-bg" . amiga-handle-set-background)
  28405. +                     ("-geometry" . amiga-handle-set-geometry)
  28406. +                     ("-screen" . amiga-handle-set-screen))
  28407. +                   command-switch-alist))
  28408. +
  28409. +(defun amiga-handle-set-font (switch)
  28410. +  (condition-case err
  28411. +      (let ((wfont (car command-line-args-left))
  28412. +        (height (car (read-from-string (car (cdr command-line-args-left))))))
  28413. +    (setq command-line-args-left (cdr (cdr command-line-args-left)))
  28414. +    (amiga-set-font wfont height))
  28415. +    (error (message "Failed to load font"))))
  28416. +
  28417. +(defun amiga-handle-set-foreground (switch)
  28418. +  (condition-case err
  28419. +      (let ((pen (car (read-from-string (car command-line-args-left)))))
  28420. +    (setq command-line-args-left (cdr command-line-args-left))
  28421. +    (amiga-set-foreground-color pen))
  28422. +    (error (message "Failed to set foreground colour"))))
  28423. +
  28424. +(defun amiga-handle-set-background (switch)
  28425. +  (condition-case err
  28426. +      (let ((pen (car (read-from-string (car command-line-args-left)))))
  28427. +    (setq command-line-args-left (cdr command-line-args-left))
  28428. +    (amiga-set-background-color pen))
  28429. +    (error (message "Failed to set background colour"))))
  28430. +
  28431. +(defun amiga-handle-set-screen (switch)
  28432. +  (condition-case err
  28433. +      (let ((name (car command-line-args-left)))
  28434. +    (setq command-line-args-left (cdr command-line-args-left))
  28435. +    (amiga-set-geometry nil nil nil nil name))
  28436. +    (error (message "Couldn't open on public screen"))))
  28437. +
  28438. +(defun amiga-handle-set-geometry (switch)
  28439. +  (condition-case err
  28440. +      (let ((x (car (read-from-string (car command-line-args-left))))
  28441. +        (y (car (read-from-string (car (cdr command-line-args-left)))))
  28442. +        (w (car (read-from-string (car (cdr (cdr command-line-args-left))))))
  28443. +        (h (car (read-from-string (car (cdr (cdr (cdr command-line-args-left)))))))
  28444. +)
  28445. +    (setq command-line-args-left (cdr (cdr (cdr (cdr command-line-args-left)))))
  28446. +    (amiga-set-geometry x y w h nil))
  28447. +    (error (message "Couldn't set window size"))))
  28448. +
  28449. +
  28450. diff -ru --new-file baseline/fsf/emacs/lisp/texinfmt.el amiga/fsf/emacs/lisp/texinfmt.el
  28451. --- baseline/fsf/emacs/lisp/texinfmt.el    Fri Mar 11 17:06:52 1994
  28452. +++ amiga/fsf/emacs/lisp/texinfmt.el    Sun Oct 15 17:06:56 1995
  28453. @@ -2056,7 +2056,7 @@
  28454.      (setq opoint (point))
  28455.      (texinfo-print-index nil indexelts)
  28456.  
  28457. -    (if (eq system-type 'vax-vms)
  28458. +    (if (or (eq system-type 'amigados) (eq system-type 'vax-vms))
  28459.          (texinfo-sort-region opoint (point))
  28460.        (shell-command-on-region opoint (point) "sort -fd" 1))))
  28461.  
  28462. diff -ru --new-file baseline/fsf/emacs/lisp/version.el amiga/fsf/emacs/lisp/version.el
  28463. --- baseline/fsf/emacs/lisp/version.el    Wed Oct  5 22:06:53 1994
  28464. +++ amiga/fsf/emacs/lisp/version.el    Sun Oct 15 17:06:59 1995
  28465. @@ -28,15 +28,15 @@
  28466.  
  28467.  (defconst emacs-major-version
  28468.    (progn (string-match "^[0-9]+" emacs-version)
  28469. -     (string-to-int (substring emacs-version
  28470. -                   (match-beginning 0) (match-end 0))))
  28471. +         (string-to-int (substring emacs-version
  28472. +                                   (match-beginning 0) (match-end 0))))
  28473.    "Major version number of this version of Emacs.
  28474.  This variable first existed in version 19.23.")
  28475.  
  28476.  (defconst emacs-minor-version
  28477.    (progn (string-match "^[0-9]+\\.\\([0-9]+\\)" emacs-version)
  28478. -     (string-to-int (substring emacs-version
  28479. -                   (match-beginning 1) (match-end 1))))
  28480. +         (string-to-int (substring emacs-version
  28481. +                                   (match-beginning 1) (match-end 1))))
  28482.    "Minor version number of this version of Emacs.
  28483.  This variable first existed in version 19.23.")
  28484.  
  28485. diff -ru --new-file baseline/fsf/emacs/manifests/src amiga/fsf/emacs/manifests/src
  28486. --- baseline/fsf/emacs/manifests/src    Wed Dec 31 17:00:00 1969
  28487. +++ amiga/fsf/emacs/manifests/src    Sun Dec 10 11:30:11 1995
  28488. @@ -0,0 +1,1638 @@
  28489. +fsf/emacs/BUGS
  28490. +fsf/emacs/ChangeLog
  28491. +fsf/emacs/Checksums
  28492. +fsf/emacs/GETTING.GNU.SOFTWARE
  28493. +fsf/emacs/INSTALL
  28494. +fsf/emacs/INSTALLATION
  28495. +fsf/emacs/Makefile.in
  28496. +fsf/emacs/PROBLEMS
  28497. +fsf/emacs/Product-Info
  28498. +fsf/emacs/README
  28499. +fsf/emacs/README.1st
  28500. +fsf/emacs/amiga.doc
  28501. +fsf/emacs/announce2.0
  28502. +fsf/emacs/build-ins.in
  28503. +fsf/emacs/compile.doc
  28504. +fsf/emacs/config.bat
  28505. +fsf/emacs/config.guess
  28506. +fsf/emacs/config.sub
  28507. +fsf/emacs/configure
  28508. +fsf/emacs/configure.in
  28509. +fsf/emacs/cpp/Makefile
  28510. +fsf/emacs/cpp/README
  28511. +fsf/emacs/cpp/SASCOPTS
  28512. +fsf/emacs/cpp/SCOPTIONS
  28513. +fsf/emacs/cpp/cccp.c
  28514. +fsf/emacs/cpp/cccp.lnk
  28515. +fsf/emacs/cpp/cexp.y
  28516. +fsf/emacs/cpp/lmkfile
  28517. +fsf/emacs/etc/3B-MAXMEM
  28518. +fsf/emacs/etc/AIX.DUMP
  28519. +fsf/emacs/etc/APPLE
  28520. +fsf/emacs/etc/BABYL
  28521. +fsf/emacs/etc/COOKIES
  28522. +fsf/emacs/etc/COPYING
  28523. +fsf/emacs/etc/ChangeLog
  28524. +fsf/emacs/etc/DEBUG
  28525. +fsf/emacs/etc/DISTRIB
  28526. +fsf/emacs/etc/DOC
  28527. +fsf/emacs/etc/DOC-19.28.1
  28528. +fsf/emacs/etc/EMACS-DATA
  28529. +fsf/emacs/etc/FAQ
  28530. +fsf/emacs/etc/FTP
  28531. +fsf/emacs/etc/GNU
  28532. +fsf/emacs/etc/INTERVIEW
  28533. +fsf/emacs/etc/JOKES
  28534. +fsf/emacs/etc/LEDIT
  28535. +fsf/emacs/etc/LNEWS
  28536. +fsf/emacs/etc/LPF
  28537. +fsf/emacs/etc/MACHINES
  28538. +fsf/emacs/etc/MAILINGLISTS
  28539. +fsf/emacs/etc/MH-E-NEWS
  28540. +fsf/emacs/etc/MORE.STUFF
  28541. +fsf/emacs/etc/MOTIVATION
  28542. +fsf/emacs/etc/MSDOS
  28543. +fsf/emacs/etc/Makefile
  28544. +fsf/emacs/etc/NEWS
  28545. +fsf/emacs/etc/ONEWS
  28546. +fsf/emacs/etc/OONEWS
  28547. +fsf/emacs/etc/OOONEWS
  28548. +fsf/emacs/etc/OOOONEWS
  28549. +fsf/emacs/etc/ORDERS
  28550. +fsf/emacs/etc/ORDERS.EUROPE
  28551. +fsf/emacs/etc/ORDERS.JAPAN
  28552. +fsf/emacs/etc/OTHER.EMACSES
  28553. +fsf/emacs/etc/README
  28554. +fsf/emacs/etc/SERVICE
  28555. +fsf/emacs/etc/SUN-SUPPORT
  28556. +fsf/emacs/etc/TERMS
  28557. +fsf/emacs/etc/TUTORIAL
  28558. +fsf/emacs/etc/Xkeymap.txt
  28559. +fsf/emacs/etc/celibacy.1
  28560. +fsf/emacs/etc/condom.1
  28561. +fsf/emacs/etc/copying.paper
  28562. +fsf/emacs/etc/ctags.1
  28563. +fsf/emacs/etc/echo.msg
  28564. +fsf/emacs/etc/emacs.1
  28565. +fsf/emacs/etc/emacs.bash
  28566. +fsf/emacs/etc/emacs.csh
  28567. +fsf/emacs/etc/emacs.icon
  28568. +fsf/emacs/etc/emacs.xbm
  28569. +fsf/emacs/etc/emacstool.1
  28570. +fsf/emacs/etc/etags.1
  28571. +fsf/emacs/etc/etags.notes
  28572. +fsf/emacs/etc/etags.vms
  28573. +fsf/emacs/etc/ledit.l
  28574. +fsf/emacs/etc/ms-kermit
  28575. +fsf/emacs/etc/ms-kermit-7bit
  28576. +fsf/emacs/etc/news.texi
  28577. +fsf/emacs/etc/refcard.ps
  28578. +fsf/emacs/etc/refcard.tex
  28579. +fsf/emacs/etc/sex.6
  28580. +fsf/emacs/etc/spook.lines
  28581. +fsf/emacs/etc/termcap.dat
  28582. +fsf/emacs/etc/termcap.ucb
  28583. +fsf/emacs/etc/ulimit.hack
  28584. +fsf/emacs/etc/vipcard.tex
  28585. +fsf/emacs/etc/yow.lines
  28586. +fsf/emacs/info/COPYING
  28587. +fsf/emacs/info/cl
  28588. +fsf/emacs/info/cl-1
  28589. +fsf/emacs/info/cl-2
  28590. +fsf/emacs/info/cl-3
  28591. +fsf/emacs/info/cl-4
  28592. +fsf/emacs/info/cl-5
  28593. +fsf/emacs/info/cl-6
  28594. +fsf/emacs/info/dir
  28595. +fsf/emacs/info/dired-x
  28596. +fsf/emacs/info/emacs
  28597. +fsf/emacs/info/emacs-1
  28598. +fsf/emacs/info/emacs-10
  28599. +fsf/emacs/info/emacs-11
  28600. +fsf/emacs/info/emacs-12
  28601. +fsf/emacs/info/emacs-13
  28602. +fsf/emacs/info/emacs-14
  28603. +fsf/emacs/info/emacs-15
  28604. +fsf/emacs/info/emacs-16
  28605. +fsf/emacs/info/emacs-17
  28606. +fsf/emacs/info/emacs-18
  28607. +fsf/emacs/info/emacs-19
  28608. +fsf/emacs/info/emacs-2
  28609. +fsf/emacs/info/emacs-20
  28610. +fsf/emacs/info/emacs-21
  28611. +fsf/emacs/info/emacs-22
  28612. +fsf/emacs/info/emacs-23
  28613. +fsf/emacs/info/emacs-24
  28614. +fsf/emacs/info/emacs-3
  28615. +fsf/emacs/info/emacs-4
  28616. +fsf/emacs/info/emacs-5
  28617. +fsf/emacs/info/emacs-6
  28618. +fsf/emacs/info/emacs-7
  28619. +fsf/emacs/info/emacs-8
  28620. +fsf/emacs/info/emacs-9
  28621. +fsf/emacs/info/forms
  28622. +fsf/emacs/info/gnus
  28623. +fsf/emacs/info/gnus-1
  28624. +fsf/emacs/info/gnus-2
  28625. +fsf/emacs/info/gnus-3
  28626. +fsf/emacs/info/info
  28627. +fsf/emacs/info/sc
  28628. +fsf/emacs/info/sc-1
  28629. +fsf/emacs/info/sc-2
  28630. +fsf/emacs/info/sc-3
  28631. +fsf/emacs/info/vip
  28632. +fsf/emacs/info/vip-1
  28633. +fsf/emacs/info/vip-2
  28634. +fsf/emacs/install.sh
  28635. +fsf/emacs/lib-src/COPYING
  28636. +fsf/emacs/lib-src/ChangeLog
  28637. +fsf/emacs/lib-src/Makefile.in.in
  28638. +fsf/emacs/lib-src/README
  28639. +fsf/emacs/lib-src/SCOPTIONS
  28640. +fsf/emacs/lib-src/aixcc.lex
  28641. +fsf/emacs/lib-src/alloca.c
  28642. +fsf/emacs/lib-src/b2m.c
  28643. +fsf/emacs/lib-src/cvtmail.c
  28644. +fsf/emacs/lib-src/digest-doc.c
  28645. +fsf/emacs/lib-src/emacs.csh
  28646. +fsf/emacs/lib-src/emacsclient.c
  28647. +fsf/emacs/lib-src/emacsserver.c
  28648. +fsf/emacs/lib-src/emacstool.c
  28649. +fsf/emacs/lib-src/env.c
  28650. +fsf/emacs/lib-src/etags-vmslib.c
  28651. +fsf/emacs/lib-src/etags.c
  28652. +fsf/emacs/lib-src/fakemail.c
  28653. +fsf/emacs/lib-src/getdate.c
  28654. +fsf/emacs/lib-src/getdate.y
  28655. +fsf/emacs/lib-src/getopt.c
  28656. +fsf/emacs/lib-src/getopt.h
  28657. +fsf/emacs/lib-src/getopt1.c
  28658. +fsf/emacs/lib-src/hexl.c
  28659. +fsf/emacs/lib-src/leditcfns.c
  28660. +fsf/emacs/lib-src/make-docfile.c
  28661. +fsf/emacs/lib-src/make-docfile.lnk
  28662. +fsf/emacs/lib-src/make-path.c
  28663. +fsf/emacs/lib-src/movemail.c
  28664. +fsf/emacs/lib-src/profile.c
  28665. +fsf/emacs/lib-src/qsort.c
  28666. +fsf/emacs/lib-src/rcs-checkin
  28667. +fsf/emacs/lib-src/rcs2log
  28668. +fsf/emacs/lib-src/sh.c
  28669. +fsf/emacs/lib-src/sorted-doc.c
  28670. +fsf/emacs/lib-src/tcp.c
  28671. +fsf/emacs/lib-src/test-distrib.c
  28672. +fsf/emacs/lib-src/testfile
  28673. +fsf/emacs/lib-src/timer.c
  28674. +fsf/emacs/lib-src/vcdiff
  28675. +fsf/emacs/lib-src/wakeup.c
  28676. +fsf/emacs/lib-src/yow.c
  28677. +fsf/emacs/lisp/COPYING
  28678. +fsf/emacs/lisp/ChangeLog
  28679. +fsf/emacs/lisp/ChangeLog.1
  28680. +fsf/emacs/lisp/ChangeLog.2
  28681. +fsf/emacs/lisp/ChangeLog.3
  28682. +fsf/emacs/lisp/Makefile
  28683. +fsf/emacs/lisp/README
  28684. +fsf/emacs/lisp/abbrev.el
  28685. +fsf/emacs/lisp/abbrev.elc
  28686. +fsf/emacs/lisp/abbrevlist.el
  28687. +fsf/emacs/lisp/abbrevlist.elc
  28688. +fsf/emacs/lisp/ada.el
  28689. +fsf/emacs/lisp/ada.elc
  28690. +fsf/emacs/lisp/add-log.el
  28691. +fsf/emacs/lisp/add-log.elc
  28692. +fsf/emacs/lisp/advice.el
  28693. +fsf/emacs/lisp/advice.elc
  28694. +fsf/emacs/lisp/allout.el
  28695. +fsf/emacs/lisp/allout.elc
  28696. +fsf/emacs/lisp/amiga-init.el
  28697. +fsf/emacs/lisp/amiga-init.elc
  28698. +fsf/emacs/lisp/amiga-menu-bar.el
  28699. +fsf/emacs/lisp/amiga-menu.el
  28700. +fsf/emacs/lisp/amiga-mouse-old.el
  28701. +fsf/emacs/lisp/amiga-mouse.el
  28702. +fsf/emacs/lisp/ange-ftp.el
  28703. +fsf/emacs/lisp/ange-ftp.elc
  28704. +fsf/emacs/lisp/appt.el
  28705. +fsf/emacs/lisp/appt.elc
  28706. +fsf/emacs/lisp/apropos.el
  28707. +fsf/emacs/lisp/apropos.elc
  28708. +fsf/emacs/lisp/array.el
  28709. +fsf/emacs/lisp/array.elc
  28710. +fsf/emacs/lisp/asm-mode.el
  28711. +fsf/emacs/lisp/asm-mode.elc
  28712. +fsf/emacs/lisp/assoc.el
  28713. +fsf/emacs/lisp/assoc.elc
  28714. +fsf/emacs/lisp/autoinsert.el
  28715. +fsf/emacs/lisp/autoinsert.elc
  28716. +fsf/emacs/lisp/autoload.el
  28717. +fsf/emacs/lisp/autoload.elc
  28718. +fsf/emacs/lisp/avoid.el
  28719. +fsf/emacs/lisp/avoid.elc
  28720. +fsf/emacs/lisp/awk-mode.el
  28721. +fsf/emacs/lisp/awk-mode.elc
  28722. +fsf/emacs/lisp/backquote.el
  28723. +fsf/emacs/lisp/backquote.elc
  28724. +fsf/emacs/lisp/bib-mode.el
  28725. +fsf/emacs/lisp/bib-mode.elc
  28726. +fsf/emacs/lisp/bibtex.el
  28727. +fsf/emacs/lisp/bibtex.elc
  28728. +fsf/emacs/lisp/blackbox.el
  28729. +fsf/emacs/lisp/blackbox.elc
  28730. +fsf/emacs/lisp/blessmail.el
  28731. +fsf/emacs/lisp/bookmark.el
  28732. +fsf/emacs/lisp/bookmark.elc
  28733. +fsf/emacs/lisp/buff-menu.el
  28734. +fsf/emacs/lisp/buff-menu.elc
  28735. +fsf/emacs/lisp/byte-opt.el
  28736. +fsf/emacs/lisp/byte-opt.elc
  28737. +fsf/emacs/lisp/byte-run.el
  28738. +fsf/emacs/lisp/byte-run.elc
  28739. +fsf/emacs/lisp/bytecomp.el
  28740. +fsf/emacs/lisp/bytecomp.elc
  28741. +fsf/emacs/lisp/c-mode.el
  28742. +fsf/emacs/lisp/c-mode.elc
  28743. +fsf/emacs/lisp/cal-dst.el
  28744. +fsf/emacs/lisp/cal-dst.elc
  28745. +fsf/emacs/lisp/cal-french.el
  28746. +fsf/emacs/lisp/cal-french.elc
  28747. +fsf/emacs/lisp/cal-mayan.el
  28748. +fsf/emacs/lisp/cal-mayan.elc
  28749. +fsf/emacs/lisp/cal-menu.el
  28750. +fsf/emacs/lisp/cal-menu.elc
  28751. +fsf/emacs/lisp/calendar.el
  28752. +fsf/emacs/lisp/calendar.elc
  28753. +fsf/emacs/lisp/case-table.el
  28754. +fsf/emacs/lisp/case-table.elc
  28755. +fsf/emacs/lisp/cc-mode.el
  28756. +fsf/emacs/lisp/cc-mode.elc
  28757. +fsf/emacs/lisp/cdl.el
  28758. +fsf/emacs/lisp/cdl.elc
  28759. +fsf/emacs/lisp/chistory.el
  28760. +fsf/emacs/lisp/chistory.elc
  28761. +fsf/emacs/lisp/cl-compat.el
  28762. +fsf/emacs/lisp/cl-compat.elc
  28763. +fsf/emacs/lisp/cl-extra.el
  28764. +fsf/emacs/lisp/cl-extra.elc
  28765. +fsf/emacs/lisp/cl-indent.el
  28766. +fsf/emacs/lisp/cl-indent.elc
  28767. +fsf/emacs/lisp/cl-macs.el
  28768. +fsf/emacs/lisp/cl-macs.elc
  28769. +fsf/emacs/lisp/cl-seq.el
  28770. +fsf/emacs/lisp/cl-seq.elc
  28771. +fsf/emacs/lisp/cl-specs.el
  28772. +fsf/emacs/lisp/cl-specs.elc
  28773. +fsf/emacs/lisp/cl.el
  28774. +fsf/emacs/lisp/cl.elc
  28775. +fsf/emacs/lisp/cmacexp.el
  28776. +fsf/emacs/lisp/cmacexp.elc
  28777. +fsf/emacs/lisp/cmuscheme.el
  28778. +fsf/emacs/lisp/cmuscheme.elc
  28779. +fsf/emacs/lisp/comint.el
  28780. +fsf/emacs/lisp/comint.elc
  28781. +fsf/emacs/lisp/compare-w.el
  28782. +fsf/emacs/lisp/compare-w.elc
  28783. +fsf/emacs/lisp/compile.el
  28784. +fsf/emacs/lisp/compile.elc
  28785. +fsf/emacs/lisp/complete.el
  28786. +fsf/emacs/lisp/complete.elc
  28787. +fsf/emacs/lisp/completion.el
  28788. +fsf/emacs/lisp/completion.elc
  28789. +fsf/emacs/lisp/cookie1.el
  28790. +fsf/emacs/lisp/cookie1.elc
  28791. +fsf/emacs/lisp/cplus-md.el
  28792. +fsf/emacs/lisp/cplus-md.elc
  28793. +fsf/emacs/lisp/cust-print.el
  28794. +fsf/emacs/lisp/cust-print.elc
  28795. +fsf/emacs/lisp/dabbrev.el
  28796. +fsf/emacs/lisp/dabbrev.elc
  28797. +fsf/emacs/lisp/debug.el
  28798. +fsf/emacs/lisp/debug.elc
  28799. +fsf/emacs/lisp/delsel.el
  28800. +fsf/emacs/lisp/delsel.elc
  28801. +fsf/emacs/lisp/derived.el
  28802. +fsf/emacs/lisp/derived.elc
  28803. +fsf/emacs/lisp/desktop.el
  28804. +fsf/emacs/lisp/desktop.elc
  28805. +fsf/emacs/lisp/diary-ins.el
  28806. +fsf/emacs/lisp/diary-ins.elc
  28807. +fsf/emacs/lisp/diary-lib.el
  28808. +fsf/emacs/lisp/diary-lib.elc
  28809. +fsf/emacs/lisp/diff.el
  28810. +fsf/emacs/lisp/diff.elc
  28811. +fsf/emacs/lisp/dired-aux.el
  28812. +fsf/emacs/lisp/dired-aux.elc
  28813. +fsf/emacs/lisp/dired-x.el
  28814. +fsf/emacs/lisp/dired-x.elc
  28815. +fsf/emacs/lisp/dired.el
  28816. +fsf/emacs/lisp/dired.elc
  28817. +fsf/emacs/lisp/dired.todo
  28818. +fsf/emacs/lisp/disass.el
  28819. +fsf/emacs/lisp/disass.elc
  28820. +fsf/emacs/lisp/disp-table.el
  28821. +fsf/emacs/lisp/disp-table.elc
  28822. +fsf/emacs/lisp/dissociate.el
  28823. +fsf/emacs/lisp/dissociate.elc
  28824. +fsf/emacs/lisp/doctor.el
  28825. +fsf/emacs/lisp/doctor.elc
  28826. +fsf/emacs/lisp/dos-fns.el
  28827. +fsf/emacs/lisp/dos-fns.elc
  28828. +fsf/emacs/lisp/double.el
  28829. +fsf/emacs/lisp/double.elc
  28830. +fsf/emacs/lisp/dunnet.el
  28831. +fsf/emacs/lisp/dunnet.elc
  28832. +fsf/emacs/lisp/easymenu.el
  28833. +fsf/emacs/lisp/easymenu.elc
  28834. +fsf/emacs/lisp/ebuff-menu.el
  28835. +fsf/emacs/lisp/ebuff-menu.elc
  28836. +fsf/emacs/lisp/echistory.el
  28837. +fsf/emacs/lisp/echistory.elc
  28838. +fsf/emacs/lisp/edebug.el
  28839. +fsf/emacs/lisp/edebug.elc
  28840. +fsf/emacs/lisp/ediff.el
  28841. +fsf/emacs/lisp/ediff.elc
  28842. +fsf/emacs/lisp/edmacro.el
  28843. +fsf/emacs/lisp/edmacro.elc
  28844. +fsf/emacs/lisp/edt.el
  28845. +fsf/emacs/lisp/edt.elc
  28846. +fsf/emacs/lisp/ehelp.el
  28847. +fsf/emacs/lisp/ehelp.elc
  28848. +fsf/emacs/lisp/electric.el
  28849. +fsf/emacs/lisp/electric.elc
  28850. +fsf/emacs/lisp/emacsbug.el
  28851. +fsf/emacs/lisp/emacsbug.elc
  28852. +fsf/emacs/lisp/emerge.el
  28853. +fsf/emacs/lisp/emerge.elc
  28854. +fsf/emacs/lisp/env.el
  28855. +fsf/emacs/lisp/env.elc
  28856. +fsf/emacs/lisp/etags.el
  28857. +fsf/emacs/lisp/etags.elc
  28858. +fsf/emacs/lisp/eval-reg.el
  28859. +fsf/emacs/lisp/eval-reg.elc
  28860. +fsf/emacs/lisp/faces.el
  28861. +fsf/emacs/lisp/faces.elc
  28862. +fsf/emacs/lisp/files.el
  28863. +fsf/emacs/lisp/files.elc
  28864. +fsf/emacs/lisp/fill.el
  28865. +fsf/emacs/lisp/fill.elc
  28866. +fsf/emacs/lisp/find-dired.el
  28867. +fsf/emacs/lisp/find-dired.elc
  28868. +fsf/emacs/lisp/find-gc.el
  28869. +fsf/emacs/lisp/find-gc.elc
  28870. +fsf/emacs/lisp/finder-inf.el
  28871. +fsf/emacs/lisp/finder-inf.elc
  28872. +fsf/emacs/lisp/finder.el
  28873. +fsf/emacs/lisp/finder.elc
  28874. +fsf/emacs/lisp/float-sup.el
  28875. +fsf/emacs/lisp/float-sup.elc
  28876. +fsf/emacs/lisp/float.el
  28877. +fsf/emacs/lisp/float.elc
  28878. +fsf/emacs/lisp/flow-ctrl.el
  28879. +fsf/emacs/lisp/flow-ctrl.elc
  28880. +fsf/emacs/lisp/foldout.el
  28881. +fsf/emacs/lisp/foldout.elc
  28882. +fsf/emacs/lisp/font-lock.el
  28883. +fsf/emacs/lisp/font-lock.elc
  28884. +fsf/emacs/lisp/forms-d2.dat
  28885. +fsf/emacs/lisp/forms-d2.el
  28886. +fsf/emacs/lisp/forms-pass.el
  28887. +fsf/emacs/lisp/forms.el
  28888. +fsf/emacs/lisp/forms.elc
  28889. +fsf/emacs/lisp/fortran.el
  28890. +fsf/emacs/lisp/fortran.elc
  28891. +fsf/emacs/lisp/frame.el
  28892. +fsf/emacs/lisp/frame.elc
  28893. +fsf/emacs/lisp/gnus-uu.el
  28894. +fsf/emacs/lisp/gnus-uu.elc
  28895. +fsf/emacs/lisp/gnus.el
  28896. +fsf/emacs/lisp/gnus.elc
  28897. +fsf/emacs/lisp/gnusmail.el
  28898. +fsf/emacs/lisp/gnusmail.elc
  28899. +fsf/emacs/lisp/gnusmisc.el
  28900. +fsf/emacs/lisp/gnusmisc.elc
  28901. +fsf/emacs/lisp/gnuspost.el
  28902. +fsf/emacs/lisp/gnuspost.elc
  28903. +fsf/emacs/lisp/gomoku.el
  28904. +fsf/emacs/lisp/gomoku.elc
  28905. +fsf/emacs/lisp/gud.el
  28906. +fsf/emacs/lisp/gud.elc
  28907. +fsf/emacs/lisp/hanoi.el
  28908. +fsf/emacs/lisp/hanoi.elc
  28909. +fsf/emacs/lisp/help-macro.el
  28910. +fsf/emacs/lisp/help-macro.elc
  28911. +fsf/emacs/lisp/help.el
  28912. +fsf/emacs/lisp/help.elc
  28913. +fsf/emacs/lisp/helper.el
  28914. +fsf/emacs/lisp/helper.elc
  28915. +fsf/emacs/lisp/hexl.el
  28916. +fsf/emacs/lisp/hexl.elc
  28917. +fsf/emacs/lisp/hideif.el
  28918. +fsf/emacs/lisp/hideif.elc
  28919. +fsf/emacs/lisp/hilit19.el
  28920. +fsf/emacs/lisp/hilit19.elc
  28921. +fsf/emacs/lisp/hippie-exp.el
  28922. +fsf/emacs/lisp/hippie-exp.elc
  28923. +fsf/emacs/lisp/holidays.el
  28924. +fsf/emacs/lisp/holidays.elc
  28925. +fsf/emacs/lisp/icomplete.el
  28926. +fsf/emacs/lisp/icomplete.elc
  28927. +fsf/emacs/lisp/icon.el
  28928. +fsf/emacs/lisp/icon.elc
  28929. +fsf/emacs/lisp/ielm.el
  28930. +fsf/emacs/lisp/ielm.elc
  28931. +fsf/emacs/lisp/imenu.el
  28932. +fsf/emacs/lisp/imenu.elc
  28933. +fsf/emacs/lisp/indent.el
  28934. +fsf/emacs/lisp/indent.elc
  28935. +fsf/emacs/lisp/inf-lisp.el
  28936. +fsf/emacs/lisp/inf-lisp.elc
  28937. +fsf/emacs/lisp/info.el
  28938. +fsf/emacs/lisp/info.elc
  28939. +fsf/emacs/lisp/informat.el
  28940. +fsf/emacs/lisp/informat.elc
  28941. +fsf/emacs/lisp/isearch.el
  28942. +fsf/emacs/lisp/isearch.elc
  28943. +fsf/emacs/lisp/iso-acc.el
  28944. +fsf/emacs/lisp/iso-acc.elc
  28945. +fsf/emacs/lisp/iso-ascii.el
  28946. +fsf/emacs/lisp/iso-ascii.elc
  28947. +fsf/emacs/lisp/iso-cvt.el
  28948. +fsf/emacs/lisp/iso-cvt.elc
  28949. +fsf/emacs/lisp/iso-insert.el
  28950. +fsf/emacs/lisp/iso-insert.elc
  28951. +fsf/emacs/lisp/iso-swed.el
  28952. +fsf/emacs/lisp/iso-swed.elc
  28953. +fsf/emacs/lisp/iso-syntax.el
  28954. +fsf/emacs/lisp/iso-syntax.elc
  28955. +fsf/emacs/lisp/iso-transl.el
  28956. +fsf/emacs/lisp/iso-transl.elc
  28957. +fsf/emacs/lisp/ispell.el
  28958. +fsf/emacs/lisp/ispell.elc
  28959. +fsf/emacs/lisp/ispell4.el
  28960. +fsf/emacs/lisp/ispell4.elc
  28961. +fsf/emacs/lisp/jka-compr.el
  28962. +fsf/emacs/lisp/jka-compr.elc
  28963. +fsf/emacs/lisp/kermit.el
  28964. +fsf/emacs/lisp/kermit.elc
  28965. +fsf/emacs/lisp/ledit.el
  28966. +fsf/emacs/lisp/ledit.elc
  28967. +fsf/emacs/lisp/levents.el
  28968. +fsf/emacs/lisp/levents.elc
  28969. +fsf/emacs/lisp/life.el
  28970. +fsf/emacs/lisp/life.elc
  28971. +fsf/emacs/lisp/lisp-mnt.el
  28972. +fsf/emacs/lisp/lisp-mnt.elc
  28973. +fsf/emacs/lisp/lisp-mode.el
  28974. +fsf/emacs/lisp/lisp-mode.elc
  28975. +fsf/emacs/lisp/lisp.el
  28976. +fsf/emacs/lisp/lisp.elc
  28977. +fsf/emacs/lisp/lmenu.el
  28978. +fsf/emacs/lisp/lmenu.elc
  28979. +fsf/emacs/lisp/loaddefs.el
  28980. +fsf/emacs/lisp/loadhist.el
  28981. +fsf/emacs/lisp/loadhist.elc
  28982. +fsf/emacs/lisp/loadup.el
  28983. +fsf/emacs/lisp/lpr.el
  28984. +fsf/emacs/lisp/lpr.elc
  28985. +fsf/emacs/lisp/ls-lisp.el
  28986. +fsf/emacs/lisp/ls-lisp.elc
  28987. +fsf/emacs/lisp/lselect.el
  28988. +fsf/emacs/lisp/lselect.elc
  28989. +fsf/emacs/lisp/lucid.el
  28990. +fsf/emacs/lisp/lucid.elc
  28991. +fsf/emacs/lisp/lunar.el
  28992. +fsf/emacs/lisp/lunar.elc
  28993. +fsf/emacs/lisp/macros.el
  28994. +fsf/emacs/lisp/macros.elc
  28995. +fsf/emacs/lisp/mail-extr.el
  28996. +fsf/emacs/lisp/mail-extr.elc
  28997. +fsf/emacs/lisp/mail-hist.el
  28998. +fsf/emacs/lisp/mail-hist.elc
  28999. +fsf/emacs/lisp/mail-utils.el
  29000. +fsf/emacs/lisp/mail-utils.elc
  29001. +fsf/emacs/lisp/mailabbrev.el
  29002. +fsf/emacs/lisp/mailabbrev.elc
  29003. +fsf/emacs/lisp/mailalias.el
  29004. +fsf/emacs/lisp/mailalias.elc
  29005. +fsf/emacs/lisp/mailpost.el
  29006. +fsf/emacs/lisp/mailpost.elc
  29007. +fsf/emacs/lisp/makefile.el
  29008. +fsf/emacs/lisp/makefile.elc
  29009. +fsf/emacs/lisp/makeinfo.el
  29010. +fsf/emacs/lisp/makeinfo.elc
  29011. +fsf/emacs/lisp/makesum.el
  29012. +fsf/emacs/lisp/makesum.elc
  29013. +fsf/emacs/lisp/man.el
  29014. +fsf/emacs/lisp/man.elc
  29015. +fsf/emacs/lisp/map-ynp.el
  29016. +fsf/emacs/lisp/map-ynp.elc
  29017. +fsf/emacs/lisp/medit.el
  29018. +fsf/emacs/lisp/medit.elc
  29019. +fsf/emacs/lisp/meese.el
  29020. +fsf/emacs/lisp/meese.elc
  29021. +fsf/emacs/lisp/menu-bar.el
  29022. +fsf/emacs/lisp/menu-bar.elc
  29023. +fsf/emacs/lisp/metamail.el
  29024. +fsf/emacs/lisp/metamail.elc
  29025. +fsf/emacs/lisp/mh-comp.el
  29026. +fsf/emacs/lisp/mh-comp.elc
  29027. +fsf/emacs/lisp/mh-e.el
  29028. +fsf/emacs/lisp/mh-e.elc
  29029. +fsf/emacs/lisp/mh-funcs.el
  29030. +fsf/emacs/lisp/mh-funcs.elc
  29031. +fsf/emacs/lisp/mh-mime.el
  29032. +fsf/emacs/lisp/mh-mime.elc
  29033. +fsf/emacs/lisp/mh-pick.el
  29034. +fsf/emacs/lisp/mh-pick.elc
  29035. +fsf/emacs/lisp/mh-seq.el
  29036. +fsf/emacs/lisp/mh-seq.elc
  29037. +fsf/emacs/lisp/mh-utils.el
  29038. +fsf/emacs/lisp/mh-utils.elc
  29039. +fsf/emacs/lisp/mhspool.el
  29040. +fsf/emacs/lisp/mhspool.elc
  29041. +fsf/emacs/lisp/mim-mode.el
  29042. +fsf/emacs/lisp/mim-mode.elc
  29043. +fsf/emacs/lisp/mim-syntax.el
  29044. +fsf/emacs/lisp/mim-syntax.elc
  29045. +fsf/emacs/lisp/misc.el
  29046. +fsf/emacs/lisp/misc.elc
  29047. +fsf/emacs/lisp/mlconvert.el
  29048. +fsf/emacs/lisp/mlconvert.elc
  29049. +fsf/emacs/lisp/mldrag.el
  29050. +fsf/emacs/lisp/mldrag.elc
  29051. +fsf/emacs/lisp/mlsupport.el
  29052. +fsf/emacs/lisp/mlsupport.elc
  29053. +fsf/emacs/lisp/modula2.el
  29054. +fsf/emacs/lisp/modula2.elc
  29055. +fsf/emacs/lisp/mouse-sel.el
  29056. +fsf/emacs/lisp/mouse-sel.elc
  29057. +fsf/emacs/lisp/mouse.el
  29058. +fsf/emacs/lisp/mouse.elc
  29059. +fsf/emacs/lisp/mpuz.el
  29060. +fsf/emacs/lisp/mpuz.elc
  29061. +fsf/emacs/lisp/netunam.el
  29062. +fsf/emacs/lisp/netunam.elc
  29063. +fsf/emacs/lisp/nnspool.el
  29064. +fsf/emacs/lisp/nnspool.elc
  29065. +fsf/emacs/lisp/nntp.el
  29066. +fsf/emacs/lisp/nntp.elc
  29067. +fsf/emacs/lisp/novice.el
  29068. +fsf/emacs/lisp/novice.elc
  29069. +fsf/emacs/lisp/nroff-mode.el
  29070. +fsf/emacs/lisp/nroff-mode.elc
  29071. +fsf/emacs/lisp/options.el
  29072. +fsf/emacs/lisp/options.elc
  29073. +fsf/emacs/lisp/outline.el
  29074. +fsf/emacs/lisp/outline.elc
  29075. +fsf/emacs/lisp/page-ext.el
  29076. +fsf/emacs/lisp/page-ext.elc
  29077. +fsf/emacs/lisp/page.el
  29078. +fsf/emacs/lisp/page.elc
  29079. +fsf/emacs/lisp/paragraphs.el
  29080. +fsf/emacs/lisp/paragraphs.elc
  29081. +fsf/emacs/lisp/paren.el
  29082. +fsf/emacs/lisp/paren.elc
  29083. +fsf/emacs/lisp/pascal.el
  29084. +fsf/emacs/lisp/pascal.elc
  29085. +fsf/emacs/lisp/paths.el
  29086. +fsf/emacs/lisp/perl-mode.el
  29087. +fsf/emacs/lisp/perl-mode.elc
  29088. +fsf/emacs/lisp/picture.el
  29089. +fsf/emacs/lisp/picture.elc
  29090. +fsf/emacs/lisp/pp.el
  29091. +fsf/emacs/lisp/pp.elc
  29092. +fsf/emacs/lisp/profile.el
  29093. +fsf/emacs/lisp/profile.elc
  29094. +fsf/emacs/lisp/prolog.el
  29095. +fsf/emacs/lisp/prolog.elc
  29096. +fsf/emacs/lisp/rcompile.el
  29097. +fsf/emacs/lisp/rcompile.elc
  29098. +fsf/emacs/lisp/rect.el
  29099. +fsf/emacs/lisp/rect.elc
  29100. +fsf/emacs/lisp/refbib.el
  29101. +fsf/emacs/lisp/refbib.elc
  29102. +fsf/emacs/lisp/refer.el
  29103. +fsf/emacs/lisp/refer.elc
  29104. +fsf/emacs/lisp/regi.el
  29105. +fsf/emacs/lisp/regi.elc
  29106. +fsf/emacs/lisp/register.el
  29107. +fsf/emacs/lisp/register.elc
  29108. +fsf/emacs/lisp/replace.el
  29109. +fsf/emacs/lisp/replace.elc
  29110. +fsf/emacs/lisp/reporter.el
  29111. +fsf/emacs/lisp/reporter.elc
  29112. +fsf/emacs/lisp/reposition.el
  29113. +fsf/emacs/lisp/reposition.elc
  29114. +fsf/emacs/lisp/resume.el
  29115. +fsf/emacs/lisp/resume.elc
  29116. +fsf/emacs/lisp/rfc822.el
  29117. +fsf/emacs/lisp/rfc822.elc
  29118. +fsf/emacs/lisp/ring.el
  29119. +fsf/emacs/lisp/ring.elc
  29120. +fsf/emacs/lisp/rlogin.el
  29121. +fsf/emacs/lisp/rlogin.elc
  29122. +fsf/emacs/lisp/rmail.el
  29123. +fsf/emacs/lisp/rmail.elc
  29124. +fsf/emacs/lisp/rmailedit.el
  29125. +fsf/emacs/lisp/rmailedit.elc
  29126. +fsf/emacs/lisp/rmailkwd.el
  29127. +fsf/emacs/lisp/rmailkwd.elc
  29128. +fsf/emacs/lisp/rmailmsc.el
  29129. +fsf/emacs/lisp/rmailmsc.elc
  29130. +fsf/emacs/lisp/rmailout.el
  29131. +fsf/emacs/lisp/rmailout.elc
  29132. +fsf/emacs/lisp/rmailsort.el
  29133. +fsf/emacs/lisp/rmailsort.elc
  29134. +fsf/emacs/lisp/rmailsum.el
  29135. +fsf/emacs/lisp/rmailsum.elc
  29136. +fsf/emacs/lisp/rnews.el
  29137. +fsf/emacs/lisp/rnews.elc
  29138. +fsf/emacs/lisp/rnewspost.el
  29139. +fsf/emacs/lisp/rnewspost.elc
  29140. +fsf/emacs/lisp/rot13.el
  29141. +fsf/emacs/lisp/rot13.elc
  29142. +fsf/emacs/lisp/rsz-mini.el
  29143. +fsf/emacs/lisp/rsz-mini.elc
  29144. +fsf/emacs/lisp/s-region.el
  29145. +fsf/emacs/lisp/s-region.elc
  29146. +fsf/emacs/lisp/saveplace.el
  29147. +fsf/emacs/lisp/saveplace.elc
  29148. +fsf/emacs/lisp/sc.el
  29149. +fsf/emacs/lisp/scheme.el
  29150. +fsf/emacs/lisp/scheme.elc
  29151. +fsf/emacs/lisp/scribe.el
  29152. +fsf/emacs/lisp/scribe.elc
  29153. +fsf/emacs/lisp/scroll-bar.el
  29154. +fsf/emacs/lisp/scroll-bar.elc
  29155. +fsf/emacs/lisp/select.el
  29156. +fsf/emacs/lisp/select.elc
  29157. +fsf/emacs/lisp/sendmail.el
  29158. +fsf/emacs/lisp/sendmail.elc
  29159. +fsf/emacs/lisp/server.el
  29160. +fsf/emacs/lisp/server.elc
  29161. +fsf/emacs/lisp/sgml-mode.el
  29162. +fsf/emacs/lisp/sgml-mode.elc
  29163. +fsf/emacs/lisp/sh-script.el
  29164. +fsf/emacs/lisp/sh-script.elc
  29165. +fsf/emacs/lisp/shadowfile.el
  29166. +fsf/emacs/lisp/shadowfile.elc
  29167. +fsf/emacs/lisp/shell.el
  29168. +fsf/emacs/lisp/shell.elc
  29169. +fsf/emacs/lisp/simple.el
  29170. +fsf/emacs/lisp/simple.elc
  29171. +fsf/emacs/lisp/simula.el
  29172. +fsf/emacs/lisp/simula.elc
  29173. +fsf/emacs/lisp/skeleton.el
  29174. +fsf/emacs/lisp/skeleton.elc
  29175. +fsf/emacs/lisp/solar.el
  29176. +fsf/emacs/lisp/solar.elc
  29177. +fsf/emacs/lisp/sort.el
  29178. +fsf/emacs/lisp/sort.elc
  29179. +fsf/emacs/lisp/soundex.el
  29180. +fsf/emacs/lisp/soundex.elc
  29181. +fsf/emacs/lisp/spell.el
  29182. +fsf/emacs/lisp/spell.elc
  29183. +fsf/emacs/lisp/spook.el
  29184. +fsf/emacs/lisp/spook.elc
  29185. +fsf/emacs/lisp/startup.el
  29186. +fsf/emacs/lisp/startup.elc
  29187. +fsf/emacs/lisp/studly.el
  29188. +fsf/emacs/lisp/studly.elc
  29189. +fsf/emacs/lisp/subr.el
  29190. +fsf/emacs/lisp/subr.elc
  29191. +fsf/emacs/lisp/sun-curs.el
  29192. +fsf/emacs/lisp/sun-fns.el
  29193. +fsf/emacs/lisp/supercite.el
  29194. +fsf/emacs/lisp/supercite.elc
  29195. +fsf/emacs/lisp/swedish.el
  29196. +fsf/emacs/lisp/swedish.elc
  29197. +fsf/emacs/lisp/tabify.el
  29198. +fsf/emacs/lisp/tabify.elc
  29199. +fsf/emacs/lisp/tar-mode.el
  29200. +fsf/emacs/lisp/tar-mode.elc
  29201. +fsf/emacs/lisp/tcl-mode.el
  29202. +fsf/emacs/lisp/tcl-mode.elc
  29203. +fsf/emacs/lisp/tcp.el
  29204. +fsf/emacs/lisp/tcp.elc
  29205. +fsf/emacs/lisp/telnet.el
  29206. +fsf/emacs/lisp/telnet.elc
  29207. +fsf/emacs/lisp/tempo.el
  29208. +fsf/emacs/lisp/tempo.elc
  29209. +fsf/emacs/lisp/term-nasty.el
  29210. +fsf/emacs/lisp/term/AT386.el
  29211. +fsf/emacs/lisp/term/README
  29212. +fsf/emacs/lisp/term/apollo.el
  29213. +fsf/emacs/lisp/term/apollo.elc
  29214. +fsf/emacs/lisp/term/bg-mouse.el
  29215. +fsf/emacs/lisp/term/bg-mouse.elc
  29216. +fsf/emacs/lisp/term/bobcat.el
  29217. +fsf/emacs/lisp/term/internal.el
  29218. +fsf/emacs/lisp/term/intuition-win.el
  29219. +fsf/emacs/lisp/term/keyswap.el
  29220. +fsf/emacs/lisp/term/lk201.el
  29221. +fsf/emacs/lisp/term/news.el
  29222. +fsf/emacs/lisp/term/news.elc
  29223. +fsf/emacs/lisp/term/sun-curs.el
  29224. +fsf/emacs/lisp/term/sun-fns.el
  29225. +fsf/emacs/lisp/term/sun-mouse.el
  29226. +fsf/emacs/lisp/term/sun-mouse.elc
  29227. +fsf/emacs/lisp/term/sun.el
  29228. +fsf/emacs/lisp/term/sun.elc
  29229. +fsf/emacs/lisp/term/sup-mouse.el
  29230. +fsf/emacs/lisp/term/sup-mouse.elc
  29231. +fsf/emacs/lisp/term/tvi970.el
  29232. +fsf/emacs/lisp/term/tvi970.elc
  29233. +fsf/emacs/lisp/term/vt100-led.el
  29234. +fsf/emacs/lisp/term/vt100-led.elc
  29235. +fsf/emacs/lisp/term/vt100.el
  29236. +fsf/emacs/lisp/term/vt100.elc
  29237. +fsf/emacs/lisp/term/vt102.el
  29238. +fsf/emacs/lisp/term/vt125.el
  29239. +fsf/emacs/lisp/term/vt200.el
  29240. +fsf/emacs/lisp/term/vt200.elc
  29241. +fsf/emacs/lisp/term/vt201.el
  29242. +fsf/emacs/lisp/term/vt220.el
  29243. +fsf/emacs/lisp/term/vt240.el
  29244. +fsf/emacs/lisp/term/vt300.el
  29245. +fsf/emacs/lisp/term/vt320.el
  29246. +fsf/emacs/lisp/term/vt400.el
  29247. +fsf/emacs/lisp/term/vt420.el
  29248. +fsf/emacs/lisp/term/wyse50.el
  29249. +fsf/emacs/lisp/term/wyse50.elc
  29250. +fsf/emacs/lisp/term/x-win.el
  29251. +fsf/emacs/lisp/term/x-win.elc
  29252. +fsf/emacs/lisp/terminal.el
  29253. +fsf/emacs/lisp/terminal.elc
  29254. +fsf/emacs/lisp/tex-mode.el
  29255. +fsf/emacs/lisp/tex-mode.elc
  29256. +fsf/emacs/lisp/texinfmt.el
  29257. +fsf/emacs/lisp/texinfmt.elc
  29258. +fsf/emacs/lisp/texinfo.el
  29259. +fsf/emacs/lisp/texinfo.elc
  29260. +fsf/emacs/lisp/texnfo-upd.el
  29261. +fsf/emacs/lisp/texnfo-upd.elc
  29262. +fsf/emacs/lisp/text-mode.el
  29263. +fsf/emacs/lisp/text-mode.elc
  29264. +fsf/emacs/lisp/thingatpt.el
  29265. +fsf/emacs/lisp/thingatpt.elc
  29266. +fsf/emacs/lisp/time-stamp.el
  29267. +fsf/emacs/lisp/time-stamp.elc
  29268. +fsf/emacs/lisp/time.el
  29269. +fsf/emacs/lisp/time.elc
  29270. +fsf/emacs/lisp/timer.el
  29271. +fsf/emacs/lisp/timer.elc
  29272. +fsf/emacs/lisp/timezone.el
  29273. +fsf/emacs/lisp/timezone.elc
  29274. +fsf/emacs/lisp/tpu-doc.el
  29275. +fsf/emacs/lisp/tpu-edt.el
  29276. +fsf/emacs/lisp/tpu-edt.elc
  29277. +fsf/emacs/lisp/tpu-extras.el
  29278. +fsf/emacs/lisp/tpu-extras.elc
  29279. +fsf/emacs/lisp/tpu-mapper.el
  29280. +fsf/emacs/lisp/tpu-mapper.elc
  29281. +fsf/emacs/lisp/tq.el
  29282. +fsf/emacs/lisp/tq.elc
  29283. +fsf/emacs/lisp/trace.el
  29284. +fsf/emacs/lisp/trace.elc
  29285. +fsf/emacs/lisp/two-column.el
  29286. +fsf/emacs/lisp/two-column.elc
  29287. +fsf/emacs/lisp/uncompress.el
  29288. +fsf/emacs/lisp/uncompress.elc
  29289. +fsf/emacs/lisp/underline.el
  29290. +fsf/emacs/lisp/underline.elc
  29291. +fsf/emacs/lisp/undigest.el
  29292. +fsf/emacs/lisp/undigest.elc
  29293. +fsf/emacs/lisp/unrmail.el
  29294. +fsf/emacs/lisp/unrmail.elc
  29295. +fsf/emacs/lisp/unused.el
  29296. +fsf/emacs/lisp/unused.elc
  29297. +fsf/emacs/lisp/upd-copyr.el
  29298. +fsf/emacs/lisp/upd-copyr.elc
  29299. +fsf/emacs/lisp/userlock.el
  29300. +fsf/emacs/lisp/userlock.elc
  29301. +fsf/emacs/lisp/vc-hooks.el
  29302. +fsf/emacs/lisp/vc-hooks.elc
  29303. +fsf/emacs/lisp/vc.el
  29304. +fsf/emacs/lisp/vc.elc
  29305. +fsf/emacs/lisp/version.el
  29306. +fsf/emacs/lisp/vi.el
  29307. +fsf/emacs/lisp/vi.elc
  29308. +fsf/emacs/lisp/view.el
  29309. +fsf/emacs/lisp/view.elc
  29310. +fsf/emacs/lisp/vip.el
  29311. +fsf/emacs/lisp/vip.elc
  29312. +fsf/emacs/lisp/vms-patch.el
  29313. +fsf/emacs/lisp/vms-patch.elc
  29314. +fsf/emacs/lisp/vms-pmail.el
  29315. +fsf/emacs/lisp/vms-pmail.elc
  29316. +fsf/emacs/lisp/vmsproc.el
  29317. +fsf/emacs/lisp/vmsproc.elc
  29318. +fsf/emacs/lisp/vmsx.el
  29319. +fsf/emacs/lisp/vmsx.elc
  29320. +fsf/emacs/lisp/vt-control.el
  29321. +fsf/emacs/lisp/vt100-led.el
  29322. +fsf/emacs/lisp/vt100-led.elc
  29323. +fsf/emacs/lisp/window.el
  29324. +fsf/emacs/lisp/window.elc
  29325. +fsf/emacs/lisp/ws-mode.el
  29326. +fsf/emacs/lisp/ws-mode.elc
  29327. +fsf/emacs/lisp/x-menu.el
  29328. +fsf/emacs/lisp/x-menu.elc
  29329. +fsf/emacs/lisp/xscheme.el
  29330. +fsf/emacs/lisp/xscheme.elc
  29331. +fsf/emacs/lisp/yow.el
  29332. +fsf/emacs/lisp/yow.elc
  29333. +fsf/emacs/lwlib/ChangeLog
  29334. +fsf/emacs/lwlib/Imakefile
  29335. +fsf/emacs/lwlib/Makefile.in
  29336. +fsf/emacs/lwlib/README
  29337. +fsf/emacs/lwlib/dispatch.c
  29338. +fsf/emacs/lwlib/dispatch.h
  29339. +fsf/emacs/lwlib/lwlib-Xaw.c
  29340. +fsf/emacs/lwlib/lwlib-Xaw.h
  29341. +fsf/emacs/lwlib/lwlib-Xlw.c
  29342. +fsf/emacs/lwlib/lwlib-Xlw.h
  29343. +fsf/emacs/lwlib/lwlib-Xm.c
  29344. +fsf/emacs/lwlib/lwlib-Xm.h
  29345. +fsf/emacs/lwlib/lwlib-Xol.c
  29346. +fsf/emacs/lwlib/lwlib-Xol.h
  29347. +fsf/emacs/lwlib/lwlib-Xolmb.c
  29348. +fsf/emacs/lwlib/lwlib-Xolmb.h
  29349. +fsf/emacs/lwlib/lwlib-XolmbP.h
  29350. +fsf/emacs/lwlib/lwlib-int.h
  29351. +fsf/emacs/lwlib/lwlib-utils.c
  29352. +fsf/emacs/lwlib/lwlib-utils.h
  29353. +fsf/emacs/lwlib/lwlib.c
  29354. +fsf/emacs/lwlib/lwlib.h
  29355. +fsf/emacs/lwlib/xlwmenu.c
  29356. +fsf/emacs/lwlib/xlwmenu.h
  29357. +fsf/emacs/lwlib/xlwmenuP.h
  29358. +fsf/emacs/lwlib/xrdb-cpp.c
  29359. +fsf/emacs/lwlib/xrdb.c
  29360. +fsf/emacs/make-dist
  29361. +fsf/emacs/man/ChangeLog
  29362. +fsf/emacs/man/Makefile
  29363. +fsf/emacs/man/abbrevs.texi
  29364. +fsf/emacs/man/anti.texi
  29365. +fsf/emacs/man/back.texi
  29366. +fsf/emacs/man/basic.texi
  29367. +fsf/emacs/man/buffers.texi
  29368. +fsf/emacs/man/building.texi
  29369. +fsf/emacs/man/calendar.texi
  29370. +fsf/emacs/man/cl.texi
  29371. +fsf/emacs/man/cmdargs.texi
  29372. +fsf/emacs/man/commands.texi
  29373. +fsf/emacs/man/custom.texi
  29374. +fsf/emacs/man/dired-x.texi
  29375. +fsf/emacs/man/dired.texi
  29376. +fsf/emacs/man/display.texi
  29377. +fsf/emacs/man/emacs.aux
  29378. +fsf/emacs/man/emacs.cps
  29379. +fsf/emacs/man/emacs.fns
  29380. +fsf/emacs/man/emacs.kys
  29381. +fsf/emacs/man/emacs.texi
  29382. +fsf/emacs/man/emacs.vrs
  29383. +fsf/emacs/man/entering.texi
  29384. +fsf/emacs/man/files.texi
  29385. +fsf/emacs/man/fixit.texi
  29386. +fsf/emacs/man/forms.aux
  29387. +fsf/emacs/man/forms.cps
  29388. +fsf/emacs/man/forms.texi
  29389. +fsf/emacs/man/forms.vrs
  29390. +fsf/emacs/man/frames.texi
  29391. +fsf/emacs/man/getopt.c
  29392. +fsf/emacs/man/glossary.texi
  29393. +fsf/emacs/man/gnu.texi
  29394. +fsf/emacs/man/gnu1.texi
  29395. +fsf/emacs/man/gnus.texi
  29396. +fsf/emacs/man/help.texi
  29397. +fsf/emacs/man/indent.texi
  29398. +fsf/emacs/man/info-stnd.texi
  29399. +fsf/emacs/man/info.texi
  29400. +fsf/emacs/man/killing.texi
  29401. +fsf/emacs/man/m-x.texi
  29402. +fsf/emacs/man/major.texi
  29403. +fsf/emacs/man/mark.texi
  29404. +fsf/emacs/man/mini.texi
  29405. +fsf/emacs/man/misc.texi
  29406. +fsf/emacs/man/msdog.texi
  29407. +fsf/emacs/man/picture.texi
  29408. +fsf/emacs/man/programs.texi
  29409. +fsf/emacs/man/regs.texi
  29410. +fsf/emacs/man/rmail.texi
  29411. +fsf/emacs/man/sc.texi
  29412. +fsf/emacs/man/screen.texi
  29413. +fsf/emacs/man/search.texi
  29414. +fsf/emacs/man/sending.texi
  29415. +fsf/emacs/man/split-man
  29416. +fsf/emacs/man/texindex.c
  29417. +fsf/emacs/man/texinfo.tex
  29418. +fsf/emacs/man/text.texi
  29419. +fsf/emacs/man/trouble.texi
  29420. +fsf/emacs/man/vip.aux
  29421. +fsf/emacs/man/vip.texi
  29422. +fsf/emacs/man/windows.texi
  29423. +fsf/emacs/manifests/src
  29424. +fsf/emacs/move-if-change
  29425. +fsf/emacs/msdos/COPYING
  29426. +fsf/emacs/msdos/ChangeLog
  29427. +fsf/emacs/msdos/emacs.ico
  29428. +fsf/emacs/msdos/emacs.pif
  29429. +fsf/emacs/msdos/mainmake
  29430. +fsf/emacs/msdos/sed1.inp
  29431. +fsf/emacs/msdos/sed2.inp
  29432. +fsf/emacs/msdos/sed3.inp
  29433. +fsf/emacs/msdos/sed4.inp
  29434. +fsf/emacs/oldXMenu/Activate.c
  29435. +fsf/emacs/oldXMenu/AddPane.c
  29436. +fsf/emacs/oldXMenu/AddSel.c
  29437. +fsf/emacs/oldXMenu/ChangeLog
  29438. +fsf/emacs/oldXMenu/ChgPane.c
  29439. +fsf/emacs/oldXMenu/ChgSel.c
  29440. +fsf/emacs/oldXMenu/Create.c
  29441. +fsf/emacs/oldXMenu/DelPane.c
  29442. +fsf/emacs/oldXMenu/DelSel.c
  29443. +fsf/emacs/oldXMenu/Destroy.c
  29444. +fsf/emacs/oldXMenu/Error.c
  29445. +fsf/emacs/oldXMenu/EvHand.c
  29446. +fsf/emacs/oldXMenu/FindPane.c
  29447. +fsf/emacs/oldXMenu/FindSel.c
  29448. +fsf/emacs/oldXMenu/Imakefile
  29449. +fsf/emacs/oldXMenu/InsPane.c
  29450. +fsf/emacs/oldXMenu/InsSel.c
  29451. +fsf/emacs/oldXMenu/Internal.c
  29452. +fsf/emacs/oldXMenu/Locate.c
  29453. +fsf/emacs/oldXMenu/Makefile.in
  29454. +fsf/emacs/oldXMenu/Post.c
  29455. +fsf/emacs/oldXMenu/README
  29456. +fsf/emacs/oldXMenu/Recomp.c
  29457. +fsf/emacs/oldXMenu/SetAEQ.c
  29458. +fsf/emacs/oldXMenu/SetFrz.c
  29459. +fsf/emacs/oldXMenu/SetPane.c
  29460. +fsf/emacs/oldXMenu/SetSel.c
  29461. +fsf/emacs/oldXMenu/X10.h
  29462. +fsf/emacs/oldXMenu/XCrAssoc.c
  29463. +fsf/emacs/oldXMenu/XDelAssoc.c
  29464. +fsf/emacs/oldXMenu/XDestAssoc.c
  29465. +fsf/emacs/oldXMenu/XLookAssoc.c
  29466. +fsf/emacs/oldXMenu/XMakeAssoc.c
  29467. +fsf/emacs/oldXMenu/XMenu.h
  29468. +fsf/emacs/oldXMenu/XMenuInt.h
  29469. +fsf/emacs/oldXMenu/compile.com
  29470. +fsf/emacs/oldXMenu/copyright.h
  29471. +fsf/emacs/oldXMenu/descrip.mms
  29472. +fsf/emacs/oldXMenu/insque.c
  29473. +fsf/emacs/shortnames/COPYING
  29474. +fsf/emacs/shortnames/Makefile
  29475. +fsf/emacs/shortnames/defines.c
  29476. +fsf/emacs/shortnames/dups.c
  29477. +fsf/emacs/shortnames/names.c
  29478. +fsf/emacs/shortnames/reserved
  29479. +fsf/emacs/shortnames/special
  29480. +fsf/emacs/site-lisp/ChangeLog
  29481. +fsf/emacs/site-lisp/DUMPING
  29482. +fsf/emacs/site-lisp/MANIFEST
  29483. +fsf/emacs/site-lisp/README
  29484. +fsf/emacs/site-lisp/cc-compat.el
  29485. +fsf/emacs/site-lisp/cc-mode-18.el
  29486. +fsf/emacs/site-lisp/cc-mode.el
  29487. +fsf/emacs/site-lisp/reporter.elc
  29488. +fsf/emacs/site-lisp/tapestry.elc
  29489. +fsf/emacs/site-lisp/timezone.elc
  29490. +fsf/emacs/site-lisp/vm-auto-archive.el
  29491. +fsf/emacs/site-lisp/vm-delete.elc
  29492. +fsf/emacs/site-lisp/vm-digest.elc
  29493. +fsf/emacs/site-lisp/vm-edit.elc
  29494. +fsf/emacs/site-lisp/vm-folder.elc
  29495. +fsf/emacs/site-lisp/vm-license.elc
  29496. +fsf/emacs/site-lisp/vm-mark.elc
  29497. +fsf/emacs/site-lisp/vm-message.elc
  29498. +fsf/emacs/site-lisp/vm-minibuf.elc
  29499. +fsf/emacs/site-lisp/vm-misc.elc
  29500. +fsf/emacs/site-lisp/vm-motion.elc
  29501. +fsf/emacs/site-lisp/vm-page.elc
  29502. +fsf/emacs/site-lisp/vm-pop.elc
  29503. +fsf/emacs/site-lisp/vm-reply.elc
  29504. +fsf/emacs/site-lisp/vm-save.elc
  29505. +fsf/emacs/site-lisp/vm-search.elc
  29506. +fsf/emacs/site-lisp/vm-sort.elc
  29507. +fsf/emacs/site-lisp/vm-startup.elc
  29508. +fsf/emacs/site-lisp/vm-summary.elc
  29509. +fsf/emacs/site-lisp/vm-thread.elc
  29510. +fsf/emacs/site-lisp/vm-undo.elc
  29511. +fsf/emacs/site-lisp/vm-vars.elc
  29512. +fsf/emacs/site-lisp/vm-version.elc
  29513. +fsf/emacs/site-lisp/vm-virtual.elc
  29514. +fsf/emacs/site-lisp/vm-window.elc
  29515. +fsf/emacs/site-lisp/vm.el
  29516. +fsf/emacs/site-lisp/vm.elc
  29517. +fsf/emacs/src/.dbxinit
  29518. +fsf/emacs/src/.gdbinit
  29519. +fsf/emacs/src/COPYING
  29520. +fsf/emacs/src/ChangeLog
  29521. +fsf/emacs/src/ChangeLog.1
  29522. +fsf/emacs/src/ChangeLog.2
  29523. +fsf/emacs/src/ChangeLog.3
  29524. +fsf/emacs/src/DOC
  29525. +fsf/emacs/src/Makefile.in.in
  29526. +fsf/emacs/src/README
  29527. +fsf/emacs/src/abbrev.c
  29528. +fsf/emacs/src/abbrev_protos.h
  29529. +fsf/emacs/src/acldef.h
  29530. +fsf/emacs/src/alloc.c
  29531. +fsf/emacs/src/alloc_protos.h
  29532. +fsf/emacs/src/alloca.c
  29533. +fsf/emacs/src/alloca.s
  29534. +fsf/emacs/src/amiga.h
  29535. +fsf/emacs/src/amiga_clipboard.c
  29536. +fsf/emacs/src/amiga_clipboard_protos.h
  29537. +fsf/emacs/src/amiga_data.c
  29538. +fsf/emacs/src/amiga_dump.c
  29539. +fsf/emacs/src/amiga_dump_protos.h
  29540. +fsf/emacs/src/amiga_fns.c
  29541. +fsf/emacs/src/amiga_fns_protos.h
  29542. +fsf/emacs/src/amiga_malloc.c
  29543. +fsf/emacs/src/amiga_malloc_protos.h
  29544. +fsf/emacs/src/amiga_menu.c
  29545. +fsf/emacs/src/amiga_menu_protos.h
  29546. +fsf/emacs/src/amiga_processes.c
  29547. +fsf/emacs/src/amiga_rexx.c
  29548. +fsf/emacs/src/amiga_rexx_protos.h
  29549. +fsf/emacs/src/amiga_screen.c
  29550. +fsf/emacs/src/amiga_screen_protos.h
  29551. +fsf/emacs/src/amiga_serial.c
  29552. +fsf/emacs/src/amiga_serial_protos.h
  29553. +fsf/emacs/src/amiga_sysdep.c
  29554. +fsf/emacs/src/amiga_sysdep_protos.h
  29555. +fsf/emacs/src/amiga_term.c
  29556. +fsf/emacs/src/amiga_term_protos.h
  29557. +fsf/emacs/src/amiga_tty.c
  29558. +fsf/emacs/src/amiga_tty_protos.h
  29559. +fsf/emacs/src/amiga_xmenu.c
  29560. +fsf/emacs/src/amiga_xmenu_protos.h
  29561. +fsf/emacs/src/bitmaps/README
  29562. +fsf/emacs/src/bitmaps/cntrpmsk.xbm
  29563. +fsf/emacs/src/bitmaps/cntrptr.xbm
  29564. +fsf/emacs/src/bitmaps/crosswv.xbm
  29565. +fsf/emacs/src/bitmaps/dimple1.xbm
  29566. +fsf/emacs/src/bitmaps/dimple3.xbm
  29567. +fsf/emacs/src/bitmaps/gray.xbm
  29568. +fsf/emacs/src/bitmaps/gray1.xbm
  29569. +fsf/emacs/src/bitmaps/gray3.xbm
  29570. +fsf/emacs/src/bitmaps/leftpmsk.xbm
  29571. +fsf/emacs/src/bitmaps/leftptr.xbm
  29572. +fsf/emacs/src/bitmaps/rtpmsk.xbm
  29573. +fsf/emacs/src/bitmaps/rtptr.xbm
  29574. +fsf/emacs/src/bitmaps/stipple.xbm
  29575. +fsf/emacs/src/blockinput.h
  29576. +fsf/emacs/src/buffer.c
  29577. +fsf/emacs/src/buffer.h
  29578. +fsf/emacs/src/buffer_protos.h
  29579. +fsf/emacs/src/bytecode.c
  29580. +fsf/emacs/src/bytecode_protos.h
  29581. +fsf/emacs/src/callint.c
  29582. +fsf/emacs/src/callint_protos.h
  29583. +fsf/emacs/src/callproc.c
  29584. +fsf/emacs/src/callproc_protos.h
  29585. +fsf/emacs/src/casefiddle.c
  29586. +fsf/emacs/src/casefiddle_protos.h
  29587. +fsf/emacs/src/casetab.c
  29588. +fsf/emacs/src/casetab_protos.h
  29589. +fsf/emacs/src/cdodump.sh
  29590. +fsf/emacs/src/chpdef.h
  29591. +fsf/emacs/src/cm.c
  29592. +fsf/emacs/src/cm.h
  29593. +fsf/emacs/src/cm_protos.h
  29594. +fsf/emacs/src/cmds.c
  29595. +fsf/emacs/src/cmds_protos.h
  29596. +fsf/emacs/src/commands.h
  29597. +fsf/emacs/src/config.h.in
  29598. +fsf/emacs/src/config.h.in-sasc
  29599. +fsf/emacs/src/cover.dat
  29600. +fsf/emacs/src/cprinit
  29601. +fsf/emacs/src/crt0.c
  29602. +fsf/emacs/src/ct.sh
  29603. +fsf/emacs/src/cxux-crt0.s
  29604. +fsf/emacs/src/data.c
  29605. +fsf/emacs/src/data_protos.h
  29606. +fsf/emacs/src/dired.c
  29607. +fsf/emacs/src/dired_protos.h
  29608. +fsf/emacs/src/dispextern.h
  29609. +fsf/emacs/src/dispnew.c
  29610. +fsf/emacs/src/dispnew_protos.h
  29611. +fsf/emacs/src/disptab.h
  29612. +fsf/emacs/src/doc.c
  29613. +fsf/emacs/src/doc_protos.h
  29614. +fsf/emacs/src/dodump.sh
  29615. +fsf/emacs/src/doprnt.c
  29616. +fsf/emacs/src/doprnt_protos.h
  29617. +fsf/emacs/src/dosfns.c
  29618. +fsf/emacs/src/dosfns.h
  29619. +fsf/emacs/src/dostrip.c
  29620. +fsf/emacs/src/dostrip.lnk
  29621. +fsf/emacs/src/editfns.c
  29622. +fsf/emacs/src/editfns_protos.h
  29623. +fsf/emacs/src/emacs.c
  29624. +fsf/emacs/src/emacs.sh
  29625. +fsf/emacs/src/emacs_protos.h
  29626. +fsf/emacs/src/emacssignal.h
  29627. +fsf/emacs/src/eval.c
  29628. +fsf/emacs/src/eval_protos.h
  29629. +fsf/emacs/src/fileio.c
  29630. +fsf/emacs/src/fileio_protos.h
  29631. +fsf/emacs/src/filelock.c
  29632. +fsf/emacs/src/filelock_protos.h
  29633. +fsf/emacs/src/filemode.c
  29634. +fsf/emacs/src/filemode_protos.h
  29635. +fsf/emacs/src/firstfile.c
  29636. +fsf/emacs/src/floatfns.c
  29637. +fsf/emacs/src/floatfns_protos.h
  29638. +fsf/emacs/src/fns.c
  29639. +fsf/emacs/src/fns_protos.h
  29640. +fsf/emacs/src/frame.c
  29641. +fsf/emacs/src/frame.h
  29642. +fsf/emacs/src/frame_protos.h
  29643. +fsf/emacs/src/getloadavg.c
  29644. +fsf/emacs/src/getloadavg_protos.h
  29645. +fsf/emacs/src/getpagesize.h
  29646. +fsf/emacs/src/gmalloc.c
  29647. +fsf/emacs/src/gnu.h
  29648. +fsf/emacs/src/hftctl.c
  29649. +fsf/emacs/src/indent.c
  29650. +fsf/emacs/src/indent.h
  29651. +fsf/emacs/src/indent_protos.h
  29652. +fsf/emacs/src/insdel.c
  29653. +fsf/emacs/src/insdel_protos.h
  29654. +fsf/emacs/src/intervals.c
  29655. +fsf/emacs/src/intervals.h
  29656. +fsf/emacs/src/ioctl.h
  29657. +fsf/emacs/src/keyboard.c
  29658. +fsf/emacs/src/keyboard.h
  29659. +fsf/emacs/src/keyboard_protos.h
  29660. +fsf/emacs/src/keymap.c
  29661. +fsf/emacs/src/keymap_protos.h
  29662. +fsf/emacs/src/lastfile.c
  29663. +fsf/emacs/src/line.h
  29664. +fsf/emacs/src/lisp.h
  29665. +fsf/emacs/src/lread.c
  29666. +fsf/emacs/src/lread_protos.h
  29667. +fsf/emacs/src/m/7300.h
  29668. +fsf/emacs/src/m/README
  29669. +fsf/emacs/src/m/alliant-2800.h
  29670. +fsf/emacs/src/m/alliant.h
  29671. +fsf/emacs/src/m/alliant1.h
  29672. +fsf/emacs/src/m/alliant4.h
  29673. +fsf/emacs/src/m/altos.h
  29674. +fsf/emacs/src/m/amdahl.h
  29675. +fsf/emacs/src/m/amiga.h
  29676. +fsf/emacs/src/m/apollo.h
  29677. +fsf/emacs/src/m/att3b.h
  29678. +fsf/emacs/src/m/aviion.h
  29679. +fsf/emacs/src/m/celerity.h
  29680. +fsf/emacs/src/m/clipper.h
  29681. +fsf/emacs/src/m/cnvrgnt.h
  29682. +fsf/emacs/src/m/convex.h
  29683. +fsf/emacs/src/m/cydra5.h
  29684. +fsf/emacs/src/m/delta.h
  29685. +fsf/emacs/src/m/delta88k.h
  29686. +fsf/emacs/src/m/dpx2.h
  29687. +fsf/emacs/src/m/dual.h
  29688. +fsf/emacs/src/m/elxsi.h
  29689. +fsf/emacs/src/m/gec63.h
  29690. +fsf/emacs/src/m/gould-np1.h
  29691. +fsf/emacs/src/m/gould.h
  29692. +fsf/emacs/src/m/hp800.h
  29693. +fsf/emacs/src/m/hp9000s300.h
  29694. +fsf/emacs/src/m/i860.h
  29695. +fsf/emacs/src/m/ibm370aix.h
  29696. +fsf/emacs/src/m/ibmps2-aix.h
  29697. +fsf/emacs/src/m/ibmrs6000.h
  29698. +fsf/emacs/src/m/ibmrs6000.inp
  29699. +fsf/emacs/src/m/ibmrt-aix.h
  29700. +fsf/emacs/src/m/ibmrt.h
  29701. +fsf/emacs/src/m/intel386.h
  29702. +fsf/emacs/src/m/iris4d.h
  29703. +fsf/emacs/src/m/iris5d.h
  29704. +fsf/emacs/src/m/irist.h
  29705. +fsf/emacs/src/m/is386.h
  29706. +fsf/emacs/src/m/isi-ov.h
  29707. +fsf/emacs/src/m/masscomp.h
  29708. +fsf/emacs/src/m/mega68.h
  29709. +fsf/emacs/src/m/mg1.h
  29710. +fsf/emacs/src/m/mips-siemens.h
  29711. +fsf/emacs/src/m/mips.h
  29712. +fsf/emacs/src/m/mips4.h
  29713. +fsf/emacs/src/m/news-risc.h
  29714. +fsf/emacs/src/m/news.h
  29715. +fsf/emacs/src/m/next.h
  29716. +fsf/emacs/src/m/nh3000.h
  29717. +fsf/emacs/src/m/nh4000.h
  29718. +fsf/emacs/src/m/ns16000.h
  29719. +fsf/emacs/src/m/ns32000.h
  29720. +fsf/emacs/src/m/nu.h
  29721. +fsf/emacs/src/m/orion.h
  29722. +fsf/emacs/src/m/orion105.h
  29723. +fsf/emacs/src/m/pfa50.h
  29724. +fsf/emacs/src/m/plexus.h
  29725. +fsf/emacs/src/m/pmax.h
  29726. +fsf/emacs/src/m/pyramid.h
  29727. +fsf/emacs/src/m/pyrmips.h
  29728. +fsf/emacs/src/m/sequent.h
  29729. +fsf/emacs/src/m/sgi3000.h
  29730. +fsf/emacs/src/m/sparc.h
  29731. +fsf/emacs/src/m/sps7.h
  29732. +fsf/emacs/src/m/stride.h
  29733. +fsf/emacs/src/m/sun1.h
  29734. +fsf/emacs/src/m/sun2.h
  29735. +fsf/emacs/src/m/sun3-68881.h
  29736. +fsf/emacs/src/m/sun3-fpa.h
  29737. +fsf/emacs/src/m/sun3-soft.h
  29738. +fsf/emacs/src/m/sun3.h
  29739. +fsf/emacs/src/m/sun386.h
  29740. +fsf/emacs/src/m/symmetry.h
  29741. +fsf/emacs/src/m/tad68k.h
  29742. +fsf/emacs/src/m/tahoe.h
  29743. +fsf/emacs/src/m/tandem-s2.h
  29744. +fsf/emacs/src/m/targon31.h
  29745. +fsf/emacs/src/m/tek4300.h
  29746. +fsf/emacs/src/m/tekxd88.h
  29747. +fsf/emacs/src/m/template.h
  29748. +fsf/emacs/src/m/tower32.h
  29749. +fsf/emacs/src/m/tower32v3.h
  29750. +fsf/emacs/src/m/ustation.h
  29751. +fsf/emacs/src/m/vax.h
  29752. +fsf/emacs/src/m/wicat.h
  29753. +fsf/emacs/src/m/xps100.h
  29754. +fsf/emacs/src/macros.c
  29755. +fsf/emacs/src/macros.h
  29756. +fsf/emacs/src/macros_protos.h
  29757. +fsf/emacs/src/marker.c
  29758. +fsf/emacs/src/marker_protos.h
  29759. +fsf/emacs/src/mem-limits.h
  29760. +fsf/emacs/src/minibuf.c
  29761. +fsf/emacs/src/minibuf_protos.h
  29762. +fsf/emacs/src/mocklisp.c
  29763. +fsf/emacs/src/mocklisp.h
  29764. +fsf/emacs/src/mocklisp_protos.h
  29765. +fsf/emacs/src/msdos.c
  29766. +fsf/emacs/src/msdos.h
  29767. +fsf/emacs/src/ndir.h
  29768. +fsf/emacs/src/oldalloca.c
  29769. +fsf/emacs/src/param.h
  29770. +fsf/emacs/src/paths.h
  29771. +fsf/emacs/src/paths.h.in
  29772. +fsf/emacs/src/point.h
  29773. +fsf/emacs/src/pre-crt0.c
  29774. +fsf/emacs/src/prefix-args
  29775. +fsf/emacs/src/prefix-args.c
  29776. +fsf/emacs/src/prefix-args.o
  29777. +fsf/emacs/src/print.c
  29778. +fsf/emacs/src/print_protos.h
  29779. +fsf/emacs/src/process.c
  29780. +fsf/emacs/src/process.h
  29781. +fsf/emacs/src/process_protos.h
  29782. +fsf/emacs/src/protos.c
  29783. +fsf/emacs/src/protos.h
  29784. +fsf/emacs/src/puresize.h
  29785. +fsf/emacs/src/ralloc.c
  29786. +fsf/emacs/src/regex.c
  29787. +fsf/emacs/src/regex.h
  29788. +fsf/emacs/src/regex_protos.h
  29789. +fsf/emacs/src/s/3700.h
  29790. +fsf/emacs/src/s/386-ix.h
  29791. +fsf/emacs/src/s/386bsd.h
  29792. +fsf/emacs/src/s/README
  29793. +fsf/emacs/src/s/aix3-1.h
  29794. +fsf/emacs/src/s/aix3-2-5.h
  29795. +fsf/emacs/src/s/aix3-2.h
  29796. +fsf/emacs/src/s/alliant-2800.h
  29797. +fsf/emacs/src/s/alliant.h
  29798. +fsf/emacs/src/s/altos.h
  29799. +fsf/emacs/src/s/amdahl.h
  29800. +fsf/emacs/src/s/amigados.h
  29801. +fsf/emacs/src/s/apollo.h
  29802. +fsf/emacs/src/s/bsd386.h
  29803. +fsf/emacs/src/s/bsd4-1.h
  29804. +fsf/emacs/src/s/bsd4-2.h
  29805. +fsf/emacs/src/s/bsd4-3.h
  29806. +fsf/emacs/src/s/cxux.h
  29807. +fsf/emacs/src/s/cxux7.h
  29808. +fsf/emacs/src/s/dgux.h
  29809. +fsf/emacs/src/s/dgux5-4r2.h
  29810. +fsf/emacs/src/s/dgux5-4r3.h
  29811. +fsf/emacs/src/s/esix.h
  29812. +fsf/emacs/src/s/esix5r4.h
  29813. +fsf/emacs/src/s/freebsd.h
  29814. +fsf/emacs/src/s/gnu.h
  29815. +fsf/emacs/src/s/hpux.h
  29816. +fsf/emacs/src/s/hpux8.h
  29817. +fsf/emacs/src/s/hpux9.h
  29818. +fsf/emacs/src/s/hpux9shr.h
  29819. +fsf/emacs/src/s/iris3-5.h
  29820. +fsf/emacs/src/s/iris3-6.h
  29821. +fsf/emacs/src/s/irix3-3.h
  29822. +fsf/emacs/src/s/irix4-0.h
  29823. +fsf/emacs/src/s/irix5-0.h
  29824. +fsf/emacs/src/s/isc2-2.h
  29825. +fsf/emacs/src/s/isc3-0.h
  29826. +fsf/emacs/src/s/isc4-0.h
  29827. +fsf/emacs/src/s/linux.h
  29828. +fsf/emacs/src/s/mach2.h
  29829. +fsf/emacs/src/s/msdos.h
  29830. +fsf/emacs/src/s/netbsd.h
  29831. +fsf/emacs/src/s/newsos5.h
  29832. +fsf/emacs/src/s/osf1.h
  29833. +fsf/emacs/src/s/rtu.h
  29834. +fsf/emacs/src/s/sco4.h
  29835. +fsf/emacs/src/s/sol2-3.h
  29836. +fsf/emacs/src/s/sol2-4.h
  29837. +fsf/emacs/src/s/sol2.h
  29838. +fsf/emacs/src/s/sunos4-0.h
  29839. +fsf/emacs/src/s/sunos4-1-2.h
  29840. +fsf/emacs/src/s/sunos4-1-3.h
  29841. +fsf/emacs/src/s/sunos4-1.h
  29842. +fsf/emacs/src/s/sunos4shr.h
  29843. +fsf/emacs/src/s/template.h
  29844. +fsf/emacs/src/s/umax.h
  29845. +fsf/emacs/src/s/umips.h
  29846. +fsf/emacs/src/s/unipl5-0.h
  29847. +fsf/emacs/src/s/unipl5-2.h
  29848. +fsf/emacs/src/s/usg5-0.h
  29849. +fsf/emacs/src/s/usg5-2-2.h
  29850. +fsf/emacs/src/s/usg5-2.h
  29851. +fsf/emacs/src/s/usg5-3.h
  29852. +fsf/emacs/src/s/usg5-4-2.h
  29853. +fsf/emacs/src/s/usg5-4.h
  29854. +fsf/emacs/src/s/vms.h
  29855. +fsf/emacs/src/s/vms4-0.h
  29856. +fsf/emacs/src/s/vms4-2.h
  29857. +fsf/emacs/src/s/vms4-4.h
  29858. +fsf/emacs/src/s/vms5-5.h
  29859. +fsf/emacs/src/s/xenix.h
  29860. +fsf/emacs/src/scoptions
  29861. +fsf/emacs/src/scroll.c
  29862. +fsf/emacs/src/scroll_protos.h
  29863. +fsf/emacs/src/search.c
  29864. +fsf/emacs/src/search_protos.h
  29865. +fsf/emacs/src/semacs.sh
  29866. +fsf/emacs/src/setlisp.cpr
  29867. +fsf/emacs/src/simplerexx.c
  29868. +fsf/emacs/src/simplerexx.h
  29869. +fsf/emacs/src/sink.h
  29870. +fsf/emacs/src/sink11.h
  29871. +fsf/emacs/src/sink11mask.h
  29872. +fsf/emacs/src/sinkmask.h
  29873. +fsf/emacs/src/smakefile
  29874. +fsf/emacs/src/st.sh
  29875. +fsf/emacs/src/sunfns.c
  29876. +fsf/emacs/src/syntax.c
  29877. +fsf/emacs/src/syntax.h
  29878. +fsf/emacs/src/syntax_protos.h
  29879. +fsf/emacs/src/sysdep.c
  29880. +fsf/emacs/src/syssignal.h
  29881. +fsf/emacs/src/systime.h
  29882. +fsf/emacs/src/systty.h
  29883. +fsf/emacs/src/syswait.h
  29884. +fsf/emacs/src/temacs.opt
  29885. +fsf/emacs/src/term.c
  29886. +fsf/emacs/src/term_protos.h
  29887. +fsf/emacs/src/termcap.c
  29888. +fsf/emacs/src/termchar.h
  29889. +fsf/emacs/src/termhooks.h
  29890. +fsf/emacs/src/terminfo.c
  29891. +fsf/emacs/src/termopts.h
  29892. +fsf/emacs/src/textprop.c
  29893. +fsf/emacs/src/tparam.c
  29894. +fsf/emacs/src/uaf.h
  29895. +fsf/emacs/src/undo.c
  29896. +fsf/emacs/src/undo_protos.h
  29897. +fsf/emacs/src/unexaix.c
  29898. +fsf/emacs/src/unexconvex.c
  29899. +fsf/emacs/src/unexec.c
  29900. +fsf/emacs/src/unexelf.c
  29901. +fsf/emacs/src/unexelfsgi.c
  29902. +fsf/emacs/src/unexencap.c
  29903. +fsf/emacs/src/unexenix.c
  29904. +fsf/emacs/src/unexfx2800.c
  29905. +fsf/emacs/src/unexhp9k800.c
  29906. +fsf/emacs/src/unexmips.c
  29907. +fsf/emacs/src/unexnext.c
  29908. +fsf/emacs/src/unexsunos4.c
  29909. +fsf/emacs/src/vlimit.h
  29910. +fsf/emacs/src/vm-limit.c
  29911. +fsf/emacs/src/vms-pp.c
  29912. +fsf/emacs/src/vms-pp.trans
  29913. +fsf/emacs/src/vms-pwd.h
  29914. +fsf/emacs/src/vmsdir.h
  29915. +fsf/emacs/src/vmsfns.c
  29916. +fsf/emacs/src/vmsgmalloc.c
  29917. +fsf/emacs/src/vmsmap.c
  29918. +fsf/emacs/src/vmspaths.h
  29919. +fsf/emacs/src/vmsproc.c
  29920. +fsf/emacs/src/vmsproc.h
  29921. +fsf/emacs/src/vmstime.c
  29922. +fsf/emacs/src/vmstime.h
  29923. +fsf/emacs/src/widget.c
  29924. +fsf/emacs/src/widget.h
  29925. +fsf/emacs/src/widgetprv.h
  29926. +fsf/emacs/src/window.c
  29927. +fsf/emacs/src/window.h
  29928. +fsf/emacs/src/window_protos.h
  29929. +fsf/emacs/src/xdisp.c
  29930. +fsf/emacs/src/xdisp_protos.h
  29931. +fsf/emacs/src/xfaces.c
  29932. +fsf/emacs/src/xfns.c
  29933. +fsf/emacs/src/xmakefile
  29934. +fsf/emacs/src/xmakefile.test
  29935. +fsf/emacs/src/xmenu.c
  29936. +fsf/emacs/src/xrdb.c
  29937. +fsf/emacs/src/xselect.c
  29938. +fsf/emacs/src/xterm.c
  29939. +fsf/emacs/src/xterm.h
  29940. +fsf/emacs/src/ymakefile
  29941. +fsf/emacs/unixlib/include/alloca.h
  29942. +fsf/emacs/unixlib/include/amiga/ioctl.h
  29943. +fsf/emacs/unixlib/include/errno.h
  29944. +fsf/emacs/unixlib/include/fcntl.h
  29945. +fsf/emacs/unixlib/include/grp.h
  29946. +fsf/emacs/unixlib/include/internal/devices.h
  29947. +fsf/emacs/unixlib/include/internal/files.h
  29948. +fsf/emacs/unixlib/include/internal/messages.h
  29949. +fsf/emacs/unixlib/include/internal/timers.h
  29950. +fsf/emacs/unixlib/include/internal/vars.h
  29951. +fsf/emacs/unixlib/include/pwd.h
  29952. +fsf/emacs/unixlib/include/setjmp.h
  29953. +fsf/emacs/unixlib/include/signal.h
  29954. +fsf/emacs/unixlib/include/stat.h
  29955. +fsf/emacs/unixlib/include/stdio.h
  29956. +fsf/emacs/unixlib/include/stdlib.h
  29957. +fsf/emacs/unixlib/include/strings.h
  29958. +fsf/emacs/unixlib/include/sys/cdefs.h
  29959. +fsf/emacs/unixlib/include/sys/fcntl.h
  29960. +fsf/emacs/unixlib/include/sys/file.h
  29961. +fsf/emacs/unixlib/include/sys/filio.h
  29962. +fsf/emacs/unixlib/include/sys/ioctl.h
  29963. +fsf/emacs/unixlib/include/sys/param.h
  29964. +fsf/emacs/unixlib/include/sys/socket.h
  29965. +fsf/emacs/unixlib/include/sys/stat.h
  29966. +fsf/emacs/unixlib/include/sys/termios.h
  29967. +fsf/emacs/unixlib/include/sys/time.h
  29968. +fsf/emacs/unixlib/include/sys/timeb.h
  29969. +fsf/emacs/unixlib/include/sys/types.h
  29970. +fsf/emacs/unixlib/include/sys/unistd.h
  29971. +fsf/emacs/unixlib/include/sys/vlimit.h
  29972. +fsf/emacs/unixlib/include/sys/wait.h
  29973. +fsf/emacs/unixlib/include/time.h
  29974. +fsf/emacs/unixlib/include/tzfile.h
  29975. +fsf/emacs/unixlib/include/unistd.h
  29976. +fsf/emacs/unixlib/include/utime.h
  29977. +fsf/emacs/unixlib/intro.doc
  29978. +fsf/emacs/unixlib/mkmkf
  29979. +fsf/emacs/unixlib/mkmkf.perl
  29980. +fsf/emacs/unixlib/src/SCOPTIONS
  29981. +fsf/emacs/unixlib/src/_exit.c
  29982. +fsf/emacs/unixlib/src/_main.c
  29983. +fsf/emacs/unixlib/src/_setjmp.asm
  29984. +fsf/emacs/unixlib/src/abort.c
  29985. +fsf/emacs/unixlib/src/access.c
  29986. +fsf/emacs/unixlib/src/alloca.c
  29987. +fsf/emacs/unixlib/src/allocdos.c
  29988. +fsf/emacs/unixlib/src/amiga.h
  29989. +fsf/emacs/unixlib/src/amigados.c
  29990. +fsf/emacs/unixlib/src/amigados.h
  29991. +fsf/emacs/unixlib/src/amigatime.c
  29992. +fsf/emacs/unixlib/src/bcmp.c
  29993. +fsf/emacs/unixlib/src/bcopy.c
  29994. +fsf/emacs/unixlib/src/bzero.c
  29995. +fsf/emacs/unixlib/src/chmod.c
  29996. +fsf/emacs/unixlib/src/chown.c
  29997. +fsf/emacs/unixlib/src/close.c
  29998. +fsf/emacs/unixlib/src/creat.c
  29999. +fsf/emacs/unixlib/src/ctime.c
  30000. +fsf/emacs/unixlib/src/devices.c
  30001. +fsf/emacs/unixlib/src/dir.c
  30002. +fsf/emacs/unixlib/src/dir_data.c
  30003. +fsf/emacs/unixlib/src/dir_data.h
  30004. +fsf/emacs/unixlib/src/error.c
  30005. +fsf/emacs/unixlib/src/error_msg.c
  30006. +fsf/emacs/unixlib/src/exec.c
  30007. +fsf/emacs/unixlib/src/fchmod.c
  30008. +fsf/emacs/unixlib/src/fcntl.c
  30009. +fsf/emacs/unixlib/src/fibstat.c
  30010. +fsf/emacs/unixlib/src/fibstat.h
  30011. +fsf/emacs/unixlib/src/fifo.h
  30012. +fsf/emacs/unixlib/src/fifo_pragmas.h
  30013. +fsf/emacs/unixlib/src/fifofd.c
  30014. +fsf/emacs/unixlib/src/fifofd.h
  30015. +fsf/emacs/unixlib/src/files.c
  30016. +fsf/emacs/unixlib/src/fstat.c
  30017. +fsf/emacs/unixlib/src/ftruncate.c
  30018. +fsf/emacs/unixlib/src/getenv.c
  30019. +fsf/emacs/unixlib/src/gethostname.c
  30020. +fsf/emacs/unixlib/src/getpid.c
  30021. +fsf/emacs/unixlib/src/getwd.c
  30022. +fsf/emacs/unixlib/src/gid.c
  30023. +fsf/emacs/unixlib/src/grp.c
  30024. +fsf/emacs/unixlib/src/index.c
  30025. +fsf/emacs/unixlib/src/ioctl.c
  30026. +fsf/emacs/unixlib/src/isatty.c
  30027. +fsf/emacs/unixlib/src/kill.c
  30028. +fsf/emacs/unixlib/src/link.c
  30029. +fsf/emacs/unixlib/src/lseek.c
  30030. +fsf/emacs/unixlib/src/message.c
  30031. +fsf/emacs/unixlib/src/mkdir.c
  30032. +fsf/emacs/unixlib/src/mkfifo.c
  30033. +fsf/emacs/unixlib/src/mktemp.c
  30034. +fsf/emacs/unixlib/src/open.c
  30035. +fsf/emacs/unixlib/src/perror.c
  30036. +fsf/emacs/unixlib/src/pipe.c
  30037. +fsf/emacs/unixlib/src/popen.c
  30038. +fsf/emacs/unixlib/src/processes.c
  30039. +fsf/emacs/unixlib/src/processes.h
  30040. +fsf/emacs/unixlib/src/protection.c
  30041. +fsf/emacs/unixlib/src/pseudo_c.c
  30042. +fsf/emacs/unixlib/src/pwd.c
  30043. +fsf/emacs/unixlib/src/read.c
  30044. +fsf/emacs/unixlib/src/readlink.c
  30045. +fsf/emacs/unixlib/src/rename.c
  30046. +fsf/emacs/unixlib/src/rindex.c
  30047. +fsf/emacs/unixlib/src/rmdir.c
  30048. +fsf/emacs/unixlib/src/select.c
  30049. +fsf/emacs/unixlib/src/setjmp.c
  30050. +fsf/emacs/unixlib/src/siglist.c
  30051. +fsf/emacs/unixlib/src/signal.c
  30052. +fsf/emacs/unixlib/src/signals.c
  30053. +fsf/emacs/unixlib/src/signals.h
  30054. +fsf/emacs/unixlib/src/sigpause.c
  30055. +fsf/emacs/unixlib/src/sigsetmask.c
  30056. +fsf/emacs/unixlib/src/sleep.c
  30057. +fsf/emacs/unixlib/src/smakefile
  30058. +fsf/emacs/unixlib/src/smakefile.base
  30059. +fsf/emacs/unixlib/src/sprintf.asm
  30060. +fsf/emacs/unixlib/src/start.c
  30061. +fsf/emacs/unixlib/src/stat.c
  30062. +fsf/emacs/unixlib/src/strftime.c
  30063. +fsf/emacs/unixlib/src/symlink.c
  30064. +fsf/emacs/unixlib/src/time.c
  30065. +fsf/emacs/unixlib/src/timeconvert.c
  30066. +fsf/emacs/unixlib/src/timeconvert.h
  30067. +fsf/emacs/unixlib/src/timers.c
  30068. +fsf/emacs/unixlib/src/tmpnam.c
  30069. +fsf/emacs/unixlib/src/truncate.c
  30070. +fsf/emacs/unixlib/src/uid.c
  30071. +fsf/emacs/unixlib/src/umask.c
  30072. +fsf/emacs/unixlib/src/unix-hard.lib.uue
  30073. +fsf/emacs/unixlib/src/unix.lib.uue
  30074. +fsf/emacs/unixlib/src/unlink.c
  30075. +fsf/emacs/unixlib/src/utime.c
  30076. +fsf/emacs/unixlib/src/wait4.c
  30077. +fsf/emacs/unixlib/src/write.c
  30078. +fsf/emacs/unixlib/src/zoneinfo/SCOPTIONS
  30079. +fsf/emacs/unixlib/src/zoneinfo/datfiles/africa
  30080. +fsf/emacs/unixlib/src/zoneinfo/datfiles/antarctica
  30081. +fsf/emacs/unixlib/src/zoneinfo/datfiles/asia
  30082. +fsf/emacs/unixlib/src/zoneinfo/datfiles/australasia
  30083. +fsf/emacs/unixlib/src/zoneinfo/datfiles/etcetera
  30084. +fsf/emacs/unixlib/src/zoneinfo/datfiles/europe
  30085. +fsf/emacs/unixlib/src/zoneinfo/datfiles/factory
  30086. +fsf/emacs/unixlib/src/zoneinfo/datfiles/leapseconds
  30087. +fsf/emacs/unixlib/src/zoneinfo/datfiles/northamerica
  30088. +fsf/emacs/unixlib/src/zoneinfo/datfiles/pacificnew
  30089. +fsf/emacs/unixlib/src/zoneinfo/datfiles/smakefile
  30090. +fsf/emacs/unixlib/src/zoneinfo/datfiles/solar87
  30091. +fsf/emacs/unixlib/src/zoneinfo/datfiles/solar88
  30092. +fsf/emacs/unixlib/src/zoneinfo/datfiles/solar89
  30093. +fsf/emacs/unixlib/src/zoneinfo/datfiles/southamerica
  30094. +fsf/emacs/unixlib/src/zoneinfo/datfiles/systemv
  30095. +fsf/emacs/unixlib/src/zoneinfo/datfiles/usno1988
  30096. +fsf/emacs/unixlib/src/zoneinfo/datfiles/usno1989
  30097. +fsf/emacs/unixlib/src/zoneinfo/getopt.c
  30098. +fsf/emacs/unixlib/src/zoneinfo/getopt.h
  30099. +fsf/emacs/unixlib/src/zoneinfo/ialloc.c
  30100. +fsf/emacs/unixlib/src/zoneinfo/smakefile
  30101. +fsf/emacs/unixlib/src/zoneinfo/zic
  30102. +fsf/emacs/unixlib/src/zoneinfo/zic.8
  30103. +fsf/emacs/unixlib/src/zoneinfo/zic.c
  30104. +fsf/emacs/unixlib/unix.doc
  30105. +fsf/emacs/vms/ChangeLog
  30106. +fsf/emacs/vms/README
  30107. +fsf/emacs/vms/VMSINSTALL
  30108. +fsf/emacs/vms/VMSNOTES
  30109. +fsf/emacs/vms/allrename.com
  30110. +fsf/emacs/vms/build.com
  30111. +fsf/emacs/vms/compile.com
  30112. +fsf/emacs/vms/complink.com
  30113. +fsf/emacs/vms/development.notes
  30114. +fsf/emacs/vms/emacs.com
  30115. +fsf/emacs/vms/etags.vms
  30116. +fsf/emacs/vms/kepteditor.com
  30117. +fsf/emacs/vms/link.com
  30118. +fsf/emacs/vms/logout.com
  30119. +fsf/emacs/vms/mailemacs.com
  30120. +fsf/emacs/vms/makedoc.com
  30121. +fsf/emacs/vms/precomp.com
  30122. +fsf/emacs/vms/testemacs.com
  30123. +fsf/emacs/vms/vmsbuild
  30124. +fsf/emacs/vms/vmsdist.com
  30125. +fsf/emacs/vms/vmslink.opt
  30126. +fsf/emacs/vpath.sed
  30127. diff -ru --new-file baseline/fsf/emacs/site-lisp/ChangeLog amiga/fsf/emacs/site-lisp/ChangeLog
  30128. --- baseline/fsf/emacs/site-lisp/ChangeLog    Wed Dec 31 17:00:00 1969
  30129. +++ amiga/fsf/emacs/site-lisp/ChangeLog    Sun Oct 15 17:07:14 1995
  30130. @@ -0,0 +1,4199 @@
  30131. +Sat Sep 10 13:27:11 1994  Barry A. Warsaw  (warsaw@anthem.nlm.nih.gov)
  30132. +
  30133. +    * Public Release of 4.85.
  30134. +
  30135. +Wed Sep  7 18:41:29 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30136. +
  30137. +    * cc-mode.el (c-mode-fsf-menu, c-mode-map, c++-mode-map,
  30138. +      objc-mode-map):
  30139. +    use a better feature test to figure out how to set the menu title
  30140. +    string.
  30141. +
  30142. +Tue Sep  6 13:49:46 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30143. +
  30144. +    * cc-mode.el (c-search-uplist-for-classkey):
  30145. +    in `class' keyword verification section, only skip forward for ?>
  30146. +    template char if a matching ?< char was found previous to
  30147. +    search-start.  This eliminates false match of template base
  30148. +    classes.
  30149. +
  30150. +Thu Sep  1 22:30:23 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30151. +
  30152. +    * cc-mode.el (c-submit-bug-report): updated var list
  30153. +
  30154. +    * cc-mode.el (c-mode-fsf-menu, c-mode-map, c++-mode-map,
  30155. +      objc-mode-map):
  30156. +    do a better job of getting the menu title string appropriate for
  30157. +    the mode being edited in.  Bogus, but necessary.  XEmacs is better
  30158. +    in this respect.
  30159. +
  30160. +    * cc-mode.el (c-search-uplist-for-classkey): Lele patch for objc-mode
  30161. +
  30162. +    * cc-mode.el (c-search-uplist-for-classkey):
  30163. +    avoid "invalid search bound" error
  30164. +
  30165. +    * cc-mode.el (c-beginning-of-statement-1):
  30166. +    skip special modifier chars in all cases, not just in "no balanced
  30167. +    expr found" case.
  30168. +
  30169. +    * cc-mode.el (c-guess-basic-syntax):
  30170. +    CASE 9: generalize and collect common code for finding position
  30171. +    after conditional statements, and check for `while' statement of a
  30172. +    `do' loop.  In that case, skip over the trailing semi.
  30173. +
  30174. +Wed Aug 31 22:20:47 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30175. +
  30176. +    * cc-mode.el (c-progress-init, c-progress-update, c-progress-fini):
  30177. +    use a marker for end (and be sure to free it!) so that as
  30178. +    indentation occurs, % can't go above 100.
  30179. +
  30180. +    * cc-mode.el (c-mode-map):
  30181. +    check on feature (fboundp 'add-menu) for FSF 19 (which doesn't
  30182. +    have it).
  30183. +
  30184. +    * cc-mode.el (c-progress-info, c-progress-init,
  30185. +      c-progress-update,c-progress-fini):
  30186. +    new vars/defuns for better long indentation progress
  30187. +    reporting
  30188. +
  30189. +    (c-indent-exp, c-indent-region): use new progress reporting
  30190. +
  30191. +Tue Aug 30 21:57:37 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30192. +
  30193. +    * cc-mode.el (c-guess-basic-syntax):
  30194. +    CASE 6F, go forward 1 char from b-o-s of containing-sexp bufpos to
  30195. +    find proper relpos of an arglist-cont.
  30196. +
  30197. +    * cc-mode.el (c-offset-alist-default):
  30198. +    statement-case-open default offset is zero
  30199. +
  30200. +    (c-skip-case-statement-forward): new function
  30201. +
  30202. +    (c-guess-basic-syntax): CASE 15: use c-skip-case-statement-forward in
  30203. +    proper places to find the real relpos of statement's inside switch
  30204. +    case/default bodies.  CASE 15D: remove special handling when looking
  30205. +    at c-conditional-key.
  30206. +
  30207. +    * cc-mode.el (c-offsets-alist, c-cleanup-list, c-mode-menu,
  30208. +      c-mode-map, c-symbol-key, c-indent-line, c-popup-menu):
  30209. +    make sure ObjC is properly documented.
  30210. +
  30211. +    * cc-mode.el (c-least-enclosing-brace): new function
  30212. +
  30213. +    (c-enclosing-brace, c-guess-basic-syntax): renamed
  30214. +    c-enclosing-brace to c-most-enclosing-brace
  30215. +
  30216. +    (c-indent-defun): handle opening braces not in column 1
  30217. +
  30218. +    * cc-mode.el (c-beginning-of-statement-1):
  30219. +    skip over statement mod characters that don't preceed an open
  30220. +    paren.
  30221. +
  30222. +Fri Aug 26 17:42:24 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30223. +
  30224. +    * cc-mode.el (c-guess-basic-syntax):
  30225. +    be careful to check for c-access-key non-nil before calling
  30226. +    (looking-at c-access-key).  For C, this is nil.
  30227. +
  30228. +    * cc-mode.el (c-beginning-of-statement-1):
  30229. +    swapped CASE 3 and 4, so that conditional statements are picked up
  30230. +    properly
  30231. +
  30232. +    * cc-mode.el (c-guess-basic-syntax):
  30233. +    CASE 15D, calculate relpos from boi of beginning of statement
  30234. +    prior to indent-point, unless we're looking at a conditional key
  30235. +
  30236. +    * cc-mode.el (c-mode-map, c++-mode-map, objc-mode-map):
  30237. +    change test of 'FSF in c-emacs-features to an fboundp
  30238. +    set-keymap-parent test
  30239. +
  30240. +Thu Aug 25 13:31:31 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30241. +
  30242. +    * cc-mode.el (c-just-after-func-arglist-p,
  30243. +      c-guess-basic-syntax, c-lineup-objc-method-args-2):
  30244. +    more objc patches from Lele
  30245. +
  30246. +Wed Aug 24 21:06:05 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30247. +
  30248. +    * cc-mode.el (c-indent-command):
  30249. +    with optional arg, shift-amt had wrong sign
  30250. +
  30251. +    * cc-mode.el (c-lineup-arglist):
  30252. +    better handling of comments preceding arg lists
  30253. +
  30254. +    * cc-mode.el (c-guess-basic-syntax):
  30255. +    swapped CASE 6A and 6B so that empty arglists with close paren on
  30256. +    separate line are properly recognized.
  30257. +
  30258. +    * cc-mode.el (c-mode-menu, c-emacs-features, c-mode-map,
  30259. +      c-common-init):
  30260. +    remove dependency on string "Lucid" in emacs-version.  Use
  30261. +    features based means where such descrimination is necessary.
  30262. +
  30263. +Tue Aug 23 18:43:28 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30264. +
  30265. +    * cc-mode.el (c-fill-paragraph):
  30266. +    merge with c-mode.el uses fill-region-as-paragraph
  30267. +
  30268. +    * cc-mode.el (c-offsets-alist-default, c-offsets-alist,
  30269. +    c-hanging-braces-alist, c-electric-brace, c-guess-basic-syntax):
  30270. +    added syntactic symbol statement-case-open for
  30271. +    statement-case-intro's that contain an open brace.
  30272. +
  30273. +    * cc-mode.el (c-lineup-math): watch for equal signs in literals
  30274. +
  30275. +    * cc-mode.el (c-beginning-of-statement-1):
  30276. +    CASE5 and CASE 6, better pick up of label's with potential
  30277. +    embedded colons (scope operators).
  30278. +
  30279. +Mon Aug 22 22:28:03 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30280. +
  30281. +    * cc-mode.el (c-hanging-comment-ender-p): new variable
  30282. +
  30283. +    (c-fill-paragraph): looks at c-hanging-comment-ender-p to see if
  30284. +    */ should be left on its own line.  c-mode.el behavior is default
  30285. +    value t, but there have been *many* requests for nil's behavior.
  30286. +
  30287. +Wed Aug 17 23:05:01 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30288. +
  30289. +    * cc-mode.el (c-recognize-knr-p, c-common-init):
  30290. +    fix the way this var is made buffer local
  30291. +
  30292. +Tue Aug 16 20:05:49 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30293. +
  30294. +    * cc-mode.el (c-recognize-knr-p, c-mode, c++-mode, objc-mode):
  30295. +    make it so c-recognize-knr-p is settable from c-mode-common-hook.
  30296. +
  30297. +Thu Aug 11 20:40:06 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30298. +
  30299. +    * cc-mode.el (c-recognize-knr-p): new variable
  30300. +
  30301. +    (c-offsets-alist-default, c-offsets-alist, c-guess-basic-syntax):
  30302. +    changed syntactic symbol c++-funcdecl-cont to ansi-funcdecl-cont
  30303. +
  30304. +    (c-mode, c++-mode, objc-mode): use new c-recognize-knr-p variable
  30305. +
  30306. +    (c-guess-basic-syntax): use new c-recognize-knr-p variable; swap
  30307. +    CASE 5B.2 and 5B.3.
  30308. +
  30309. +Wed Aug 10 17:54:53 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30310. +
  30311. +    * cc-mode.el (c-offsets-alist, c-read-offset, c-set-offset):
  30312. +    can accept variable symbols as offsets.
  30313. +
  30314. +    (c-get-offset): can now accept ++ and -- symbols, which evaluate
  30315. +    to 2* positive and negative c-basic-offset.
  30316. +
  30317. +Thu Aug  4 15:29:43 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30318. +
  30319. +    * cc-mode.el (c-guess-basic-syntax):
  30320. +    case 9C added small performance improvment to c-in-literal call
  30321. +
  30322. +Wed Aug  3 17:37:30 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30323. +
  30324. +    * cc-mode.el (c-beginning-of-statement-1):
  30325. +    use c-in-literal-cache, and limit backscanning in CASE 5 to known,
  30326. +    non-literal position.
  30327. +
  30328. +    * cc-mode.el (c-in-literal, c-guess-basic-syntax):
  30329. +    caching of last literal result
  30330. +
  30331. +Tue Aug  2 20:18:10 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30332. +
  30333. +    * cc-mode.el (c-guess-basic-syntax):
  30334. +    CASE 15D, calculate 'statement relpos as the
  30335. +    beginning-of-statement relative to indent-point.
  30336. +
  30337. +    * cc-mode.el (c-beginning-of-statement-1):
  30338. +    CASE 4, check for conditional keywords which could be followed by
  30339. +    a balanced paren expr.  I.e. while(foo)
  30340. +
  30341. +Tue Jul 26 15:55:21 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30342. +
  30343. +    * cc-mode.el (c++-mode-syntax-table, objc-mode-syntax-table):
  30344. +    give CR same syntax as newline, for selective-display.
  30345. +
  30346. +Fri Jul 22 18:42:38 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30347. +
  30348. +    * cc-mode.el (c-electric-star):
  30349. +    fixed indentation problem when a star is not preceded by a slash.
  30350. +
  30351. +    * cc-mode.el (c-indent-defun):
  30352. +    removed condition-case inside unwind-protect.  All error
  30353. +    conditions are properly handled at other levels of the code.
  30354. +
  30355. +Thu Jul 21 22:34:19 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30356. +
  30357. +    * cc-mode.el (c-class-key, c-search-uplist-for-classkey):
  30358. +    greatly simplified, this constant now contains a regexp that only
  30359. +    matches valid `class' keywords, in the C++ sense. It now ignores
  30360. +    any template, extern, static, etc. keywords.
  30361. +
  30362. +Tue Jul 19 09:53:37 1994  Barry A. Warsaw  (warsaw@anthem.nlm.nih.gov)
  30363. +
  30364. +    * Public Release of 4.35.
  30365. +
  30366. +Sun Jul 17 18:29:51 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30367. +
  30368. +    * cc-mode.el (c-guess-basic-syntax):
  30369. +    Lele Gaifax's patch to fix an Objc problem...
  30370. +    
  30371. +    "this patch, applied to 4.32, will correct a little bug in ObjC
  30372. +    mode.  Currently objc-mode fails to recognize a continued arglist,
  30373. +    as it guesses every such construct is a continued method call."
  30374. +
  30375. +Fri Jul 15 13:48:39 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30376. +
  30377. +    * cc-mode.el (c-search-uplist-for-classkey): don't get fooled by
  30378. +    the following C construct:
  30379. +    
  30380. +    struct shmid_internal
  30381. +    shmconv(
  30382. +        register int    s)
  30383. +    {
  30384. +        int foo = 1;
  30385. +    }
  30386. +
  30387. +Tue Jul 12 14:36:10 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30388. +
  30389. +    * cc-mode.el (c-parse-state): in body of `something bad happened'
  30390. +    part, don't use beginning-of-defun to find "real" bod since based
  30391. +    on some coding styles, this could loop us all the way back to
  30392. +    bob. E.g.:
  30393. +    
  30394. +    int foo() {
  30395. +    int a = 7;
  30396. +    {
  30397. +        foobar();
  30398. +    }}
  30399. +    
  30400. +    int foo() {
  30401. +    int a = 7;
  30402. +    {
  30403. +        foobar();
  30404. +    }}
  30405. +    
  30406. +    
  30407. +    Instead use scan-lists and be more robust about crossing
  30408. +    unbalanced close braces.  Now even antisocial coding styles like
  30409. +    the above can be quickly parsed correctly.
  30410. +
  30411. +    * cc-mode.el (c-parse-state): small but important fix in
  30412. +    `something bad happened' test. make sure that placeholder close
  30413. +    brace ends up before indent point, otherwise we didn't cross it.
  30414. +
  30415. +Thu Jul  7 13:56:08 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30416. +
  30417. +    * cc-mode.el (c-parse-state): in `something bad' section,
  30418. +    placeholder will always be just after any close brace so we need
  30419. +    to 1- from it to check for ?}. Also, we probably don't need to
  30420. +    check for placeholder-1 being nil.
  30421. +
  30422. +Thu Jun 30 21:03:55 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30423. +
  30424. +    * cc-mode.el (c-switch-label-key): a paren can follow the `case'
  30425. +    keyword without any intervening whitespace.
  30426. +
  30427. +    * cc-mode.el (c-beginning-of-statement-1): when skipping over
  30428. +    unary ops, remember that whitespace could be intermixed before the
  30429. +    paren
  30430. +
  30431. +    * cc-mode.el (c-electric-brace): added brace-list-intro and
  30432. +    brace-list-entry to list of hangables
  30433. +    
  30434. +    (c-hanging-braces-alist): added docstring for b-l-i and b-l-e
  30435. +    hangability
  30436. +
  30437. +    * cc-mode.el (c-beginning-of-statement-1): CASE 6: be sure to
  30438. +    ignore switch labels too.
  30439. +
  30440. +    * cc-mode.el (c-lineup-arglist-intro-after-paren): new lineup
  30441. +    function to conform to GNU style.
  30442. +    
  30443. +    (c-style-alist): for style GNU, arglist-intro set to
  30444. +    c-lineup-arglist-intro-after-paren and arglist-close set to
  30445. +    c-lineup-arglist to conform to BOCM GNU style.
  30446. +
  30447. +Wed Jun 29 00:48:56 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30448. +
  30449. +    * cc-mode.el (c-guess-basic-syntax): installed this patch:
  30450. +    
  30451. +    In ObjC mode 4.6 the tests 6D and 6E in c-guess-basic-syntax need
  30452. +    to be swapped. Otherwise what is a continued method call line will
  30453. +    be recognized as a 'arglist-cont-nonempty. Swapping these test
  30454. +    will not interfere with the normal behaviour of cc-mode, since the
  30455. +    test for the method call is surrounded with a test on (eq
  30456. +    major-mode 'objc-mode).
  30457. +    
  30458. +    Emanuele (lele) Gaifax     | ...calling Emacs convenient, of course, is
  30459. +    lele@nautilus.sublink.org  | like calling oxygen useful  -- Rens Troost
  30460. +
  30461. +    * cc-mode.el (c-mark-function): new implementation based on
  30462. +    c-parse-state.  I think this should work much better for people.
  30463. +
  30464. +Tue Jun 28 23:57:42 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30465. +
  30466. +    * cc-mode.el (c-just-after-func-arglist-p): partial fix for this bug:
  30467. +    
  30468. +    class foo
  30469. +    {
  30470. +       foo()
  30471. +          :                    // member-init-intro
  30472. +       a (0),                // topmost-intro-cont???
  30473. +       b (0)                // member-init-cont
  30474. +       {}
  30475. +    };
  30476. +    
  30477. +    
  30478. +    note that if there is a comment after foo(), its still broken.
  30479. +    But that probably won't happen too often...
  30480. +
  30481. +    * cc-mode.el (c-lineup-arglist): don't limit skippages forward
  30482. +    over syntactic ws to eol.
  30483. +
  30484. +Mon Jun 27 18:25:42 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30485. +
  30486. +    * cc-mode.el (c-parse-state): when looking to see if `something
  30487. +    bad happened', and guaranteeing that the char-after placeholder is
  30488. +    = to ?}, make sure that char-after placeholder is less than
  30489. +    point-max (i.e. char-after placeholder returns non-nil).
  30490. +
  30491. +    * cc-mode.el (c-electric-star): should not re-indent line if
  30492. +    introducing a comment not on a comment-only line
  30493. +
  30494. +Thu Jun 23 17:54:49 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30495. +
  30496. +    * cc-mode.el (c-inside-bracelist-p): when finding an enum, check
  30497. +    to be sure its not a type descriptor on a return value of a func
  30498. +    (i.e. skip-chars-forward for not semi or open paren).
  30499. +
  30500. +Wed Jun 22 19:23:43 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30501. +
  30502. +    * cc-mode.el (c-parse-state): when trying to find out if
  30503. +    "something bad happened" be sure to check for crossing a close
  30504. +    *brace* and not a close paren or square bracket.  Only crossing a
  30505. +    close brace indicates badness.
  30506. +
  30507. +Mon Jun 20 00:32:46 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30508. +
  30509. +    * cc-mode.el (c-set-offset): initial contents of prompt is the
  30510. +    last syntactic symbol on the syntactic analysis list -- the most
  30511. +    likely symbol that the user wants to change.
  30512. +
  30513. +Fri Jun 17 22:25:41 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30514. +
  30515. +    * cc-mode.el (c-lineup-arglist): fixed problem of skipping too
  30516. +    many close parens when finding the relpos of arglist-close.
  30517. +
  30518. +    * cc-mode.el (c-guess-basic-syntax): CASE 6F fixed incorrect
  30519. +      relpos
  30520. +
  30521. +    * cc-mode.el (c-guess-basic-syntax): CASE 8B and CASE 8C: when an
  30522. +    otherwise brace-list-entry or brace-list-intro is found to start
  30523. +    with an open brace, the line is given brace-list-open syntax
  30524. +    instead
  30525. +    
  30526. +    (c-inside-bracelist-p): fix small bug in recognizing open brace at
  30527. +    brace-list-intro line, and infinite loop problem.
  30528. +
  30529. +    * cc-mode.el (c-inside-bracelist-p): more accurate handling of
  30530. +    nested aggregates. Now uses brace-state as provided by
  30531. +    c-parse-state.
  30532. +
  30533. +Tue Jun 14 22:25:09 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30534. +
  30535. +    * cc-mode.el (c-forward-conditional): break infinite loop when
  30536. +    finding commented out conditionals
  30537. +
  30538. +Mon Jun 13 17:40:08 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30539. +
  30540. +    * cc-mode.el (c-submit-bug-report): Use new interface for
  30541. +    reporter.el 2.x
  30542. +
  30543. +Fri Jun 10 13:42:02 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30544. +
  30545. +    * cc-mode.el (c-submit-bug-report): remove defun-prompt-regexp
  30546. +    from the list of vars if it is not boundp (i.e. v18)
  30547. +
  30548. +Thu Jun  9 14:15:00 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30549. +
  30550. +    * cc-mode.el (c-guess-basic-syntax): repaired all CASE numbers
  30551. +
  30552. +    * cc-mode.el (c-offsets-alist-default): added syntactic symbols
  30553. +    objc-method-intro objc-method-args-cont objc-method-call-cont.
  30554. +    
  30555. +    (c-offsets-alist): added descriptions for above new syntactic symbols
  30556. +    
  30557. +    (objc-mode-hook) (objc-mode-abbrev-table) (objc-mode-map)
  30558. +    (objc-mode-syntax-table) (objc-mode): added for Objective-C support
  30559. +    
  30560. +    (c-objc-method-key): new regexp desribing an ObjC method intro.
  30561. +    
  30562. +    (c-electric-slash): objc-mode understands // comments
  30563. +    
  30564. +    (c-fill-paragraph): objc-mode understands // comments
  30565. +    
  30566. +    (c-beginning-of-statement-1): added CASE 7 for objc-mode
  30567. +    
  30568. +    (c-in-objc-method-def-p): checks to see if inside an Objective-C
  30569. +    method definition.
  30570. +    
  30571. +    (c-just-after-func-arglist-p): check for Objective-C method def
  30572. +    
  30573. +    (c-guess-basic-syntax): many modifications to look for Objective-C
  30574. +    syntactic symbols: CASE 3.5, CASE 4G, CASE 4I, CASE 5E.
  30575. +    
  30576. +    (c-lineup-objc-method-call) (c-lineup-objc-method-args): new custom
  30577. +    lineup functions for Objective-C methods.
  30578. +    
  30579. +    (c-submit-bug-report): look for ObjC mode
  30580. +
  30581. +Mon Jun  6 19:47:19 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30582. +
  30583. +    * cc-mode.el (c-style-alist): another fix to Ellemtel style.
  30584. +    Since the style guide recommends braces around the body of all
  30585. +    case statements, statement-case-intro should be 0, letting
  30586. +    statement-block-intro of the following line pick up the proper
  30587. +    indentation
  30588. +
  30589. +    * cc-mode.el (c-style-alist): Ellemtel style should have
  30590. +    c-hanging-braces-alist for substatement-open be before and after
  30591. +
  30592. +Thu Jun  2 23:09:16 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30593. +
  30594. +    * cc-mode.el (c-strict-syntactics-p): changed to c-strict-syntax-p
  30595. +    
  30596. +    (c-guess-basic-syntactics): changed to c-guess-basic-syntax
  30597. +    
  30598. +    (c-add-syntactics): changed to c-add-syntax
  30599. +    
  30600. +    (various): use new function and variable names
  30601. +
  30602. +Wed Jun  1 15:46:19 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30603. +
  30604. +    * cc-mode.el: bumping to version 4 in anticipation of objc-mode
  30605. +      support
  30606. +
  30607. +Tue May 31 23:51:08 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30608. +
  30609. +    * cc-mode.el (c-strict-semantics-p): changed to c-strict-syntactics-p
  30610. +    
  30611. +    (c-echo-semantic-information-p): changed to
  30612. +    c-echo-syntactic-information-p
  30613. +    
  30614. +    (c-semantics): changed to c-syntactic-context
  30615. +    
  30616. +    (c-guess-basic-semantics): changed to c-guess-basic-syntactics
  30617. +    
  30618. +    (c-show-semantic-information): changed to c-show-syntactic-information
  30619. +    
  30620. +    (cc-mode.el): other internal changes to make terminology consistent
  30621. +
  30622. +    * cc-mode.el (c-guess-basic-semantics):
  30623. +    CASE 14.E, if defun opening brace is not at
  30624. +    boi, its because its hung on right side so we need a different relpos
  30625. +
  30626. +    * cc-mode.el (c-guess-basic-semantics):
  30627. +    CASE5, various.  Extend the notion of
  30628. +    arglists to bracket lists, i.e. [...]
  30629. +
  30630. +    * cc-mode.el (c-search-uplist-for-classkey):
  30631. +    when skipping over commas after
  30632. +    classkey's watch out for inheritance lists...
  30633. +
  30634. +    * cc-mode.el (c-beginning-of-statement-1):
  30635. +    ignore labels and access keys
  30636. +
  30637. +Tue May 24 22:04:15 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30638. +
  30639. +    * Public Release 3.349
  30640. +
  30641. +    * cc-mode.el (c-search-uplist-for-classkey):
  30642. +    break out of infinite loop when
  30643. +    finding `struct' keyword in arglist
  30644. +
  30645. +Mon May 23 15:43:07 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30646. +
  30647. +    * cc-mode.el (c-electric-brace):
  30648. +    we need to recalculate semantics if, when
  30649. +    re-indenting the preceding line, point changes.  If this happens, the
  30650. +    relpos for semantics is invalid.
  30651. +
  30652. +Thu May 19 22:27:55 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30653. +
  30654. +    * cc-mode.el (c-style-alist):
  30655. +    updated the various styles to set the correct values
  30656. +    for substatement-open
  30657. +    
  30658. +    (c-style-alist): added dynamic setting of default style.  The way this
  30659. +    works may or may not be a feature?
  30660. +
  30661. +Wed May 18 22:07:15 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30662. +
  30663. +    * cc-mode.el (c-backward-to-start-of-if):
  30664. +    fix to correctly handle `else-if'
  30665. +    clauses, which should be skipped when looking for the matching if.
  30666. +
  30667. +    * cc-mode.el (c-search-uplist-for-classkey):
  30668. +    don't get confused by a single struct
  30669. +    type arg in a function's arglist
  30670. +
  30671. +    * cc-mode.el (c-beginning-of-statement-1):
  30672. +    on backward-sexp failure, skip over
  30673. +    funny chars and whitespace only when just before a paren
  30674. +    
  30675. +    (c-search-uplist-for-classkey): watch out for comma ending struct arg
  30676. +    declarations which doesn't leave us in a class definition.
  30677. +
  30678. +    * cc-mode.el (c-mode-map):
  30679. +    fix the setting of mode-popup-menu for Lemacs 19.10.
  30680. +    Menu must have a title string.
  30681. +
  30682. +    * cc-mode.el (c-style-alist):
  30683. +    changes to Ellemtel style: substatement sets its
  30684. +    offset to 3, substatement-open sets its offset to 0.  Given by:
  30685. +    <qhslali@aom.ericsson.se> Lars Lindberg.
  30686. +
  30687. +Tue May 17 22:46:22 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30688. +
  30689. +    * cc-mode.el (c-beginning-of-statement-1):
  30690. +    when backward-sexp fails and doing
  30691. +    backward-up-list, and before skipping over noise characters, skip over
  30692. +    any preceding syntactic whitespace:
  30693. +    
  30694. +    --------------V
  30695. +        if ( ! backup_dev ||
  30696. +                 sep1 != ':' || )
  30697. +
  30698. +    * cc-mode.el (c-beginning-of-statement-1):
  30699. +    fixed small infinite loop in CASE5 test
  30700. +    when barrier char is in literal.
  30701. +
  30702. +    * cc-mode.el (c-guess-basic-semantics):
  30703. +    CASE 13: don't limit the search backwards
  30704. +    for the beginning of statement
  30705. +
  30706. +    * cc-mode.el (c-beginning-of-statement-1):
  30707. +    completely rewritten to properly account
  30708. +    for cpp macros and statement barrier characters (e.g. { } ;) in
  30709. +    literals.
  30710. +
  30711. +Mon May 16 20:21:12 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30712. +
  30713. +    * cc-mode.el (c-inside-bracelist-p):
  30714. +    must check that enum keyword truly introduces
  30715. +    a bracelist and not that it is a type identifier for a declaration.
  30716. +    
  30717. +    I.e. match:
  30718. +    
  30719. +    enum foo { /* ... */ }
  30720. +    
  30721. +    but not:
  30722. +    
  30723. +    enum foo bar;
  30724. +
  30725. +Thu May 12 22:52:12 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30726. +
  30727. +    * cc-mode.el (c-guess-basic-semantics):
  30728. +    CASE 4A.2 watch out for enum keywords in
  30729. +    K&R argdecl lists.  These don't open enum definitions, but they are
  30730. +    declarations instead.  E.g.:
  30731. +    
  30732. +    ret_stat (rpt_stat, filename, pcode)
  30733. +        enum xrpt_status_codes rpt_stat;
  30734. +        char filename[];
  30735. +        enum xpippop_codes pcode;
  30736. +    {
  30737. +
  30738. +    * cc-mode.el:
  30739. +    (c-C-conditional-key) (c-C++-conditional-key): new regexps which
  30740. +    describe conditionals in the two supported languages.  This is
  30741. +    necessary because `try' and `catch' blocks are defined as
  30742. +    substatements equivalent to `while', `for', etc., in C++ only
  30743. +    
  30744. +    (c-mode) (c++-mode): set c-conditional-key, which is now buffer-local,
  30745. +    to either c-C-conditional-key or c-C++-conditional-key.
  30746. +
  30747. +    * cc-mode.el (c-parse-state):
  30748. +    when we discover that an open brace we thought
  30749. +    specified the bod, actually isn't the bod, we backup and search for
  30750. +    another potential bod.  This is necessary so that open braces in
  30751. +    column zero that aren't really defun opening braces don't trip us up.
  30752. +    Our test for invalid bod is if we cross over an unbalanced close
  30753. +    brace.
  30754. +
  30755. +    * cc-mode.el (c-guess-basic-semantics):
  30756. +    CASE 4G, in c-mode, fix recognition of the
  30757. +    last line in the following construct:
  30758. +    
  30759. +    typedef int (*foobar)           /* if I break this into 2 lines ...*/
  30760. +        (int foo, char *bar);
  30761. +    extern foobar really;       /* this is incorrectly indented */
  30762. +
  30763. +Tue May 10 16:42:13 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30764. +
  30765. +    * cc-mode.el (c-indent-region):
  30766. +    fixed a bug where comment-only lines were being
  30767. +    skipped.  Wrapped an unwind-protect around mark copying so we can't
  30768. +    leak marks.
  30769. +
  30770. +    * cc-mode.el (c-emacs-feature): use variables emacs-major-version and
  30771. +    emacs-minor-version if they exist
  30772. +
  30773. +Fri May  6 21:09:58 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30774. +
  30775. +    * cc-mode.el (c-style-alist):
  30776. +    small changes to the Ellemtel style: inline-open and
  30777. +    topmost-intro-cont are changed to 0 offset.
  30778. +
  30779. +    * cc-mode.el (c-hanging-braces-alist):
  30780. +    added (substatement after) so that braces
  30781. +    will hanging on substatement blocks
  30782. +
  30783. +Thu May  5 22:48:23 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30784. +
  30785. +    * cc-mode.el (c-lineup-math):
  30786. +    can now line up equals signs even if the equals isn't
  30787. +    at boi.  E.g., it can now handle:
  30788. +    
  30789. +    float a = 1.0,
  30790. +          b = 7,
  30791. +          c = 9;
  30792. +
  30793. +    * cc-mode.el (c-comment-start-regexp):
  30794. +    new buffer-local variable which describes
  30795. +    how comments start.  This improves generality for C-like modes with
  30796. +    different comment intro styles.
  30797. +
  30798. +    * cc-mode.el (c-indent-via-language-element):
  30799. +    renamed to c-indent-line for better
  30800. +    backwards compatibility, i.e. awk-mode
  30801. +
  30802. +Tue Apr 26 16:17:29 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30803. +
  30804. +    * cc-mode.el (c-parse-state):
  30805. +    make sure we ignore any bogus beginning-of-defun
  30806. +    bufpos's when we're searching back 2 bods
  30807. +
  30808. +    * cc-mode.el (c-search-uplist-for-classkey):
  30809. +    after finding what looks like a class
  30810. +    header, search for both a semi (denoting a fwd decl), and an equals
  30811. +    (denoting a struct init).
  30812. +
  30813. +Thu Apr 21 21:12:26 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30814. +
  30815. +    * cc-mode.el:
  30816. +    (c-electric-brace) (c-electric-semi&comma) (c-electric-colon)
  30817. +    (c-indent-command) (c-indent-exp) (c-indent-region)
  30818. +    (c-indent-via-language-element): eliminated extraneous optional
  30819. +    arguments, i.e. lim and bod
  30820. +
  30821. +    * cc-mode.el (c-adaptive-block-open): obsolete
  30822. +    
  30823. +    (c-offsets-alist-default) (c-electric-brace): added substatement-open
  30824. +    syntactic symbol
  30825. +    
  30826. +    (c-hanging-braces-alist): added ability to hang substatement-open
  30827. +    braces.
  30828. +    
  30829. +    (c-style-alist): changed defaults of block-open to substatement-open
  30830. +
  30831. +    * cc-mode.el (c-safe):
  30832. +    use Dan LaLiberte's version impl. workaround for an FSF
  30833. +    19.22 bug
  30834. +
  30835. +Tue Apr 19 15:15:41 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30836. +
  30837. +    * cc-mode.el (c-mode-map): put c-macro-expand on C-c C-e
  30838. +
  30839. +    * cc-mode.el:
  30840. +    (c-mode-map) (c-common-init): put in code to conform to Lucid 19.10's
  30841. +    popup menu convention of using mode-popup-menu variable
  30842. +
  30843. +Fri Apr 15 23:09:59 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30844. +
  30845. +    * cc-mode.el (c-indent-defun): handle buffer-read-only errors better
  30846. +
  30847. +    * cc-mode.el (c-lineup-math): also lines up multi-line equal signs
  30848. +
  30849. +    * cc-mode.el (c-guess-basic-semantics):
  30850. +    replaced calculation of literal which must
  30851. +    have gotten accidentally removed some time ago.
  30852. +
  30853. +    * cc-mode.el (c-1bit-il):
  30854. +    removed since it appears to be identical to c-in-literal,
  30855. +    and thus obsolete.
  30856. +
  30857. +    * cc-mode.el (c-search-uplist-for-classkey):
  30858. +    programmatically ignore the `class'
  30859. +    keyword inside template arg lists
  30860. +    
  30861. +    (c-enclosing-brace) (c-narrow-out-enclosing-class): new helper
  30862. +    functions
  30863. +    
  30864. +    (c-guess-basic-semantics): fixed recognition of 'defun-open CASE 4A.4,
  30865. +    CASE 13.A, 'block-close CASE 13.B, 'defun-block-intro CASE 14.E
  30866. +
  30867. +Thu Apr 14 18:42:00 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30868. +
  30869. +    * cc-mode.el (c-parse-state):
  30870. +    record containing paren, but not balanced paren sexps
  30871. +
  30872. +    * cc-mode.el (c-guess-basic-semantics):
  30873. +    fixed a regression problem in recognizing
  30874. +    the difference between an inline-close and a nested class-close
  30875. +
  30876. +    * cc-mode.el: (c-parse-state) (c-guess-basic-semantics)
  30877. +    (c-search-uplist-for-classkey): massive rewrite of all parsing
  30878. +    components. c-parse-state now uncovers the brace nesting level of the
  30879. +    construct from (bod 2) to point and the other two defuns use this
  30880. +    information to make scooting around brace levels much quicker and more
  30881. +    accurate.
  30882. +
  30883. +Thu Apr  7 14:34:28 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30884. +
  30885. +    * cc-mode.el (c-electric-brace):
  30886. +    can now specify `hanginess' on close braces
  30887. +
  30888. +Thu Mar 31 15:10:09 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30889. +
  30890. +    * Public release: 3.304
  30891. +
  30892. +    * cc-mode.el (c-search-uplist-for-classkey):
  30893. +    class relpos should be at the 'boi of
  30894. +    where c-class-key gives us a match.  This is because its too hard to
  30895. +    make c-class-key match the typedef keyword on:
  30896. +    
  30897. +    typedef struct Foo
  30898. +    {
  30899. +    
  30900. +    so its easier to make this fix instead.
  30901. +
  30902. +Fri Mar 25 20:34:18 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30903. +
  30904. +    * cc-mode.el:
  30905. +    (c-forward-syntactic-ws) (c-backward-syntactic-ws): minor speed ups
  30906. +    achieved by calling forward-comment with a huge number so we don't
  30907. +    have to return to the lisp loop after just 1 comment.
  30908. +
  30909. +    * cc-mode.el (c-search-uplist-for-classkey):
  30910. +    added another speedup where syntactic
  30911. +    whitespace is skipped before doing a re-search-forward.  This requires
  30912. +    however that the buffer be narrowed during the r-s-f because of the
  30913. +    definition of c-class-key which matches \\` or empty-string-at-bod.
  30914. +    It would be better to use \\`\\|\\= to match empty-string-at-point,
  30915. +    but that's not defined for v18, and doesn't seem to work anyway, at
  30916. +    least in Lemacs.
  30917. +    
  30918. +    (c-search-uplist-for-classkey): after finding a match for c-class-key,
  30919. +    skip non-semicolons up to brace point.  If a semi is found, we're
  30920. +    looking at a forward declaration, not a class definition.
  30921. +
  30922. +Thu Mar 24 18:43:38 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30923. +
  30924. +    * cc-mode.el (c-guess-basic-semantics): do not limit calls to
  30925. +    c-search-uplist-for-classkey to just c++-mode since even in C we can
  30926. +    have nested structs and unions.
  30927. +    
  30928. +    (c-search-uplist-for-classkey): now returns a vector instead of a
  30929. +    cons cell
  30930. +    
  30931. +    (c-guess-basic-semantics): modifications for new c-s-u-f-c return
  30932. +    value
  30933. +
  30934. +    * cc-mode.el:
  30935. +    (c-inside-bracelist-p) (c-guess-basic-semantics): when looking for an
  30936. +    enum brace-list, c-beginning-of-statement could leave us at point-min,
  30937. +    which could contain an intervening comment, so you need to call
  30938. +    c-forward-syntactic-ws.
  30939. +
  30940. +Wed Mar 23 23:22:37 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30941. +
  30942. +    * cc-mode.el (c-search-uplist-for-classkey):
  30943. +    another fix for infinite loops that
  30944. +    can occur when indenting inside the second of multiple nested classes.
  30945. +    This should also speed things up by further limiting the region being
  30946. +    searched.
  30947. +
  30948. +Tue Mar 22 23:12:58 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30949. +
  30950. +    * cc-mode.el (c-mark-function):
  30951. +    worked around call to backward-paragraph, which
  30952. +    didn't work and wasn't the right semantics anyway.  Movement should be
  30953. +    by beginning-/end-of-defun.
  30954. +
  30955. +    * cc-mode.el (c-indent-exp):
  30956. +    restructure the unwind-protect call to ensure that the
  30957. +    `end' marker is always removed on any error condition.
  30958. +    
  30959. +    (c-indent-exp): find any open brace that occurs after point, ignoring
  30960. +    lexical whitespace, including newlines.
  30961. +
  30962. +    * cc-mode.el (c-inside-bracelist-p):
  30963. +    in the first goto-char, goto containing-sexp,
  30964. +    not 1- c-s, otherwise, it will not properly recognize bracelists with
  30965. +    comments on the end of the line.  The following
  30966. +    c-beginning-of-statement will properly consume any preceding
  30967. +    whitespace.
  30968. +
  30969. +Mon Mar 21 22:01:25 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30970. +
  30971. +    * cc-mode.el (c-search-uplist-for-classkey):
  30972. +    must handle nil return value from
  30973. +    scan-lists.
  30974. +
  30975. +    * cc-mode.el (c-search-uplist-for-classkey):
  30976. +    fix problem of infinite loops when
  30977. +    there are balanced expressions between (bod 2) and the indent-point
  30978. +    that aren't picked up by bod because they don't match
  30979. +    defun-prompt-regexp.  We skip over this noise with scan-lists.
  30980. +
  30981. +    * cc-mode-18.el:
  30982. +    don't hack c-emacs18-common-hook onto c-mode-common-hook anymore. tell
  30983. +    users to put it on their c-mode-common-hook themselves.
  30984. +
  30985. +    * cc-mode.el (c-search-uplist-for-classkey): end-of-defun can fail
  30986. +
  30987. +Fri Mar 18 21:38:31 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30988. +
  30989. +    * cc-mode.el (c-search-uplist-for-classkey):
  30990. +    new performance tuned version.  Here
  30991. +    are some numbers: hitting tab at the end of an 11k function, with an
  30992. +    8k function just before it was giving me 2.637sec for
  30993. +    c-indent-command, and 1.784sec for c-s-u-f-c alone.  Now I'm getting
  30994. +    0.972sec for c-i-c and 0.180sec for c-s-u-f-c.  An order of magnitude
  30995. +    improvement in c-s-u-f-c.  These are un-bc'd times. Other bottlenecks
  30996. +    must exist in c-i-c...
  30997. +
  30998. +    * cc-mode.el:
  30999. +    added an eval-when-compile to pick up the reporter-* symbols when
  31000. +    byte-compiling.
  31001. +
  31002. +Thu Mar 17 20:56:04 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31003. +
  31004. +    * cc-mode.el (c-electric-colon):
  31005. +    do scope-operator clean up immediately after
  31006. +    self-insert-command so that subsequent indentation and hanging
  31007. +    calculations will be performed correctly
  31008. +
  31009. +Tue Mar 15 23:29:16 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31010. +
  31011. +    * cc-mode.el (c-search-uplist-for-classkey):
  31012. +    adjust for the fact that c-class-key
  31013. +    now match 1 character before the `c' in "class".  goto-char 1+ foundp
  31014. +    to get to the proper character starting the class definition.
  31015. +
  31016. +    * cc-mode.el (c-read-offset): new helper function for c-set-offset
  31017. +    
  31018. +    (c-set-offset): sanity check OFFSET argument both interactively and
  31019. +    non-interactively.  This seems to trip up many novices.
  31020. +
  31021. +    * cc-mode.el (c++-mode-map):
  31022. +    fixed binding for c-scope-operator. It is now on C-c :
  31023. +
  31024. +Fri Mar 11 23:45:51 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31025. +
  31026. +    * cc-mode-18.el (c-emacs18-il): applied patch contributed by
  31027. +    SAKAI Kiyotaka(ksakai@mtl.t.u-tokyo.ac.jp) to fix infinite loop bug.
  31028. +
  31029. +    * cc-mode.el (c-fill-paragraph): removed last 2 c-mode.el dependencies
  31030. +
  31031. +    * cc-mode.el (c-guess-basic-semantics):
  31032. +    CASE 8C: after moving to placeholder, which
  31033. +    is bos, move over any conditional statments if looking at
  31034. +    c-conditional-key.  Otherwise the following code indents incorrectly:
  31035. +    
  31036. +    main()
  31037. +    {
  31038. +        while (cin >> float)
  31039. +            cout << float
  31040. +                 << float;   //  This should not be this far over but beneath <<
  31041. +    }
  31042. +
  31043. +    * cc-mode.el (c-indent-exp):
  31044. +    put an unwind-protect around the sanity checks so that
  31045. +    point is restored on error
  31046. +
  31047. +    * cc-mode.el (c-class-key): another fix to recognize keyword
  31048. +      `class' at beginning-of-buffer.
  31049. +    
  31050. +    (c-guess-basic-semantics): if class opening brace is not the last
  31051. +    non-whitespace on a line, the narrow-to-region narrowing out of
  31052. +    enclosing class will not have the proper begin point.  Make sure the
  31053. +    region does not contain the class opening brace.
  31054. +
  31055. +    * cc-mode.el (c-indent-region):
  31056. +    fixed error signal when indenting region not
  31057. +    containing balanced sexp. e.g. at the top level:
  31058. +    
  31059. +    int i,
  31060. +        j,
  31061. +        k;
  31062. +
  31063. +    * cc-mode.el (c-class-key):
  31064. +    another fix to recognize nested class but not the word
  31065. +    'class' in a template declaration
  31066. +
  31067. +Thu Mar 10 23:32:37 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31068. +
  31069. +    * cc-mode.el (c-beginning-of-statement-1):
  31070. +    sped up about 8x by removing an
  31071. +    unnecessary (I think) call to c-backward-syntactic-ws and a duplicate
  31072. +    call to c-in-literal.  By using elp, I think these were the real time
  31073. +    hogs in c-b-o-s-1 which was the biggest hog in
  31074. +    c-guess-basic-semantics.
  31075. +
  31076. +Wed Mar  9 22:15:26 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31077. +
  31078. +    * cc-mode.el (c-lineup-arglist):
  31079. +    added a (beginning-of-line) call before the
  31080. +    (backward-up-list 1) call in the special case for arglist-intro and
  31081. +    arglist-cont-nonempty.  Without this, indentation would be different
  31082. +    when point was at the beginning and end of line.  E.g.:
  31083. +    
  31084. +    main()
  31085. +    {
  31086. +        if ((BuddyRec* buf = (BuddyRec*)(bufs[message_bufs++]
  31087. +                         = ::new unsigned char[MessageBufSize]))
  31088. +            == 0) {
  31089. +        }
  31090. +    }
  31091. +    
  31092. +    
  31093. +    On the "== 0) {" line.
  31094. +
  31095. +    * cc-mode.el (c-indent-exp):
  31096. +    try to be smarter about finding the beginning of the
  31097. +    balanced expression to indent.  Gives results closer to old
  31098. +    indent-c-exp behavior.
  31099. +
  31100. +    * cc-mode.el (c-submit-bug-report):
  31101. +    moved the require of reporter to after the
  31102. +    y-or-n-p question. Shortened the package name so it will fit on the
  31103. +    Subject line better.
  31104. +
  31105. +Mon Mar  7 17:39:45 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31106. +
  31107. +    * cc-mode.el (c-skip-conditional):
  31108. +    new function. factorized duplicate code
  31109. +    
  31110. +    (c-guess-basic-semantics): fixed statement-cont relpos calculation in
  31111. +    a continued statement following an else clause. CASE 8A and 8D changed
  31112. +    to use c-skip-conditional.
  31113. +
  31114. +Mon Feb 28 18:23:36 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31115. +
  31116. +    * cc-mode.el (c-conditional-key):
  31117. +    not sufficient to wrap conditional keywords in
  31118. +    \\<...\\> since this will false hit a keyword followed by an
  31119. +    underscore, which technically isn't a keyword.  An example is
  31120. +    "do_table" which incorrectly gets marked as a `do' keyword.
  31121. +
  31122. +Fri Feb 25 23:01:45 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31123. +
  31124. +    * cc-mode.el (c-guess-basic-semantics):
  31125. +    swapped CASE 7A and 7B so that we properly
  31126. +    indentify a brace-list-close of an empty brace list.
  31127. +
  31128. +    * cc-mode.el (c-style-alist):
  31129. +    added the "Ellemtel" style which implements the
  31130. +    coding style defined in "Programming in C++, Rules and
  31131. +    Recommendations, Erik Nyquist and Mats Henricson, Ellemtel, ftp from
  31132. +    euagate.eua.ericsson.se".
  31133. +
  31134. +    * cc-mode.el: (c-point) (c-indent-defun): only check the value of
  31135. +    defun-prompt-regexp if it is boundp (so v18 doesn't break)
  31136. +
  31137. +Thu Feb 24 23:34:08 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31138. +
  31139. +    * cc-mode.el (c-electric-brace):
  31140. +    fixed bug in temporary newline insertion when
  31141. +    auto-newline is off.  If a temp newline was not inserted, don't try to
  31142. +    delete it later on.
  31143. +
  31144. +    * cc-mode.el (c-set-offset):
  31145. +    changed the minibuffer prompt.  "Langelem" =>
  31146. +    "Syntactic symbol", and put in a brief message so that people won't
  31147. +    quote the symbol (as some novices have been doing).
  31148. +
  31149. +    * cc-mode.el (c-guess-basic-semantics):
  31150. +    CASE 4B.1, check for member init colon
  31151. +    preceding point even after doing a forward-char -1.  Need to skip over
  31152. +    constructor parameter list that span multiple lines, with the member
  31153. +    init colon hanging on the last of those line.
  31154. +    
  31155. +    CASE 4D.1. added a backward-sexp call to handle member-init-cont's
  31156. +    which are paren-lists broken across multiple lines.
  31157. +
  31158. +    * cc-mode.el (c-inhibit-startup-warnings-p):
  31159. +    new variable, used in c-emacs-features
  31160. +    
  31161. +    (c-emacs-features): rewrote feature extraction logic to be based on
  31162. +    version numbers. This more closely reflects the current state of
  31163. +    affairs of the main Emacs flavors.  There is sanity checking and
  31164. +    warning messages built-in too, to help inform the user if there are
  31165. +    known problems.
  31166. +
  31167. +Mon Feb 21 18:13:53 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31168. +
  31169. +    * cc-mode.el (c-guess-basic-semantics):
  31170. +    swap case 4A.2 and 4A.3 so that brace-lists
  31171. +    are checked before inline-open's, otherwise enums inside of classes
  31172. +    are not recognized properly.
  31173. +
  31174. +    * cc-mode.el (c-backslashify-current-line):
  31175. +    use kill-region instead of kill-line so
  31176. +    we don't have to use the kill-lines-magic hack.
  31177. +
  31178. +    * cc-mode.el (c-beginning-of-statement-1):
  31179. +    do not register last-begin when looking
  31180. +    at a case/default label, otherwise statement-cont lines after a case
  31181. +    label will not be associated with the correct beginning-of-statement
  31182. +
  31183. +Fri Feb 18 16:13:27 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31184. +
  31185. +    * cc-mode.el (c-lineup-arglist):
  31186. +    must handle arglist-intro lines just like
  31187. +    arglist-cont-nonempty lines in the calculation of containing-sexp in
  31188. +    the let* statement.
  31189. +    
  31190. +    (c-lineup-arglist): do not hard-code offset to 2 if at the end, we are
  31191. +    still looking at the eol.  I don't know why that was there...
  31192. +
  31193. +    * cc-mode.el (c-guess-basic-semantics):
  31194. +    CASE 4I, topmost-intro-cont's relpos must
  31195. +    be the boi of the beginning-of-statement, otherwise multiple t-i-c
  31196. +    lines get marching indentation.
  31197. +
  31198. +Thu Feb 17 23:53:16 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31199. +
  31200. +    * cc-mode.el (c-set-style):
  31201. +    changed the sense of the optional argument.  Now, style
  31202. +    changes modify the global variables by default, except when a non-nil
  31203. +    second argument is given.  Only then are buffer-local versions of the
  31204. +    variables made.
  31205. +
  31206. +    * cc-mode.el (c-lineup-arglist):
  31207. +    fixed calculation of containing-sexp for the
  31208. +    following code:
  31209. +    
  31210. +    main()
  31211. +    {
  31212. +        if( someFunction(someArg,
  31213. +                         anotherArg) &&
  31214. +            someOtherFunction(someArg,
  31215. +                              anotherArg))
  31216. +            doThis();
  31217. +    }
  31218. +
  31219. +    * cc-mode.el (c-class-key):
  31220. +    fixed class recognizing regexp so that it doesn't
  31221. +    falsely match the word `class' in a template function declaration,
  31222. +    e.g.:
  31223. +    
  31224. +    template<class T>
  31225. +    int A<T>::foo(
  31226. +
  31227. +    * cc-mode.el (c-mode-map):
  31228. +    moved c-indent-defun to C-c C-q.  This should be its
  31229. +    final resting place
  31230. +    
  31231. +    (c-lineup-math): new optional custom indent function, not used by
  31232. +    default.
  31233. +
  31234. +    * cc-mode.el (c-mode-map):
  31235. +    moved c-indent-defun from C-M-x to C-c C-i.  RMS says
  31236. +    C-M-x is reserved.
  31237. +
  31238. +Wed Feb 16 23:06:15 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31239. +
  31240. +    * cc-mode.el (c++-mode-syntax-table):
  31241. +    change : back to default (. == punctuation)
  31242. +    syntax class since c-label-key is busted when its (_ == symbol)
  31243. +
  31244. +    * cc-mode.el (c-lineup-runin-statements):
  31245. +    new lineup function for people who hang
  31246. +    the first statement after the open brace.
  31247. +    
  31248. +    (c-offsets-alist-default): added comment about alternative indentation
  31249. +    style for `statement'
  31250. +
  31251. +Mon Feb 14 15:53:30 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31252. +
  31253. +    * cc-mode.el (c-point):
  31254. +    when defun-prompt-regexp is non-nil, b-o-d doesn't leave us
  31255. +    at the brace, so we need to skip it as noise.
  31256. +
  31257. +    * cc-mode.el (c-indent-defun): if defun-prompt-regexp is non-nil,
  31258. +    beginning-of-defun won't leave us at the open brace, so we must skip
  31259. +    over defun-prompt-regexp... its noise.
  31260. +
  31261. +Fri Feb 11 20:49:19 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31262. +
  31263. +    * cc-mode.el (c-guess-basic-semantics):
  31264. +    CASE 14.C, when looking for a ?: construct,
  31265. +    and checking for not looking at a :: scope operator, make sure we do
  31266. +    this comparison at indent-point, instead of the first non-blank line
  31267. +    in the block
  31268. +
  31269. +    * cc-mode.el (c-guess-basic-semantics):
  31270. +    CASE 8C: if first stream-op is on a
  31271. +    separate line (i.e. not on the `cout' line), it should be indented
  31272. +    like a statement-cont, not a stream-op.  Relpos in this case is boi of
  31273. +    the first preceding non-syntactic-ws line
  31274. +
  31275. +    * cc-mode.el: (c-backward-to-start-of-if) (c-backward-to-start-of-do)
  31276. +    (c-guess-basic-semantics): It is not enough to search test for
  31277. +    looking-at "keyword\\b" since this will not catch "keyword_thing",
  31278. +    which is a valid symbol and not a keyword.  There is no equivalent of
  31279. +    \\b that matches at the end of a word-or-symbol string.  For now, I
  31280. +    changed the looking-at's to "keyword\\b[^_]" which seems to work.
  31281. +    There are probably instances of "keyword\\>" that are broken too, but
  31282. +    we'll hit them as they occur, since I'm not sure they are broken.
  31283. +
  31284. +Thu Feb 10 23:30:11 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31285. +
  31286. +    * cc-mode.el (c-populate-syntax-table):
  31287. +    only put c-mode/c++-mode common syntax
  31288. +    entries into syntax table.
  31289. +    
  31290. +    (c++-mode-syntax-table): colon (:) gets symbol class
  31291. +
  31292. +    * cc-mode.el:
  31293. +    (c-mode-hook) (c++-mode-hook) (c-mode-common-hook): added defvars for
  31294. +    completeness.
  31295. +
  31296. +Wed Feb  9 17:48:21 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31297. +
  31298. +    * Public release: 3.229
  31299. +
  31300. +    * cc-mode.el (c-electric-braces):
  31301. +    when calculating the initial semantics of the
  31302. +    open brace, we only need to insert a temporary newline if there is
  31303. +    non-whitespace preceding the brace, on the same line.
  31304. +
  31305. +    * cc-mode.el (c-guess-basic-semantics):
  31306. +    CASE 4I, don't add `inclass' semantics to
  31307. +    the list since the relpos already has any inclass offset added in.
  31308. +    Otherwise we get inclass offsets added twice.
  31309. +
  31310. +    * cc-mode.el (c-guess-basic-semantics):
  31311. +    fixed small problem introduced in version
  31312. +    3.235. when skipping lexical whitespace, we must skip [ \t\n].
  31313. +    newline wasn't getting skipped.
  31314. +
  31315. +Tue Feb  8 22:05:48 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31316. +
  31317. +    * cc-mode.el:
  31318. +    (c-offsets-alist) (c-offsets-alist-default): added `friend' syntactic
  31319. +    symbol for recognition of C++ friend declarations.  Default offset is
  31320. +    0.
  31321. +    
  31322. +    (c-guess-basic-semantics): recognize C++ friend declarations, and add
  31323. +    `friend' syntactic symbols as a modifier.
  31324. +
  31325. +    * cc-mode.el (c-guess-basic-semantics):
  31326. +    when narrowing out enclosing class, and
  31327. +    calculating start of region to narrow to, do not skip all syntactic
  31328. +    ws, just lexical whitespace (change c-forward-syntactic-ws call to
  31329. +    skip-chars-forward). Otherwise, you could skip into the middle of a C
  31330. +    comment block and not figure out that what you're looking at is a `c'
  31331. +    syntactic symbol.
  31332. +
  31333. +    * cc-mode.el:
  31334. +    (c-offsets-alist) (c-offsets-alist-default) (c-guess-basic-semantics):
  31335. +    added defun-block-intro syntactic symbol which controls indentation
  31336. +    for the first line in a top-level defun, analogous to
  31337. +    statement-block-intro.  (CASE 14.E)
  31338. +
  31339. +    * cc-mode.el (c-indent-defun):
  31340. +    catch any errors that occur in c-indent-exp and make
  31341. +    sure point is restored and the temporary mark is destroyed.
  31342. +
  31343. +    * cc-mode.el: (c-untame-characters) (c-backscan-limit) (c-tame-insert)
  31344. +    (c-tame-comments) (c-emacs18-fsws) (c-emacs18-bsws) (c-emacs18-il):
  31345. +    moved these defuns and vars to cc-mode-18.el file.
  31346. +    
  31347. +    (c-mode-map): do not install Emacs 18-only bindings
  31348. +    
  31349. +    (c-populate-syntax-table): do not install Emacs 18-only syntax table
  31350. +    entries
  31351. +    
  31352. +    (c-insert-and-tame): renamed to c-insert-special-chars and make this
  31353. +    call only self-insert-command.  Don't worry about Emacs 18
  31354. +    compatibility.
  31355. +    
  31356. +    (c-mark-function) (c-common-init): Don't worry about Emacs 18
  31357. +    compatibility.
  31358. +    
  31359. +    (c-emacs19-accurate-fsws): renamed to c-forward-syntactic-ws. Don't
  31360. +    worry about Emacs 18 compatibility.
  31361. +    
  31362. +    (c-emacs19-accurate-bsws): renamed to c-backward-syntactic-ws. Don't
  31363. +    worry about Emacs 18 compatibility.
  31364. +    
  31365. +    (c-8bit-il): renamed to c-in-literal. Don't worry about Emacs 18
  31366. +    compatibility.
  31367. +    
  31368. +    (c-submit-bug-report): remove reporting of c-backscan-limit and
  31369. +    c-untame-characters since these are for Emacs 18 only.
  31370. +
  31371. +Wed Feb  2 00:00:40 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31372. +
  31373. +    * cc-mode.el (c-lineup-arglist):
  31374. +    add kludge for arglist-cont-nonempty to get
  31375. +    correct indentation.
  31376. +    
  31377. +    (c-guess-basic-semantics): CASE 5D: arglist-cont-nonempty's relpos
  31378. +    needs to be boi of containing-sexp paren.  this is good for + offset,
  31379. +    but bad for c-lineup-arglist, so add the kludge described above.
  31380. +
  31381. +Tue Feb  1 22:14:35 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31382. +
  31383. +    * cc-mode.el (c-inside-bracelist-p):
  31384. +    enum keyword could be preceded by a typedef
  31385. +    keyword
  31386. +
  31387. +    * cc-mode.el (c-comment-region):
  31388. +    removed as obsolete, use comment-region instead.
  31389. +    Put the new comment-region function in, but commented out.
  31390. +
  31391. +    * cc-mode.el (c-default-macroize-column):
  31392. +    changed to c-backslash-column. Default
  31393. +    value changed to 48 from 78.  This is merged from c-mode.el
  31394. +    
  31395. +    (c-macroize-region): changed to c-backslash-region for c-mode.el merge.
  31396. +
  31397. +Mon Jan 31 22:57:05 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31398. +
  31399. +    * cc-mode.el (c-guess-basic-semantics):
  31400. +    CASE 8B.3: instead of try-block-open, which
  31401. +    is now gone, put statement-cont, block-open on semantics list.
  31402. +    Eventually I may call a recognition hook, and/or exceptions probably
  31403. +    fall through to here.
  31404. +
  31405. +    * cc-mode.el (c-guess-basic-semantics):
  31406. +    CASE 5E. go to beginning of statement
  31407. +    before looking getting relpos, so that we properly pick up nested
  31408. +    argument lists.
  31409. +
  31410. +    * cc-mode.el (c-common-init):
  31411. +    better setting up of Lucid menubar (use mode-name as
  31412. +    menu bar title)
  31413. +    
  31414. +    (c-popup-menu): use mode-name in menu title
  31415. +
  31416. +    * cc-mode.el (c-keep-region-active):
  31417. +    shouldn't check for interactive-p in tests
  31418. +    
  31419. +    (c-submit-bug-report): don't keep region active.
  31420. +
  31421. +    * cc-mode.el (c-keep-region-active): no-op for FSF 19
  31422. +    
  31423. +    (c-set-style) (c-beginning-of-statement) (c-end-of-statement)
  31424. +    (c-up-conditional) (c-backward-conditional) (c-forward-conditional)
  31425. +    (c-popup-menu): added a call to c-keep-region-active
  31426. +    
  31427. +    (c-tame-comments) (c-indent-command) (c-indent-exp) (c-indent-defun)
  31428. +    (c-indent-region) (c-macroize-region) (c-comment-region): removed call
  31429. +    to c-keep-region-active
  31430. +
  31431. +Sun Jan 30 20:22:09 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31432. +
  31433. +    * cc-mode.el (c-mode-map):
  31434. +    remapped c-toggle-hungry-state to C-c C-d so it would
  31435. +    not interfer with standard C-c C-h key prefix help mapping
  31436. +
  31437. +Fri Jan 28 22:16:29 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31438. +
  31439. +    * cc-mode.el (c-switch-label-key):
  31440. +    fixed what can occur between the `case' keyword
  31441. +    and the colon.  Its any amount of whitespace, followed by a single,
  31442. +    non-whitespace character, followed by any number of other characters.
  31443. +
  31444. +Thu Jan 27 21:15:57 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31445. +
  31446. +    * cc-mode.el (c-fill-paragraph):
  31447. +    much better for C++ style comments. 1. does not
  31448. +    munge up font-lock regions by inserting/deleting the intended
  31449. +    fill-prefix. 2. does not assume that leading whitespace before // is
  31450. +    spaces, *but* fill-prefix must be consistent for every line in the
  31451. +    region.
  31452. +
  31453. +    * cc-mode.el (c-mode-menu): moved this higher up in file
  31454. +
  31455. +    * cc-mode.el (c-end-of-statement): simple paren mismatch in call to
  31456. +    c-beginning-of-statement
  31457. +
  31458. +    * cc-mode.el (c-guess-basic-semantics):
  31459. +    CASE 2, skip over any preceding blank lines
  31460. +    that can occur before the comment. This fixes comment indentation for
  31461. +    the second and following paragraphs in a multi-paragraph C block
  31462. +    comment region with no leading stars.
  31463. +    
  31464. +    (c-lineup-C-comment): don't assume relpos is at the beginning of the
  31465. +    line (even though it usually is).
  31466. +
  31467. +    * cc-mode.el (c-switch-label-key):
  31468. +    simplify description of what can follow a 'case' tag
  31469. +
  31470. +    * cc-mode.el: Use copy-alist instead of c-copy-sequence
  31471. +
  31472. +    * cc-mode.el (c-common-init):
  31473. +    fix the way c-mode-menu is added to the Lucid menubar
  31474. +    so existing menubars aren't clobbered
  31475. +
  31476. +    * cc-mode.el (c-copy-sequence):
  31477. +    workaround for FSF 19.22 bug in copy-sequence
  31478. +
  31479. +Wed Jan 26 22:38:20 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31480. +
  31481. +    * cc-mode.el (c-lineup-comment): renamed from c-indent-for-comment
  31482. +    
  31483. +    (c-lineup-comment): call c-comment-indent when a comment-only line's
  31484. +    indentation is at or to the right of comment-column.
  31485. +    
  31486. +    (c-guess-basic-semantics): when a comment-only line's indentation is
  31487. +    at or to the right of comment-column, only 'comment-intro is on the
  31488. +    semantics list since the comment does not indent relative to a
  31489. +    non-comment line would get indented.
  31490. +
  31491. +    * cc-mode.el (c-lineup-arglist):
  31492. +    now correctly handles arglist-close langelems
  31493. +    (i.e. closing parens in an arglist)
  31494. +
  31495. +    * cc-mode.el (c-offsets-alist-default):
  31496. +    new constant containing unchanging default
  31497. +    settings for langelems
  31498. +    
  31499. +    (c-offsets-alist): value is set as a distinct copy of
  31500. +    c-offsets-alist-default.
  31501. +    
  31502. +    (c-set-style): if 'c-offsets-alist is found in style, first reset the
  31503. +    value of this variable to c-offses-alist-default, then change only
  31504. +    those langelems that differ.
  31505. +
  31506. +    * cc-mode.el (c-style-alist):
  31507. +    changed defconst to defvar. removed comments from
  31508. +    c-mode merge
  31509. +
  31510. +    * cc-mode.el (c-indent-region): minor format change
  31511. +
  31512. +    * cc-mode.el (c-indent-region):
  31513. +    merged in RMS's latest c-indent-region. Added a
  31514. +    skip of blank lines before the current line is indented. Recalculate
  31515. +    beginning-of-defun lim inside of top-level while loop so that
  31516. +    back-parsing is further restricted properly, speeding indentation
  31517. +    calculation.
  31518. +
  31519. +Tue Jan 25 18:01:01 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31520. +
  31521. +    * cc-mode.el (c-fill-paragraph): small fix to RMS's paren level typo
  31522. +
  31523. +    * cc-mode.el (c-fill-paragraph):
  31524. +    fixed (hopefully) obvious parenthesis level typo
  31525. +
  31526. +    * cc-mode.el (c-fill-paragraph): added RMS's new C++ aware version
  31527. +    
  31528. +    (c-mode-map): put back the binding of M-q to c-fill-paragraph
  31529. +
  31530. +Mon Jan 24 22:52:53 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31531. +
  31532. +    * cc-mode.el (c-update-modeline): typo: use c-hungry-delete-key
  31533. +
  31534. +    * cc-mode.el (c-auto-hungry-string): minor-mode-alist variable
  31535. +    
  31536. +    (c-common-init): auto-hungry designation string happens on
  31537. +    minor-mode-alist now
  31538. +    
  31539. +    (c-update-modeline): sets the c-auto-hungry-string
  31540. +
  31541. +    * cc-mode.el (c-electric-semi&comma):
  31542. +    only re-indent line when c-auto-newline is non-nil
  31543. +
  31544. +    * cc-mode.el (c-mode-menu):
  31545. +    new Lucid menu variable for popup and menubar
  31546. +    
  31547. +    (c-popup-menu): command for popping up a menu in Lemacs
  31548. +    
  31549. +    (c-mode-map): FSF 19's menu initialization stuff is moved to here. Add
  31550. +    binding for Lemacs to put c-popup-menu on button 3.
  31551. +    
  31552. +    (c-common-init): put c-mode-menu on buffer-local menubar for Lucid
  31553. +
  31554. +Fri Jan 21 22:36:03 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31555. +
  31556. +    * cc-mode.el:
  31557. +    (c-up-block) (c-down-block): removed.  backward-up-list and down-list
  31558. +    do the job already
  31559. +
  31560. +    * cc-mode.el: (cc-mode.el) comment improvements
  31561. +    
  31562. +    (c-mode-map): a few merges from lemacs, but commented out for now.
  31563. +    
  31564. +    (c-insert-brackets) (c-insert-braces): taken from lemacs, but
  31565. +    commented out for now
  31566. +    
  31567. +    (cc-mode.el): menus added from FSF emacs.  Still need menus for
  31568. +    lemacs.
  31569. +
  31570. +Fri Jan 14 18:59:57 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31571. +
  31572. +    * cc-mode.el (cc-mode.el): fixed typo on make-obsolete-variable
  31573. +
  31574. +    * cc-mode.el (cc-mode.el): added all make-variable-obsolete calls
  31575. +
  31576. +Thu Jan 13 23:25:57 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31577. +
  31578. +    * cc-mode.el (c-guess-basic-semantics):
  31579. +    CASE 8A substatement. relpos is boi of
  31580. +    placeholder
  31581. +
  31582. +    * cc-mode.el (c-beginning-of-statement-1):
  31583. +    skip back over syntactic ws before
  31584. +    checking bobp in while condition
  31585. +
  31586. +Wed Jan 12 14:24:11 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31587. +
  31588. +    * cc-mode.el (cc-mode.el): only v19 has the make-obsolete calls
  31589. +
  31590. +    * cc-mode.el (c-guess-basic-semantics):
  31591. +    CASE 8B.3 now returns a try-block-open, but
  31592. +    exceptions aren't yet fully supported.
  31593. +
  31594. +    * cc-mode.el (c-beginning-of-statement):
  31595. +    when in a comment, or looking at the
  31596. +    beginning of a comment, only call forward-sentence if not called
  31597. +    interactively.  Thus programmatically, this function always goes back
  31598. +    to the real beginning-of-statement.
  31599. +
  31600. +    * cc-mode.el (cc-mode.el): changes to comments at top of file
  31601. +
  31602. +    * cc-mode.el:
  31603. +    (c-common-init) (c-style-name) (c-set-style): removed c-style-name,
  31604. +    and no longer put style name on minor mode list
  31605. +
  31606. +    * cc-mode.el:
  31607. +    (c-set-style) (c-style-alist): vastly verbosified docstrings
  31608. +
  31609. +Tue Jan 11 23:50:45 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31610. +
  31611. +    * cc-mode.el (c-offsets-alist): vastly verbosified docstring.
  31612. +    
  31613. +    (cc-mode.el): LANGELEM in docstrings are changed to "syntactic element
  31614. +    symbols" for clarity (?!)
  31615. +
  31616. +    * cc-mode.el: (c-electric-colon) (c-offsets-alist) (c-macroize-region)
  31617. +    (c-block-comments-indent-p) (c-untame-characters)
  31618. +    (c-toggle-auto-state) (c-toggle-hungry-state) (c-macroize-region):
  31619. +    minor docstring mods
  31620. +
  31621. +    * cc-mode.el (c-electric-colon): minor docstring mod
  31622. +    
  31623. +    (c-submit-bug-report): removed c-auto-hungry-initial-state from
  31624. +    reported var list
  31625. +
  31626. +    * cc-mode.el (c-offsets-alist):
  31627. +    improve the docstrings for brace-list-* langelems
  31628. +
  31629. +    * cc-mode.el (c-auto-hungry-initial-state):
  31630. +    obsolete variable, use c-auto-newline
  31631. +    and c-hungry-delete-key variables instead
  31632. +    
  31633. +    (c-mode) (c++-mode): run-hooks is now the last thing
  31634. +    
  31635. +    (c-set-auto-hungry-state) (c-make-region-active): removed
  31636. +    
  31637. +    (c-keep-region-active): is now a defun
  31638. +    
  31639. +    (c-update-modeline) (c-calculate-state): added
  31640. +    
  31641. +    (c-toggle-auto-state) (c-toggle-hungry-state)
  31642. +    (c-toggle-auto-hungry-state): simplified vastly. also, docstrings now
  31643. +    explain what the features do.
  31644. +
  31645. +    * cc-mode.el (cc-mode.el):
  31646. +    added an fset of c++-beginning-of-defun for lemacs 19.9
  31647. +    lossage
  31648. +
  31649. +    * cc-mode.el (c-cleanup-list):
  31650. +    improved docstring, when do clean ups take place?
  31651. +
  31652. +    * cc-mode.el (c-cleanup-list): minor docstring typo fix
  31653. +
  31654. +    * cc-mode.el (cc-mode.el): changed FSFmacs to FSF Emacs
  31655. +
  31656. +    * cc-mode.el: added my name to 1993 and 1994 copyrights
  31657. +
  31658. +Mon Jan 10 22:10:11 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31659. +
  31660. +    * cc-mode.el (c-set-offset):
  31661. +    conversion of offset to a number in the interactive
  31662. +    list glom section was missing negative numbers due to the leading
  31663. +    minus sign
  31664. +
  31665. +    * cc-mode.el (c-beginning-of-statement-1):
  31666. +    on error, skip backwards over +!~ in
  31667. +    addition to other chars skipped
  31668. +
  31669. +Sat Jan  8 03:20:49 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31670. +
  31671. +    * cc-mode.el (c-electric-pound):
  31672. +    fixed after-functionality positioning when point
  31673. +    is at bolp before # is installed
  31674. +
  31675. +    * cc-mode.el (c-guess-basic-semantics):
  31676. +    CASE 13, inline-close relpos should be boi
  31677. +    of the beginning-of-statement relpos
  31678. +
  31679. +    * cc-mode.el (c-beginning-of-statement-1):
  31680. +     only do the skip-chars-backwards in the
  31681. +    failure of the condition-case statement.  also, add the `-' character
  31682. +    to the list of skippage
  31683. +
  31684. +Fri Jan  7 23:27:20 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31685. +
  31686. +    * cc-mode.el (c-beginning-of-statement-1):
  31687. +    do not let backward scanning stop inside
  31688. +    a literal.  use c-in-literal to stop this, which really catches only
  31689. +    preprocs
  31690. +
  31691. +    * cc-mode.el (c-guess-basic-semantics):
  31692. +    CASE 13, block-close relpos should be boi
  31693. +    of relpos to catch "} else {" constructs
  31694. +
  31695. +    * cc-mode.el: (c-forward-conditional) (c-indent-region)
  31696. +    (c-beginning-of-inheritance-list) (c-backward-to-start-of-do)
  31697. +    (c-backward-to-start-of-if): removed unused let-bound variables as per
  31698. +    output of byte compiler
  31699. +
  31700. +    * cc-mode.el: better messages about the necessary makunbounds
  31701. +
  31702. +Thu Jan  6 18:52:51 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31703. +
  31704. +    * cc-mode.el (c-beginning-of-statement-1): recognize "else if" clauses
  31705. +    
  31706. +    (c-guess-basic-semantics): CASE 8A recognizes "else if" clauses
  31707. +
  31708. +Mon Jan  3 23:01:58 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31709. +
  31710. +    * cc-mode.el: upped the copyright notice date
  31711. +
  31712. +    * cc-mode.el (c-beginning-of-statement-1):
  31713. +    before calculating last-begin, skip over
  31714. +    any bogus characters like *&:. for the following situations:
  31715. +    
  31716. +        if(::foo(),
  31717. +        if(.0123,
  31718. +        if(&blatz,
  31719. +        if(*bar,
  31720. +
  31721. +    * cc-mode.el (c-guess-basic-semantics):
  31722. +    CASE 8A.  do and else clauses aren't
  31723. +    followed by a paren list, so we should only skip forward over 1 sexp
  31724. +    in those cases.
  31725. +
  31726. +Wed Dec 29 18:06:12 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  31727. +
  31728. +    * cc-mode.el (c-lineup-multi-inher):
  31729. +    skip syntactic ws if there is only a comment
  31730. +    on the end of the line containing the opening colon
  31731. +
  31732. +    * cc-mode.el (c-guess-basic-semantics): CASE 5C, don't check for
  31733. +    c-conditional-statement, since only "for" can have multiple
  31734. +    substatements
  31735. +
  31736. +    * cc-mode.el (c-guess-basic-semantics):
  31737. +    CASE 8: added colon to list of characters
  31738. +    that don't continue a statement, all other cases will be caught later
  31739. +    on (I hope).
  31740. +
  31741. +    * cc-mode.el (c-guess-basic-semantics):
  31742. +    rewrote and re-arranged CASE 5 subcases to
  31743. +    correctly identifiy for-list substatements, etc.  looks like
  31744. +    paren-lists now work pretty well.
  31745. +
  31746. +Tue Dec 28 16:36:06 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  31747. +
  31748. +    * cc-mode.el (c-guess-basic-semantics):
  31749. +    fixed CASE 5C to use new semantics for
  31750. +    c-beginning-of-statement.
  31751. +
  31752. +    * cc-mode.el (c-beginning-of-statement-1):
  31753. +    make sure searching stops correctly at
  31754. +    conditional statements (if/while,...etc) so that substatements are
  31755. +    properly recognized
  31756. +
  31757. +    * cc-mode.el (c-beginning-of-statement):
  31758. +    make sure we're left at or after lim
  31759. +
  31760. +    * cc-mode.el: (c-electric-brace) (c-electric-slash) (c-electric-star)
  31761. +    (c-electric-semi&comma) (c-electric-colon): let-bind
  31762. +    c-echo-semantic-information-p to nil to shut up information printing
  31763. +    in inappropriate places
  31764. +
  31765. +    * cc-mode.el (c-guess-basic-semantics):
  31766. +    fixes to CASE 8 for new semantics of
  31767. +    c-beginning-of-statement.  Added a test of placeholder !=
  31768. +    containing-sexp in top-level test.  CASE 8D, progn => save-excursion
  31769. +    so correct statement start can be found
  31770. +
  31771. +    * cc-mode.el:
  31772. +    (c-beginning-of-statement) (c-end-of-statement): minor clean up.
  31773. +    removed my old c-beginning-of-statement -- we'll go with FSF's and fix
  31774. +    it as need bee
  31775. +
  31776. +Mon Dec 27 23:25:17 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  31777. +
  31778. +    * cc-mode.el:
  31779. +    (c-beginning-of-statement) (c-end-of-statement): add another optional
  31780. +    argument, lim
  31781. +    
  31782. +    (c-guess-basic-semantics): corrected to use new arg list for the above
  31783. +
  31784. +    * cc-mode.el:
  31785. +    (c-beginning-of-statement) (c-end-of-statement): check for argument ==
  31786. +    nil (optional arg not supplied)
  31787. +
  31788. +    * cc-mode.el:
  31789. +    (c-beginning-of-statement) (c-end-of-statement): make arg optional
  31790. +
  31791. +    * cc-mode.el (c-beginning-of-statement, et al):
  31792. +    try using BOCM's version to see if
  31793. +    it works any better
  31794. +
  31795. +    * cc-mode.el (c-set-style): put a space in front of c-style name
  31796. +    
  31797. +    (c-common-init): only hack on c-style-name once!
  31798. +
  31799. +    * cc-mode.el: provide cc-mode, not c-mode
  31800. +
  31801. +    * cc-mode.el (c-style-name): new variable, buffer local
  31802. +    
  31803. +    (c-common-init): hack on c-style-name to the minor-mode alist
  31804. +    
  31805. +    (c-set-style): set c-style-name variable for minor-mode
  31806. +
  31807. +    * cc-mode.el (c-conditional-key): added "switch"
  31808. +    
  31809. +    (c-guess-basic-semantics): renumbered CASE 8 subcases, no substantive
  31810. +    changes.
  31811. +    
  31812. +    (c-guess-basic-semantics): added dummy CASE 8B.3 to generate an error.
  31813. +    I don't know what constructs fall through this case.
  31814. +
  31815. +    * cc-mode.el (c-symbol-key):
  31816. +    put this back in and fixed all the other -key's to use it
  31817. +
  31818. +    * cc-mode.el (c-set-auto-hungry-state):
  31819. +    small typo in check for force-mode-line-update
  31820. +
  31821. +    * cc-mode.el: use force-mode-line-update where appropriate
  31822. +
  31823. +    * cc-mode.el: added autoload directives
  31824. +
  31825. +Wed Dec 22 20:52:32 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  31826. +
  31827. +    * cc-mode.el (c-inside-bracelist-p):
  31828. +    fixed a bug when no spaces were between the =
  31829. +    char and open brace in an aggregate list
  31830. +
  31831. +    * cc-mode.el (c-switch-label-key): fixed to recognize negative numbers
  31832. +
  31833. +    * cc-mode.el:
  31834. +    (c-forward-into-nomenclature) (c-backward-into-nomenclature): new
  31835. +    commands, but as yet unbound
  31836. +
  31837. +    * cc-mode.el (c-guess-basic-semantics):
  31838. +    CASE 7C: look for block-open modifier
  31839. +
  31840. +Tue Dec 21 22:55:21 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  31841. +
  31842. +    * cc-mode.el (c-guess-basic-semantics):
  31843. +    CASE 7 improved but nested brace-lists are
  31844. +    still not perfect.  Do I need to add another langelem??? blech.
  31845. +
  31846. +    * cc-mode.el (c-inside-bracelist-p):
  31847. +    new function to calculate whether we're inside
  31848. +    a brace list or not
  31849. +    
  31850. +    (c-guess-basic-semantics): use c-inside-bracelist-p where appropriate
  31851. +
  31852. +    * cc-mode.el (c-guess-basic-semantics):
  31853. +    CASE 7B's (brace-list-close) relpos is not
  31854. +    boi of bo-stmt, instead its boi of containing-sexp
  31855. +
  31856. +    * cc-mode.el (c-offsets-alist):
  31857. +    added brace-list-close, brace-list-intro,
  31858. +    brace-list-entry
  31859. +    
  31860. +    (c-guess-basic-semantics): added logic to recognize brace-list-open
  31861. +    new langelems
  31862. +
  31863. +    * cc-mode.el (c-hanging-braces-alist):
  31864. +    docstring addition: brace-list-open
  31865. +    
  31866. +    (c-offsets-alist): added brace-list-open
  31867. +    
  31868. +    (c-electric-brace): added logic to hang brace-list-open's
  31869. +    
  31870. +    (c-guess-basic-semantics): added logic to recognize brace-list-open's
  31871. +
  31872. +    * cc-mode.el (c-mode-map): removed binding to undefined c-match-paren
  31873. +
  31874. +    * cc-mode.el (c-semantics): new variable
  31875. +    
  31876. +    (c-indent-via-language-element): use globally advertised c-semantics
  31877. +    variable now.
  31878. +    
  31879. +    (c-offsets-alist): better docstring, describes c-semantics
  31880. +
  31881. +    * cc-mode.el (c-adaptive-block-open):
  31882. +    new function, but block-open doesn't use it
  31883. +    by default yet
  31884. +    
  31885. +    (c-guess-basic-semantics): moved M2 (block-open) test into body of
  31886. +    defun instead of at the end -- to many special case tests
  31887. +
  31888. +Mon Dec 20 17:55:38 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  31889. +
  31890. +    * cc-mode.el (c-indent-command):
  31891. +    guarantee that c-tab-always-indent == nil has the
  31892. +    same semantics as in BOCM
  31893. +
  31894. +    * cc-mode.el (cc-mode.el): pulled in bocm's beginning-of-statement,
  31895. +    end-of-statement and related defuns, but I still need to make a pass
  31896. +    through them.
  31897. +    
  31898. +    (c-up-conditional) (c-backward-conditional) (c-forward-conditional):
  31899. +    yanked in verbatim from c-mode.el
  31900. +    
  31901. +    (c-backslash-region): fset from c-macroize-region.  also, we're
  31902. +    leaving c-backslash-column commented out. use
  31903. +    c-default-macroize-column instead.
  31904. +
  31905. +    * cc-mode.el (c-fill-paragraph): removed, use filladapt instead
  31906. +    
  31907. +    (c-comment-indent): adopted from c-mode.el, but fixed to handle C++
  31908. +    comments
  31909. +
  31910. +    * cc-mode.el (c-mode.el):
  31911. +    moved some defuns and defmacros around. no substantive changes
  31912. +
  31913. +    * cc-mode.el (c-symbol-key): obsolete, use \\s_ syntax class instead
  31914. +    
  31915. +    (c-protection-key): new defconst
  31916. +    
  31917. +    (c-case-statement-key): renamed to c-switch-label-key
  31918. +
  31919. +    * cc-mode.el (c-lineup-streamop):
  31920. +    search for stream operator, be careful of
  31921. +    singular less than, greater than symbol.
  31922. +
  31923. +Fri Dec 17 21:42:27 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  31924. +
  31925. +    * cc-mode.el:
  31926. +    fixed semantics for c-macroize-region and c-comment-region
  31927. +
  31928. +    * cc-mode.el (c-guess-basic-semantics):
  31929. +    don't put block-open on semantics list if
  31930. +    other brace open symbols are already there
  31931. +
  31932. +Thu Dec 16 20:49:34 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  31933. +
  31934. +    * cc-mode.el (c-emacs-features): minor docstring change
  31935. +
  31936. +    * cc-mode.el (c-set-offset):
  31937. +    new optional add-p arg. when non-nil, require-match on
  31938. +    completion is inhibited and new langelem symbols can be added to the
  31939. +    c-offsets-alist.
  31940. +    
  31941. +    (c-guess-basic-semantics): CASE 7C has been extended to properly
  31942. +    recognize conditional's substatements.  CASE 7D now handles continued
  31943. +    statements.  CASE 7A now recognizes only func local class opening
  31944. +    braces, which means 7C + M2 will catch substatement block-opens.
  31945. +    
  31946. +    (c-offsets-alist): added substatement langelem
  31947. +
  31948. +    * cc-mode.el (c-strict-semantics-p):
  31949. +    default value to nil for debugging purposes
  31950. +    
  31951. +    (c-guess-basic-semantics): block-open langelem is now a relpos-less
  31952. +    langelem because it is really a modifier on the basic langelem of the
  31953. +    line.  Specifically: Case M2 added; CASE 7A.2 now places just a
  31954. +    statement-cont langelem on semantics; CASE 13.B is completely removed.
  31955. +    
  31956. +    (c-offsets-alist): block-open default offset is now 0.
  31957. +
  31958. +Mon Dec 13 15:29:26 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  31959. +
  31960. +    * cc-mode.el (c-guess-basic-semantics):
  31961. +    now it does the the test for c++-mode to
  31962. +    save a potential funcall in c-mode.
  31963. +    
  31964. +    (c-search-uplist-for-class): fixed bug where c-in-literal test was
  31965. +    testing end-point of parse-partial-sexp, not the classkey search begin
  31966. +    point.
  31967. +
  31968. +Thu Dec  9 19:02:25 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  31969. +
  31970. +    * cc-mode.el (c++-mode-map): fixed FSF call to set-keymap-parent
  31971. +
  31972. +    * cc-mode.el (c++-mode-map):
  31973. +    JWZ contributed a better way to share keymaps for v18
  31974. +    using nconc
  31975. +    
  31976. +    (c-populate-map): obsolete, move all define-keys into c-mode-map if
  31977. +    statement
  31978. +
  31979. +    * cc-mode.el (c-emacs-features):
  31980. +    for Emacs 19's, add a flavor member to distinguish
  31981. +    between FSF19 and Lucid19.
  31982. +    
  31983. +    (c++-mode-map): for Emacs 19's, inherit c++-mode-map from c-mode-map.
  31984. +    Handle FSF/Lucid properly and handle GNU18 the hard way.
  31985. +
  31986. +Wed Dec  8 22:43:02 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  31987. +
  31988. +    * cc-mode.el (c-down-block):
  31989. +    changed call of c-beginning-of-block to c-up-block
  31990. +
  31991. +    * cc-mode.el:
  31992. +    (c-populate-map) (c-populate-syntax-table): new funcs to consolatate
  31993. +    setting these structures
  31994. +    
  31995. +    (c-mode-map) (c++-mode-map): get as close as we can with BOCM's
  31996. +    mappings, but there are still some inconsistencies I need to clean up
  31997. +
  31998. +Tue Dec  7 23:52:29 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  31999. +
  32000. +    * cc-mode.el (c-set-style): added functionality
  32001. +    
  32002. +    (c-macro-expand): added autoload
  32003. +    
  32004. +    (documentation and docstrings): updated many places
  32005. +    
  32006. +    (c-set-offset): better interactive spec
  32007. +    
  32008. +    (c-fill-paragraph): stolen from c-mode, but not looked at yet
  32009. +    
  32010. +    (cc-mode.el): added fset compatibility with c-mode
  32011. +    
  32012. +    NOTE: THERE ARE STILL SOME FUNCTIONS I HAVEN'T MOVED HERE YET.
  32013. +
  32014. +Mon Dec  6 15:46:30 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32015. +
  32016. +    * cc-mode.el (c-guess-basic-semantics):
  32017. +    CASE 5D is only a statement-cont if the
  32018. +    beginning-of-statement is not bound by continued-sexp
  32019. +
  32020. +    * cc-mode.el: fixed a coupble of cc-emacs-features to c-emacs-features
  32021. +
  32022. +Fri Dec  3 23:05:29 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32023. +
  32024. +    * cc-mode.el (cc-mode.el):
  32025. +    changed all symbols from cc-<thing> to c-<thing>, except
  32026. +    where both c-<thing> and c++-<thing> are needed:
  32027. +    c++-mode-abbrev-table, c++-mode-map, c++-mode-syntax-table,
  32028. +    
  32029. +    (c-mode-common-hook): new common hook name
  32030. +    
  32031. +    (c-mode-map): don't add c-scope-operator.
  32032. +
  32033. +Thu Dec  2 00:59:34 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32034. +
  32035. +    * cc-mode.el (cc-guess-basic-semantics):
  32036. +    CASE 7B, its possible that the line that
  32037. +    placeholder points to does not contain the first streamop.  This can
  32038. +    be the case if the streamop line follows an `if' clause.
  32039. +
  32040. +Wed Dec  1 23:35:44 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32041. +
  32042. +    * cc-mode.el (cc-macroize-region):
  32043. +    simplified so begin/end semantics are identical
  32044. +    to cc-comment-region.
  32045. +    
  32046. +    (cc-backslashify-current-line): do not (forward-char -1) if eol ==
  32047. +    bol.  Also, must let-bind kill-lines-magic to nil so that blank line,
  32048. +    with only a \ on it will not consume the newline character
  32049. +
  32050. +Mon Nov 29 22:50:30 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32051. +
  32052. +    * cc-mode.el (cc-indent-region):
  32053. +    only generate an error on non-open paren/brace
  32054. +    when shutup-p is nil
  32055. +
  32056. +    * cc-mode.el:
  32057. +    (cc-uncomment-region) (cc-comment-region): combined into 1 function,
  32058. +    bound to C-c C-c and behavior analogous to cc-macroize-region.
  32059. +    
  32060. +    (cc-up-block) (cc-down-block): new commands, bound to C-c C-u and C-c
  32061. +    C-d respectively.
  32062. +
  32063. +    * cc-mode.el (cc-indent-exp):
  32064. +    don't indent line with cc-indent-via-language-element
  32065. +    if line is blank
  32066. +
  32067. +    * cc-mode.el (cc-electric-brace):
  32068. +    use (boundp 'blink-paren-function) as emacs
  32069. +    version test, not cc-emacs-features.  The latter breaks on Emacs18's
  32070. +    with the syntax patch
  32071. +
  32072. +    * cc-mode.el (cc-guess-basic-semantics):
  32073. +    fixed the comment-intro regexp to ignore
  32074. +    newlines. (spaces and tabs only)
  32075. +
  32076. +Fri Nov 26 19:01:34 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32077. +
  32078. +    * cc-mode.el (cc-search-uplist-for-classkey):
  32079. +    fixed two small bugs. first, the cdr
  32080. +    of foundp should be cc-point boi to catch any template prefix on the
  32081. +    class key (remember we're searching backwards now -- maybe we should
  32082. +    search forward, eh?).  Also, we have to set donep to (not foundp) so
  32083. +    that the search ends when we haven't found any classkey
  32084. +
  32085. +    * cc-mode.el (cc-guess-basic-semantics):
  32086. +    CASE 13.D make sure we're not looking at a
  32087. +    globally scoped function call
  32088. +
  32089. +    * cc-mode.el (cc-guess-basic-semantics):
  32090. +    arglist-close should relpos boi of
  32091. +    containing-sexp
  32092. +    
  32093. +    (cc-change-semantic-symbol-offset): fixed setqcdr typo
  32094. +    
  32095. +    (cc-offsets-alist): arglist-close default is now +
  32096. +
  32097. +    * cc-mode.el (cc-beginning-of-statement):
  32098. +    fix problem when crossing a paren level
  32099. +    (i.e. the cc-safe forward-sexp call fails).  just move back a space
  32100. +    and keep going.
  32101. +    
  32102. +    (cc-guess-basic-semantics): expand CASE 5C test and CASE 5E relpos
  32103. +    calculation
  32104. +
  32105. +Wed Nov 24 22:54:31 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32106. +
  32107. +    * cc-mode.el (cc-safe):
  32108. +    added this macro back in -- it seems to be useful
  32109. +    
  32110. +    (cc-beginning-of-statement): really improved this a lot. we only go
  32111. +    back a sexp if we aren't already at the beginning of indentation.
  32112. +    This is now a more generally useful function since it seems to do the
  32113. +    right thing under all circumstances.
  32114. +    
  32115. +    (cc-guess-basic-semantics): lots of changes to use the new cc-b-o-s
  32116. +    function.  All known indentations after hanging braces are now fixed.
  32117. +    This includes case 4D.5, CASE 7, CASE 12, and CASE 13.F.  Are there
  32118. +    others?
  32119. +
  32120. +    * cc-mode.el (cc-offsets-alist): added knr-argdecl offset
  32121. +    
  32122. +    (cc-change-semantic-symbol-offset): allow addition of new langelem
  32123. +    symbols with universal arg
  32124. +    
  32125. +    (cc-guess-basic-semantics): added recognition of subsequent
  32126. +    knr-argdecl langelems in cc-c-mode only
  32127. +
  32128. +    * cc-mode.el (cc-electric-brace):
  32129. +    in brace-else-brace cleanup, I forgot to insert
  32130. +    the new "} else {" string after deleting the old string!
  32131. +
  32132. +    * cc-mode.el:
  32133. +    (cc-back-block) (cc-safe-uplist) (cc-safe-downlist): obsolete
  32134. +    
  32135. +    (cc-search-uplist-for-classkey): completely rewritten for speed. it
  32136. +    now uses re-search-backwards limited to two bod's back.  Orders of
  32137. +    magnitude faster when operating towards the end of a large file.  In
  32138. +    fact exec time is not buffer size dependent anymore (but like
  32139. +    everything else, it is bod dependent of course).
  32140. +    
  32141. +    (cc-guess-basic-semantics): fixed cases 4, 7, and 12 to work with the
  32142. +    new cc-search-uplist-for-classkey
  32143. +
  32144. +Tue Nov 23 22:41:41 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32145. +
  32146. +    * cc-mode.el (cc-guess-basic-semantics):
  32147. +    fixed case 4F. if a class-close is found,
  32148. +    it should indent relative to the class declaration, not the opening
  32149. +    brace (i.e. the cdr of inclass-p, not the car)
  32150. +
  32151. +    * cc-mode.el (cc-guess-basic-semantics):
  32152. +    fix CASE 12's determination of the type of
  32153. +    langelem that a brace closes.
  32154. +
  32155. +    * cc-mode.el (cc-c++-mode-syntax-table):
  32156. +    switched A/B comment styles as per Paul
  32157. +    Smith's FSFmacs patch
  32158. +    
  32159. +    (cc-1bit-il): switched A/B comment styles as per Paul Smith's FSFmacs
  32160. +    patch
  32161. +
  32162. +    * cc-mode.el (cc-search-uplist-for-classkey):
  32163. +    only search when in a C++ buffer.  C
  32164. +    buffers have no enclosing class!
  32165. +
  32166. +    * cc-mode.el (cc-electric-pound):
  32167. +    oops, forgot to prefix-numeric-value arg on the
  32168. +    self-insert-command
  32169. +
  32170. +    * cc-mode.el (cc-mark-function):
  32171. +    must funcall the second call to push-mark since
  32172. +    v18 only accepts 2 arguments, not the 3 of v19.
  32173. +    
  32174. +    (cc-electric-brace): fix the blink-paren-function/-hook mismatch for
  32175. +    v18 vs. v19.
  32176. +    
  32177. +    (cc-point): added the (,@ nil) form as a workaround for v18's
  32178. +    backquote bug.  Doesn't seem to hurt us for v19 so I left it in for
  32179. +    everyone.
  32180. +
  32181. +Mon Nov 22 23:29:19 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32182. +
  32183. +    * cc-mode.el (cc-guess-basic-semantics):
  32184. +    CASE 12, always return boi of the line
  32185. +    that containing-sexp is on, not just for block-close langelem
  32186. +
  32187. +    * cc-mode.el (cc-search-uplist-for-classkey):
  32188. +    make backward searching slightly more
  32189. +    efficient by stopping when char under search-start is a close brace
  32190. +
  32191. +    * cc-mode.el (cc-label-key):
  32192. +    new constant, change all concat'd label regexps to use
  32193. +    this new constant
  32194. +    
  32195. +    (cc-guess-basic-semantics): fix case 13.D to not accidentally code a
  32196. +    statement that follows a label as a ?: construct
  32197. +
  32198. +    * cc-mode.el (cc-indent-command):
  32199. +    fixed behavior when cc-tab-always-indent was nil.
  32200. +    should now be like old behavior (CASE 1)
  32201. +
  32202. +    * cc-mode.el (cc-emacs-features): improve documentation
  32203. +
  32204. +    * cc-mode.el (cc-point):
  32205. +    retain quoted symbol semantics on argument but don't use
  32206. +    dangerous `eval' to get an eq ready symbol
  32207. +
  32208. +    * cc-mode.el (cc-indent-exp):
  32209. +    better error messages so people don't get as confused
  32210. +
  32211. +    * cc-mode.el (cc-beginning-of-statement):
  32212. +    much more robust movement across balanced
  32213. +    expressions now correctly finds the beginning of statements for very
  32214. +    complex forloops and more.  We now no longer assume that expressions
  32215. +    begin and end on a single line.
  32216. +    
  32217. +    (cc-guess-basic-semantics): CASE 5C is expanded to correctly locate
  32218. +    multi-line mathematical paren groupings.  Also, CASE 5E now returns
  32219. +    boi at the beginning-of-statement for any arglist-cont.
  32220. +
  32221. +    * cc-mode.el:
  32222. +    (cc-electric-brace) (cc-electric-slash) (cc-electric-star)
  32223. +    (cc-electric-semi&comma) (cc-electric-colon)
  32224. +    (cc-change-semantic-symbol-offset): changed docstrings to more
  32225. +    accurately describe defuns' behavior
  32226. +
  32227. +    * cc-mode.el (cc-indent-exp):
  32228. +    calculate bod before doing the forward-sexp since
  32229. +    unindented open parens in col0 lower down will mess this calculation
  32230. +    up.
  32231. +
  32232. +Sat Nov 20 21:53:29 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32233. +
  32234. +    * cc-mode.el (cc-submit-bug-report): typo on cc-hanging-colons-alist
  32235. +
  32236. +    * cc-mode.el:
  32237. +    (cc-keep-region-active) (cc-make-region-active): split this into a
  32238. +    macro (the former) and a defun (the latter).  This way we can check
  32239. +    for interactivity as expected, but still cut down on the number of bc
  32240. +    warnings.
  32241. +
  32242. +    * cc-mode.el:
  32243. +    (cc-setup-comment-indent-variable) (cc-keep-region-active): make these
  32244. +    defuns so that the .elc file won't be editor version specific. The
  32245. +    trade off is that the byte compiler will complain
  32246. +
  32247. +    * cc-mode.el (cc-lineup-C-comments):
  32248. +    limit re-search-forward to eol, not eol-1...
  32249. +    why did we do this?
  32250. +
  32251. +    * cc-mode.el:
  32252. +    (cc-electric-brace) (cc-electric-semi&comma) (cc-electric-colon):
  32253. +    re-indent the line even if cc-auto-newline is nil, just don't add any
  32254. +    newlines
  32255. +
  32256. +    * cc-mode.el (cc-offsets-alist):
  32257. +    multi-line strings should be shoved against the
  32258. +    left side margin
  32259. +
  32260. +    * cc-mode.el (cc-setup-comment-indent-variable):
  32261. +    new macro to cut down on byte
  32262. +    compiler warnings
  32263. +
  32264. +    * cc-mode.el (cc-case-statement-key):
  32265. +    should now recognize character constants as
  32266. +    arguments to case statement
  32267. +
  32268. +    * cc-mode.el (cc-keep-region-active):
  32269. +    support for FSFmacs and don't lay down calls
  32270. +    to variables that don't exist
  32271. +    
  32272. +    (cc-submit-bug-report): variable typos
  32273. +
  32274. +    * cc-mode.el:
  32275. +    fixed order of macro expansions.  defmacro's must appear before their
  32276. +    first use -- this is probably why cc-point was busted in compiled code
  32277. +
  32278. +Fri Nov 19 18:44:54 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32279. +
  32280. +    * cc-mode.el (cc-guess-basic-semantics):
  32281. +    added some minimal recognition of template
  32282. +    continuation lines.  Probably not so great.
  32283. +    
  32284. +    (cc-guess-basic-semantics): fixed top-level decl continutation lines
  32285. +    
  32286. +    (cc-guess-basic-semantics): fixed ?: constructs
  32287. +
  32288. +    * cc-mode.el:
  32289. +    (cc-c++-mode) (cc-c-mode): setq'ing of comment-start/-end must happen
  32290. +    *after* cc-common-init for those values to retain their proper settings
  32291. +    
  32292. +    (cc-indent-exp): add optional SHUTUP-P argument to suppress
  32293. +    operational messages.
  32294. +    
  32295. +    (c++-indent-exp): removed this commented out function. I think the
  32296. +    byte-compiled, simplified cc-indent-exp is fast enough!
  32297. +    
  32298. +    (cc-indent-region): stolen from c-mode and fixed.
  32299. +    
  32300. +    (cc-beginning-of-inheritance): backscanning must stop when we're
  32301. +    looking at a cc-class-key
  32302. +    
  32303. +    (cc-guess-basic-semantics): inher-intro and inher-cont should not have
  32304. +    inclass langelem added since their relpos offsets already contain any
  32305. +    inclass offset
  32306. +
  32307. +Thu Nov 18 23:06:37 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32308. +
  32309. +    * cc-mode.el (cc-change-semantic-symbol-offset): new command
  32310. +
  32311. +    * cc-mode.el (cc-guess-basic-semantics):
  32312. +    added recognition of 'block-open braces
  32313. +    following a full statement (yup they are legal)
  32314. +
  32315. +    * cc-mode.el (cc-lineup-C-comments): added to support old
  32316. +    cc-C-block-comments-indent-p behavior
  32317. +
  32318. +    * cc-mode.el:
  32319. +    removed the multi-line preprocessor stuff.  its just too much of a
  32320. +    hack right now
  32321. +
  32322. +    * cc-mode.el: some limited support for multi-line macros and such
  32323. +
  32324. +Wed Nov 17 23:29:41 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32325. +
  32326. +    * cc-mode.el:
  32327. +    fixed all byte-compiler warnings. did a pass through the comments and
  32328. +    docstrings. macro-ized a few more defuns
  32329. +
  32330. +    * cc-mode.el (cc-indent-exp):
  32331. +    a slow, but moderately useful interrim solution.
  32332. +
  32333. +    * cc-mode.el (cc-point):
  32334. +    another small fix to the macro to get byte compilation to work
  32335. +
  32336. +    * cc-mode.el (cc-point):
  32337. +    small fix to macro expansion. must eval position so that
  32338. +    'sym idiom still works
  32339. +
  32340. +    * cc-mode.el:
  32341. +    added cc-keep-region-active to all appropriate interactive defuns
  32342. +
  32343. +    * cc-mode.el (cc-point):
  32344. +    made this a macro so things should be much quicker when
  32345. +    byte compiled
  32346. +
  32347. +    * cc-mode.el (cc-electric-brace):
  32348. +    insert any after-brace newlines after all
  32349. +    cleanups have taken place
  32350. +
  32351. +    * cc-mode.el (cc-electric-colon):
  32352. +    semantic information can only be accurately
  32353. +    retrieved on the line with colon for label, case-label, and
  32354. +    access-key.  member-init-intro and inher-intro must be gathered from
  32355. +    the following line.
  32356. +
  32357. +    * cc-mode.el: (cc-electric-start) (cc-electric-slash): use
  32358. +    cc-indent-via-language-element instead of cc-indent-line
  32359. +
  32360. +Tue Nov 16 23:04:59 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32361. +
  32362. +    * cc-mode.el (c++-electric-colon): deleted
  32363. +
  32364. +    * cc-mode.el (cc-electric-brace):
  32365. +    inhibit blinking any close paren until we've done
  32366. +    all our magic, then just call blink-paren-function manually
  32367. +
  32368. +    * cc-mode.el (cc-guess-basic-semantics): CASE 4 was missing a call to
  32369. +    cc-backward-syntactic-ws which broke arglist indentations
  32370. +
  32371. +    * cc-mode.el (cc-beginning-of-statement):
  32372. +    catch multi-line function calls by going
  32373. +    backward over balanced () sexps
  32374. +
  32375. +    * cc-mode.el: had to add all the lineup functions from c++-syntax.el
  32376. +
  32377. +    * cc-mode.el: continued if/while/do/else/for statements now work again
  32378. +
  32379. +    * cc-mode.el: 1. a good shot at cc-electric-colon
  32380. +    2. added cc-scope-operator bound onto C-c C-;
  32381. +
  32382. +    * cc-mode.el:
  32383. +    everything is rewritten and tested except c++-electric-colon and
  32384. +    c++-indent-exp
  32385. +
  32386. +Thu Nov 11 21:24:06 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32387. +
  32388. +    * cc-mode.el: got rid of glaring byte-compiler reported problems.
  32389. +
  32390. +    * cc-mode.el:
  32391. +    The bulk of the rename work has been done.  The entire mode has been
  32392. +    renamed CC-Mode.  The file has been renamed cc-mode.el, and all
  32393. +    symbols have changed from c++-<thing> to cc-<thing>.  In addition, all
  32394. +    known remaining c-mode dependencies have been eliminated.
  32395. +    
  32396. +    There is still much work to be done.
  32397. +
  32398. +Tue Nov  9 22:26:06 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32399. +
  32400. +    * cc-mode.el: rough attempt at syntactic analysis. more to come
  32401. +
  32402. +Mon Nov  1 03:25:12 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32403. +
  32404. +    * cc-mode.el (c++-search-uplist-for-classkey):
  32405. +    restore point if no enclosing class
  32406. +    is found
  32407. +
  32408. +Sun Oct 31 19:14:59 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32409. +
  32410. +    * cc-mode.el:
  32411. +    (c++-narrow-out-enclosing-class) (c++-search-uplist-for-classkey): new
  32412. +    defuns
  32413. +    
  32414. +    (c++-point): added 'boe and 'eoe positions
  32415. +
  32416. +Fri Oct 29 22:42:35 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32417. +
  32418. +    * cc-mode.el:
  32419. +    totally screwed up indentation.  we're going to have to back out the
  32420. +    last few mods.  URG!
  32421. +
  32422. +    * cc-mode.el (c++-indent-exp):
  32423. +    special case of looking at ?{, should not add
  32424. +    c-indent-level since this is only for C statements wrt containing
  32425. +    block and not block opening paren
  32426. +
  32427. +    * cc-mode.el (c++-calculate-indent):
  32428. +    undid split from previous revision. now case
  32429. +    3A always returns 0.  Any additional top-level brace offset gets
  32430. +    applied in c++-indent-line and c++-indent-exp (although the later does
  32431. +    not yet work).
  32432. +
  32433. +    * cc-mode.el (c++-calculate-indent):
  32434. +    needed to split case 3A into 2 parts since
  32435. +    bobp does not get the same indent as a top-level opening paren
  32436. +
  32437. +Wed Oct 27 14:28:16 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32438. +
  32439. +    * cc-mode.el (c++-common-init):
  32440. +    don't set the auto-hungry state here since the
  32441. +    mode hook has not been run yet.
  32442. +    
  32443. +    (c++-mode) (c++-c-mode): set the auto-hungry state for the buffer
  32444. +    after the mode hook has been run
  32445. +
  32446. +Wed Oct 20 18:46:53 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32447. +
  32448. +    * cc-mode.el (c++-mode-map):
  32449. +    do NOT define C-m and C-j, so as to retain the
  32450. +    standard default settings for these keybindings
  32451. +
  32452. +Mon Oct 11 16:32:02 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32453. +
  32454. +    * cc-mode.el (c++-calculate-indent):
  32455. +    in CASE 3C, when checking for hanging member
  32456. +    init colon, but not scope operator, we didin't check for double colons
  32457. +    when looking at the preceding-char.  Now look at char before point and
  32458. +    char 2 before point.  If both are colons, we're looking at a scope
  32459. +    operator.
  32460. +
  32461. +Fri Oct  1 13:21:00 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32462. +
  32463. +    * cc-mode.el (c++-common-init):
  32464. +    changed the test for comment-indent-function to
  32465. +    checking for boundp of the variable instead of c++-emacs-features
  32466. +    since Emacs 18 with syntax patches is (8bit v19) but does not have the
  32467. +    variable bound.
  32468. +
  32469. +Wed Sep 29 21:08:29 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32470. +
  32471. +    * cc-mode.el (c++-backward-to-start-of-if):
  32472. +    better error message for else with no if
  32473. +
  32474. +    * cc-mode.el (c++-calculate-indent):
  32475. +    test case 3H, when taking the current-column,
  32476. +    must subtract out the inclass-shift so it doesn't get added twice.
  32477. +    inclass-shift is implicit in current-column.
  32478. +
  32479. +Tue Sep 28 23:11:04 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32480. +
  32481. +    * cc-mode.el (c++-mode-syntax-table): don't be as harsh on FSF
  32482. +
  32483. +    * cc-mode.el: (c++-cleanup-list) (c++-hanging-member-init-colon)
  32484. +    (c++-auto-hungry-initial-state) (c++-auto-hungry-toggle) (c++-mode):
  32485. +    use the terminology "valid" instead of "legal" to define acceptable
  32486. +    values as per RMS's conventions.
  32487. +
  32488. +    * cc-mode.el (c++-c-mode): improve the docstring re: running the hook
  32489. +
  32490. +    * cc-mode.el (c++-indent-exp):
  32491. +    use c++-cont-indent to calculate continued statement
  32492. +    indentation amount.  remove large part of hackery here so lets watch
  32493. +    and see if anything got broken, but I think c++-c-i should do the
  32494. +    trick for all constructs
  32495. +
  32496. +    * cc-mode.el (c++-indent-defun):
  32497. +    better, quicker implementation of this defun
  32498. +
  32499. +    * cc-mode.el (c++-electric-pound):
  32500. +    better implementation of previous patch
  32501. +
  32502. +    * cc-mode.el (c++-electric-pound):
  32503. +    only align pound to left column if there isn't
  32504. +    one already there.  This lets people enter ## as cpp concat command
  32505. +
  32506. +    * cc-mode.el (c++-electric-semi):
  32507. +    renamed c++-electric-semi&comma to implement },
  32508. +    and }; cleanups
  32509. +    
  32510. +    (c++-cleanup-list): added list-close-comma to allow cleanups of },
  32511. +    constructs.
  32512. +
  32513. +    * cc-mode.el: cleaned up some comments
  32514. +
  32515. +    * cc-mode.el (c++-common-init):
  32516. +    new function to provide one entry point for all
  32517. +    common initializations of the mode.
  32518. +    
  32519. +    (c++-mode) (c++-c-mode): use c++-common-init to do the common stuff,
  32520. +    then do mode specific stuff.
  32521. +
  32522. +    * cc-mode.el (c++-calculate-indent):
  32523. +    complete fix for proper indentation of base
  32524. +    classes in a multiple inheritance declaration.
  32525. +    
  32526. +    (c++-baseclass-key): new constant defining regexp for base class defs
  32527. +
  32528. +    * cc-mode.el: partial fix for multi-inher lines
  32529. +
  32530. +Mon Sep 27 19:15:51 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32531. +
  32532. +    * cc-mode.el (c++-backward-to-start-of-if):
  32533. +    give a more informative message if an
  32534. +    unbalanced if/else was found
  32535. +
  32536. +    * cc-mode.el (c++-compound-offset):
  32537. +    fixed a bug when looking at "typedef enum",
  32538. +    this wasn't registering as an enum start.
  32539. +    
  32540. +    (c++-indent-exp): fixed indentation of comma separated compound
  32541. +    statements by using the function c++-compound-offset to calculate
  32542. +    offset instead of just using the variable c-continued-statement-offset
  32543. +
  32544. +    * cc-mode.el (c++-mode):
  32545. +    compatibility with old style comment-indent-hook and new
  32546. +    style comment-indent-function
  32547. +
  32548. +    * cc-mode.el:
  32549. +    (c++-indent-line) (c++-calculate-indent): improved calculate in
  32550. +    let-body for open-paren and top-open-paren values, using car-safe and
  32551. +    cdr-safe
  32552. +    
  32553. +    (c++-indent-line): fix typo bug when looking at open brace.
  32554. +    
  32555. +    (c++-indent-line): apply TOPLEVEL c-brace-offset when brace is at top
  32556. +    level wrt class, or real top level.
  32557. +
  32558. +    * cc-mode.el (c-brace-offset): moved here from c-mode.el
  32559. +    
  32560. +    (c++-mode): for vars c-brace-offset and c++-block-close-brace-offset,
  32561. +    both can now take list values.  describe these in the mode's
  32562. +    docstring.
  32563. +    
  32564. +    (c++-indent-exp) (c++-indent-line) (c++-calculate-indent): when
  32565. +    looking at an open brace, apply c-brace-offset depending on
  32566. +    top-level-ness of the opening brace.
  32567. +
  32568. +Fri Sep 24 22:05:21 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32569. +
  32570. +    * cc-mode.el (c++-indent-exp):
  32571. +    when inside a class definition, if we are looking at
  32572. +    an open brace, we apply c-continued-brace-offset instead of just zero.
  32573. +    this allows users to indent the opening brace of an inline function
  32574. +    body.
  32575. +
  32576. +    * cc-mode.el (c++-calculate-indent):
  32577. +    when inside a class definition, if we are
  32578. +    looking at an open brace, we apply c-continued-brace-offset instead of
  32579. +    just zero.  this allows users to indent the opening brace of an inline
  32580. +    function body.
  32581. +
  32582. +    * cc-mode.el (c++-calculate-indent):
  32583. +    removed the commented out text which used to
  32584. +    test for null state.  we never hit null state from c++-parse-state
  32585. +    anymore.
  32586. +
  32587. +    * cc-mode.el (c++-emacs19-accurate-bsws):
  32588. +    new function which skips syntactic
  32589. +    whitespace w/o treating cpp macros as comments syntactically.
  32590. +    
  32591. +    (c++-emacs18-bsws): renamed from c++-backwards-syntactic-ws
  32592. +    
  32593. +    (c++-lemacs-pre19-8-bsws): renamed from c++-backwards-syntactic-ws-1
  32594. +    
  32595. +    (c++-emacs18-il): renamed from c++-in-literal
  32596. +    
  32597. +    (c++-8bit-il): renamed from c++-in-literal-8-bit
  32598. +    
  32599. +    (c++-1bit-il): renamed from c++-in-literal-1-bit
  32600. +    
  32601. +    Changed the way compatibility is fset into the function symbols
  32602. +    c++-backward-syntactic-ws and c++-in-literal.
  32603. +
  32604. +Tue Aug 10 16:44:26 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32605. +
  32606. +    * cc-mode.el: minor cosmetic comment typo
  32607. +
  32608. +Thu Jul 29 00:18:00 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32609. +
  32610. +    * cc-mode.el: consensus was to nuke c++-insert-header
  32611. +
  32612. +Mon Jul 12 20:37:27 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32613. +
  32614. +    * cc-mode.el (c++-mode.el): updated the comments at the top of the file
  32615. +
  32616. +    * cc-mode.el (c++-calculate-indent):
  32617. +    removed test for null state during initial
  32618. +    parse from beginning-of-defun to indent-point.  this is obsolete now.
  32619. +
  32620. +Fri Jul  2 22:42:03 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32621. +
  32622. +    * cc-mode.el (c++-mode-map): removed bindings to obsolete functions
  32623. +    c++-beginning-of-defun and c++-end-of-defun.
  32624. +    
  32625. +    (c++-electric-terminator) (c++-in-literal) (c++-in-literal-8-bit)
  32626. +    (c++-in-literal-1-bit) (c++-point) (c++-indent-defun): changed all
  32627. +    references of obsolete functions c++-beginning-of-defun and
  32628. +    c++-end-of-defun to beginning-of-defun and end-of-defun respectively.
  32629. +
  32630. +    * cc-mode.el:
  32631. +    (c++-match-header-strongly) (c++-defun-header-strong-struct-equivs)
  32632. +    (c++-defun-header-strong) (c++-defun-header-weak)
  32633. +    (c++-beginning-of-defun) (c++-end-of-defun): removed as obsolete.
  32634. +    there are better and cheaper ways of accomplishing the same
  32635. +    functionality.
  32636. +
  32637. +    * cc-mode.el (c++-electric-brace):
  32638. +    I missed a few calls to c++-indent-line.  Added
  32639. +    bod argument to remaining few.
  32640. +
  32641. +    * cc-mode.el (c++-calculate-indent):
  32642. +    removed logic dealing with (null state) and
  32643. +    placed an error call there in anticipation of removal of header strong
  32644. +    matching stuff.  I want to be sure there's no way to get to this code
  32645. +    
  32646. +    (c++-electric-brace): added bod argument to calls to c++-indent-line
  32647. +    so the correct bod is found, not the newly created one with the just
  32648. +    inserted open brace.
  32649. +
  32650. +    * cc-mode.el:
  32651. +    (c++-indent-command) (c++-tab-always-indent) (c++-hanging-braces)
  32652. +    (c++-mode): changed the not-nil-or-t language to read "other than nil
  32653. +    or t"
  32654. +
  32655. +Thu Jul  1 17:40:53 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32656. +
  32657. +    * cc-mode.el (c++-backward-to-start-of-if):
  32658. +    changed c++-backward-sexp call to
  32659. +    backward-sexp now that parse-sexp-ignore-comments is handled correctly.
  32660. +
  32661. +Wed Jun 30 17:03:00 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32662. +
  32663. +    * cc-mode.el:
  32664. +    (c++-forward-sexp) (c++-backward-sexp): removed because these are obsoleted by the correct implementation for setting parse-sexp-ignore-comments. (c++-mode): improved idiom for setting up local vars
  32665. +
  32666. +Mon Jun 28 15:47:13 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32667. +
  32668. +    * cc-mode.el:
  32669. +    (c++-cleanup-list) (c++-mode) (c++-fast-backward-syntactic-ws-1)
  32670. +    (c++-calculate-indent) (c++-in-literal) (c++-in-literal-8-bit)
  32671. +    (c++-in-literal-1-bit) (c++-at-top-level-p)
  32672. +    (c++-backward-to-start-of-do) (c++-backward-to-start-of-if)
  32673. +    (c++-uncomment-region): install RMS's suggested doc string fixes based
  32674. +    on last public release.
  32675. +
  32676. +Wed Jun 23 13:58:52 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32677. +
  32678. +    * cc-mode.el:
  32679. +    hacking on syntax entry must be mode specific in -ws functions.  ie in
  32680. +    c++-c-mode, hack c++-c-mode-syntax-table and for c++-mode hack only
  32681. +    c++-mode-syntax-table.
  32682. +
  32683. +Mon Jun 21 21:40:15 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32684. +
  32685. +    * cc-mode.el:
  32686. +    should not skip-chars-backward in ws-2, let forward-comment handle that
  32687. +
  32688. +Fri Jun 18 21:31:24 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32689. +
  32690. +    * cc-mode.el:
  32691. +    another refinement to addition offset given to open brace lines in
  32692. +    c++-indent-exp.  Check for not at top level wrt class before adding
  32693. +    c-indent-level.
  32694. +
  32695. +    * cc-mode.el: another fix to c++-indent-exp for member init lists
  32696. +
  32697. +    * cc-mode.el:
  32698. +    fixed c++-indent-exp when comments follow a continued statement
  32699. +
  32700. +    * cc-mode.el: a fix to c++-indent-exp where c-brace-offset is < 0
  32701. +
  32702. +    * cc-mode.el:
  32703. +    fixed some comment spelling errors which were fixed (but *not*
  32704. +    reported!) by FSF
  32705. +
  32706. +    * cc-mode.el:
  32707. +    fixed a problem where default_answer("boof: glorp"); was being
  32708. +    incorrectly matched to a default: statement
  32709. +
  32710. +Thu Jun 17 21:52:21 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32711. +
  32712. +    * cc-mode.el:
  32713. +    update language to accurately reflect state of Lemacsen and FSFmacsen
  32714. +
  32715. +Wed Jun 16 22:27:29 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32716. +
  32717. +    * cc-mode.el:
  32718. +    fixed indentation when base class declaration is on a separate line
  32719. +    then the derived class intro header.
  32720. +
  32721. +    * cc-mode.el:
  32722. +    1. cleaned up the way closing block braces are adjusted in
  32723. +       c++-indent-line.
  32724. +    
  32725. +    2. also extended c++-block-close-brace-offset to allow list value so
  32726. +       the following style can be easily supported:
  32727. +    
  32728. +    foo(a)
  32729. +    {
  32730. +        if(a)
  32731. +            {
  32732. +            asasdfsdf;
  32733. +            }
  32734. +    }
  32735. +    
  32736. +      Previously, there was no way to adjust the closing brace into column
  32737. +      zero.
  32738. +
  32739. +Tue Jun 15 22:04:43 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32740. +
  32741. +    * cc-mode.el:
  32742. +    use c-continued-statement-offset instead of c-indent-level to indent
  32743. +    comma separated arg decl lists
  32744. +
  32745. +    * cc-mode.el: bind C-m to newline-and-indent
  32746. +
  32747. +    * cc-mode.el:
  32748. +    much simplification on c++-fast-backward-syntactic-ws-2 to work with
  32749. +    new forward-comment semantics
  32750. +
  32751. +    * cc-mode.el:
  32752. +    don't skip up past compound statement if we're in a member init list
  32753. +
  32754. +    * cc-mode.el: fixed a bug in the translation of CASE 3 to cond stmt
  32755. +
  32756. +    * cc-mode.el:
  32757. +    1. cleaned up the spaghetti if's in CASE3 of c++-calculate-indent, by
  32758. +       converting all if's to a single cond statement -- I *hope* I got it
  32759. +       right!
  32760. +    
  32761. +    2. Added indentation, via c-indent-level of multi-line,
  32762. +       comma-separated, compound statements/declarations, with correction
  32763. +       for enum and static array inits.
  32764. +    y
  32765. +
  32766. +Mon Jun 14 21:54:38 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32767. +
  32768. +    * cc-mode.el:
  32769. +    merged in submitted patch to fix a possible bug which rears its ugly
  32770. +    head in FSFmacs19.  I haven't verified it so the fix only happens in FSFmacs
  32771. +
  32772. +Thu Jun  3 22:42:44 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32773. +
  32774. +    * cc-mode.el: try to conform to GNU cosmetic style
  32775. +
  32776. +Tue Jun  1 14:58:00 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32777. +
  32778. +    * cc-mode.el:
  32779. +    better to make a copy of the syntax table so we don't screw up text
  32780. +    mode's syntax table!
  32781. +
  32782. +Fri May 28 22:20:57 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32783. +
  32784. +    * cc-mode.el:
  32785. +    fixed the bug in c++-electric-brace where entering an open brace while
  32786. +    point is at bol and c++-auto-newline is nil did not indent the brace.
  32787. +
  32788. +Tue May 25 18:37:21 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32789. +
  32790. +    * cc-mode.el: some cosmetic differences to c++-emacs-features
  32791. +
  32792. +Mon May 24 23:23:05 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32793. +
  32794. +    * cc-mode.el: take out bogus defun c++-emacs-features
  32795. +
  32796. +    * cc-mode.el:
  32797. +    be really really smart about figuring out c++-emacs-features
  32798. +
  32799. +    * cc-mode.el:
  32800. +    we must use a different c++-in-literal for GNU19's 1-bit solution
  32801. +
  32802. +Wed May 19 14:19:20 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32803. +
  32804. +    * cc-mode.el: better c++-emacs-features deciphering
  32805. +
  32806. +Tue May 18 15:13:39 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32807. +
  32808. +    * cc-mode.el: no c++-mode-maintainer
  32809. +
  32810. +Fri May 14 22:05:02 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32811. +
  32812. +    * cc-mode.el:
  32813. +    can't yet make c++-indent-exp work in weird situation (see bug reports)
  32814. +
  32815. +    * cc-mode.el:
  32816. +    make sure we check for default: in the same place we check for case:
  32817. +    labels in CASE 4 of c++-calculate-indent
  32818. +
  32819. +Tue May 11 21:41:13 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32820. +
  32821. +    * cc-mode.el: a little better documentation
  32822. +
  32823. +    * cc-mode.el:
  32824. +    fixed the compat cond when setting c++-backward-syntactic-ws
  32825. +
  32826. +    * cc-mode.el: fixed the string-match call in c++-emacs-features
  32827. +
  32828. +Mon May 10 18:20:42 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32829. +
  32830. +    * cc-mode.el: check for forward-comment first
  32831. +
  32832. +    * cc-mode.el: fixed syntax errors in previous mod
  32833. +
  32834. +    * cc-mode.el: attempt to port between all known flavors of emacsen
  32835. +
  32836. +Thu Apr 22 21:16:15 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32837. +
  32838. +    * cc-mode.el:
  32839. +    ask user if they want to submit a bug report before actually doing it
  32840. +
  32841. +    * cc-mode.el:
  32842. +    quick fix for when the ? part of a ?: construct is a negative number
  32843. +
  32844. +Wed Apr 21 19:53:29 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32845. +
  32846. +    * cc-mode.el: use new interface to reporter.el
  32847. +
  32848. +Mon Apr 19 20:41:48 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32849. +
  32850. +    * cc-mode.el: uuencode when sending to ftpmail
  32851. +
  32852. +    * cc-mode.el: c++-mailer is obsolete now
  32853. +
  32854. +    * cc-mode.el:
  32855. +    modify c++-submit-bug-report to use reporter package, and require it.
  32856. +
  32857. +    * cc-mode.el: updated some documentation about getting c++-mode
  32858. +
  32859. +Fri Apr 16 15:36:39 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32860. +
  32861. +    * cc-mode.el:
  32862. +    in c++-indent-exp, during the logic which evaluates special
  32863. +    adjustments in the line's indentation, the sequential ifs should be a
  32864. +    cond statement since the conditions should be mutually exclusive
  32865. +
  32866. +    * cc-mode.el: updated mail-server (getting the mode) comments
  32867. +
  32868. +Fri Apr  2 15:35:10 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32869. +
  32870. +    * cc-mode.el:
  32871. +    c++-backward-to-start-of-if wasn't taking into account "if" clauses in
  32872. +    intervening comments.  Needed to add a c++-backward-syntactic-ws
  32873. +
  32874. +Thu Apr  1 23:08:37 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32875. +
  32876. +    * cc-mode.el:
  32877. +    cleaned up (I hope) all docstrings related to auto-hungry features
  32878. +
  32879. +    * cc-mode.el:
  32880. +    modified c++-class-key to recognize typedef in addition to extern
  32881. +
  32882. +    * cc-mode.el:
  32883. +    fixed c++-electric-star handling of stars inside C block comments but
  32884. +    not part of comment line head (i.e. stars embedded inside C block
  32885. +    comment lines not at 'boi, don't re-indent line)
  32886. +
  32887. +Thu Mar 18 18:49:42 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32888. +
  32889. +    * cc-mode.el:
  32890. +    fix infinite loop in c++-fast... in the following situation
  32891. +    \n
  32892. +    #define x \
  32893. +    -----------^
  32894. +    hit return here
  32895. +
  32896. +    * cc-mode.el:
  32897. +    wrap temporary binding of # to comment syntax in c++-fast-... in an
  32898. +    unwind-protect to ensure that it gets reset on any exit
  32899. +
  32900. +Thu Mar 11 15:36:26 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32901. +
  32902. +    * cc-mode.el:
  32903. +    fixed indentation of block comments after first /* line in c++-indent-exp
  32904. +
  32905. +Wed Mar 10 18:50:29 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32906. +
  32907. +    * cc-mode.el: c++-in-literal-quick wasn't checking for inside a string
  32908. +
  32909. +Fri Mar  5 20:00:17 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32910. +
  32911. +    * cc-mode.el: fixed regexps for case labels... I hope
  32912. +
  32913. +Thu Mar  4 23:00:30 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32914. +
  32915. +    * cc-mode.el: updated copyright date
  32916. +
  32917. +    * cc-mode.el: c++-c-mode uses c-mode-abbrev-table
  32918. +
  32919. +    * cc-mode.el:
  32920. +    in c++-fast-backward-syntactic-ws, check for lim<point *after* lim has
  32921. +    be let bound
  32922. +
  32923. +Wed Mar  3 20:25:17 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32924. +
  32925. +    * cc-mode.el: forgot to add basic inclass-shift
  32926. +
  32927. +Tue Mar  2 20:11:48 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32928. +
  32929. +    * cc-mode.el: handle underscores in c++-inher-key
  32930. +
  32931. +    * cc-mode.el:
  32932. +    inclass-shift is now calculated by multiplying inclass-depth with the
  32933. +    sum of c-indent-level and c-brace-imaginary-offset.  Usually at least
  32934. +    one of these c vars is zero.  Also, precompute inclass-unshift
  32935. +
  32936. +    * cc-mode.el: 1. fixed bogus end-of-buffer error when lim>=(point)
  32937. +    2. extended c++-class-key to include optional "extern" keyword
  32938. +
  32939. +    * cc-mode.el: 1. extended c++-class-key to handle template definitions
  32940. +    2. made MI-regexp in c++-calculate-indent into the global constant
  32941. +       c++-inher-key so it doesn't need to be concat'd every entry into
  32942. +       the loop.
  32943. +
  32944. +    * cc-mode.el: fixed small infinite loop introduced in previous patch
  32945. +
  32946. +    * cc-mode.el:
  32947. +    fixed c++-indent-exp when a multi-line C block comment caused
  32948. +    calculation of state to be wrong.  Now, when calculating line-end, we
  32949. +    first check to see of eol is in a C comment, and if so, we scan
  32950. +    forward until we find the end of the block comment.
  32951. +    
  32952. +    this algorithm might break if there is code on the same line, but
  32953. +    after the closing */ of a comment. this is to bizarre to support
  32954. +
  32955. +    * cc-mode.el:
  32956. +    no longer rely on # being of syntax class comment for really patched
  32957. +    emacses, except for convenience when in
  32958. +    c++-fast-backward-syntactic-ws.  Also, in this method, go into a loop
  32959. +    checking for cpp directives since its possible that a directive has a
  32960. +    comment on the end of the line:
  32961. +    
  32962. +    #include <foo.h>      /* opening a block comment here
  32963. +                           * which isn't closed until here
  32964. +                           */
  32965. +    
  32966. +    Finally, fix c++-in-literal-quick to handle new syntax class of #
  32967. +
  32968. +Mon Mar  1 23:32:40 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32969. +
  32970. +    * cc-mode.el:
  32971. +    no longer rely on # being of syntax class for really patched emacses
  32972. +
  32973. +    * cc-mode.el:
  32974. +    c++-macroize-region will now take any prefix arg instead of just a
  32975. +    negative arg.
  32976. +
  32977. +Tue Feb 16 20:30:37 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32978. +
  32979. +    * cc-mode.el: don't use _ as word constituent, instead fix regexps
  32980. +
  32981. +    * cc-mode.el:
  32982. +    give _ word constituent syntax class so indentation of case_ and like
  32983. +    symbols will work properly.  forward-word will gobble underscores in
  32984. +    symbols so that's the trade off for taking the easy way out.
  32985. +
  32986. +Fri Feb 12 16:40:35 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32987. +
  32988. +    * cc-mode.el:
  32989. +    c++-backward-to-start-of-if was necessitated because backward-sexp
  32990. +    call was bombing out in new syntax, on single quote in preceding C++
  32991. +    comment line.  use c++-backward-sexp to properly handle this and
  32992. +    change all references of c-backward... to c++-backward.
  32993. +
  32994. +Thu Feb 11 18:33:50 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32995. +
  32996. +    * cc-mode.el:
  32997. +    should only bind parse-sexp-ignore-comments to t if c++-is-really-fixed-p
  32998. +
  32999. +Sat Feb  6 00:04:45 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  33000. +
  33001. +    * cc-mode.el:
  33002. +    in c++-comment-indent, if previous line contains a comment only line
  33003. +    that is to the left of comment-column, indent the line to
  33004. +    comment-column
  33005. +
  33006. +Fri Feb  5 23:41:34 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  33007. +
  33008. +    * cc-mode.el: fixed K&R C arg decl with keyword struct in line
  33009. +
  33010. +    * cc-mode.el:
  33011. +    fixed c++-indent-command to follow documentation. previous the
  33012. +    following situation was broken: c++-tab-always-indent == nil and:
  33013. +    
  33014. +    ...
  33015. +    {
  33016. +    foo;
  33017. +    ^------- point was here
  33018. +
  33019. +    * cc-mode.el:
  33020. +    use Ken Laprade's patch for format vs symbol-name print of
  33021. +    c++-special-indent-hook
  33022. +
  33023. +    * cc-mode.el:
  33024. +    check for (not (c++-in-parens-p)) when deciding whether we're looking
  33025. +    at a continuation line or not to avoid bad indentation of continued
  33026. +    lines such as:
  33027. +    
  33028. +        if( !tnode->expanded_p() &&
  33029. +            docobj->hasChild_p() &&
  33030. +            docobj->tocLevel() < xmaxTocDepth )
  33031. +
  33032. +    * cc-mode.el: fixed anchor of comment only lines in c++-indent-exp
  33033. +
  33034. +    * cc-mode.el:
  33035. +    anchor comment only lines to (current-column) if the comment is at, or
  33036. +    to the right of, comment-column.
  33037. +
  33038. +    * cc-mode.el:
  33039. +    c++-continued-member-init-offset works for line with just single colon
  33040. +    line, where member inits follow on subsequent lines:
  33041. +    
  33042. +    ff::ff ()
  33043. +       :
  33044. +       xxx (0),
  33045. +       yyy (0)
  33046. +    {
  33047. +
  33048. +    * cc-mode.el:
  33049. +    don't add c-continued-statement-offset if looking at a class's opening
  33050. +    brace
  33051. +
  33052. +    * cc-mode.el: fixed c++-indent-exp wrt stream ops
  33053. +
  33054. +    * cc-mode.el: fixed another small problem with nested class indentation
  33055. +
  33056. +    * cc-mode.el:
  33057. +    another fix for nested class indentation when looking at the line
  33058. +    after an access specifier.  we needed to substract one level of
  33059. +    indentation
  33060. +
  33061. +Tue Feb  2 21:27:52 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  33062. +
  33063. +    * cc-mode.el: modifications to better indent nested classes
  33064. +
  33065. +Fri Jan 29 22:31:07 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  33066. +
  33067. +    * cc-mode.el:
  33068. +    in c++-forward/backward-sexp, only let bind parse-sexp-ignore-comments
  33069. +    to t if emacs is fixed (not really fixed)
  33070. +
  33071. +Wed Jan 27 22:48:56 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  33072. +
  33073. +    * cc-mode.el:
  33074. +    some previous fix (don't know when) broke MI continuation line
  33075. +    indentation.  This fixes that problem by making sure we're not looking
  33076. +    at MI-regexp
  33077. +
  33078. +    * cc-mode.el: commented out bogus part
  33079. +
  33080. +    * cc-mode.el: commented out bogus top level continuation indentations
  33081. +
  33082. +Mon Jan 25 23:34:52 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  33083. +
  33084. +    * cc-mode.el:
  33085. +    fixed minor bug with c++-submit-bug-report which manifests
  33086. +    only on unpatched emacses
  33087. +
  33088. +    * cc-mode.el: fixed small bug in c++-submit-bug-report manifesting
  33089. +    in unpatched emacses
  33090. +
  33091. +Thu Jan 21 23:38:34 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  33092. +
  33093. +    * cc-mode.el:
  33094. +    c++-indent-exp must let-bind parse-sexp-ignore-comments to t for the
  33095. +    whole duration
  33096. +
  33097. +    * cc-mode.el:
  33098. +    hack for c++-indent-sexp continued statement offsets... are there
  33099. +    repercussions???
  33100. +
  33101. +    * cc-mode.el: fixed c++-cont-indent free variable
  33102. +
  33103. +    * cc-mode.el: partial fix of continuation lines at top level
  33104. +
  33105. +Wed Jan 20 23:39:40 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  33106. +
  33107. +    * cc-mode.el: 1. remove infinite loop from c++-in-literal
  33108. +    2. get rid of messages
  33109. +    
  33110. +    note that c++-in-literal-quick is broken wrt to old emacs patches
  33111. +
  33112. +Wed Jan 13 22:57:51 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  33113. +
  33114. +    * cc-mode.el:
  33115. +    c++-end-of-defun needed to let-bind parse-sexp-ignore-comments to t
  33116. +
  33117. +    * cc-mode.el: better c++-in-literal-quick
  33118. +
  33119. +    * cc-mode.el: 1. cosmetic cleanups of code
  33120. +    2. a pass through c++-mode docstring and all variables
  33121. +
  33122. +    * cc-mode.el: another hack on the comments at the top of the file
  33123. +
  33124. +    * cc-mode.el: a documentation pass
  33125. +
  33126. +    * cc-mode.el: changed name of c++-backward-over-syntactic-ws to just
  33127. +    c++-backward-syntactic-ws to more closely resemble new lemacs builtin
  33128. +    function name.
  33129. +
  33130. +    * cc-mode.el: fixed c++-syntax-mode-table to work with patched lemacs
  33131. +
  33132. +Sat Jan  9 05:08:25 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  33133. +
  33134. +    * cc-mode.el: put # back as a comment-style
  33135. +
  33136. +    * cc-mode.el: comment about new bc and backward-syntactic-ws
  33137. +
  33138. +    * cc-mode.el: better syntax specifications for new patched lemacs
  33139. +
  33140. +Thu Jan  7 22:22:53 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  33141. +
  33142. +    * cc-mode.el:
  33143. +    added c++-backward-sexp and c++-forward-sexp which are bound to M-C-f
  33144. +    and M-C-b and work better than their non-c++-mode counterparts since
  33145. +    they let-bind parse-sexp-ignore-comments to t.
  33146. +
  33147. +Thu Dec 31 22:17:36 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33148. +
  33149. +    * cc-mode.el:
  33150. +    use the really, really, up-to-date syntax patch for Lemacs 19
  33151. +
  33152. +Tue Dec 29 01:22:19 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33153. +
  33154. +    * cc-mode.el: removed extraneous commented out code
  33155. +
  33156. +    * cc-mode.el: need to ensure that c-mode is loaded in
  33157. +
  33158. +    * cc-mode.el:
  33159. +    fixed a problem inside member init lists, where the first member (on
  33160. +    the colon line) has its args continued
  33161. +
  33162. +    * cc-mode.el:
  33163. +    fix bug when indenting a line at level zero which begins at the
  33164. +    beginning of buffer
  33165. +
  33166. +Wed Dec 23 23:20:05 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33167. +
  33168. +    * cc-mode.el:
  33169. +    fix for c++-indent-exp so that it properly indents c block comments
  33170. +
  33171. +Fri Dec 18 16:15:12 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33172. +
  33173. +    * cc-mode.el: greater improvements on c++-b-o-w-s performance
  33174. +
  33175. +Thu Dec 17 23:29:18 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33176. +
  33177. +    * cc-mode.el:
  33178. +    another run at optimizing c++-backward-over-syntactic-ws based on
  33179. +    information gleaned from calc.el experience
  33180. +
  33181. +    * cc-mode.el:
  33182. +    c++-backward-over-syntactic uses beginning-of-defun instead of
  33183. +    point-min as minimum distance to scan back
  33184. +
  33185. +Wed Dec 16 21:52:41 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33186. +
  33187. +    * cc-mode.el:
  33188. +    check for brace insertion at not-quite-end-of-line (ie eol, ignoring
  33189. +    any trailing ws)
  33190. +
  33191. +    * cc-mode.el: allow c++-backscan-limit to be nil
  33192. +
  33193. +Fri Dec 11 16:26:05 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33194. +
  33195. +    * cc-mode.el:
  33196. +    in electric terminator, don't just check for eolp to determine if
  33197. +    terminator should electrify. also look for hanging whitespace which
  33198. +    may look like eolp, even though it isn't:
  33199. +    
  33200. +            fooo();......\n
  33201. +                  ^------^
  33202. +    undiscovered ws---|
  33203. +
  33204. +Thu Dec 10 22:59:25 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33205. +
  33206. +    * cc-mode.el:
  33207. +    simple fix in calculate indent so forward-char 1 at end of buffer
  33208. +    won't throw an error
  33209. +
  33210. +Wed Dec  9 17:55:17 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33211. +
  33212. +    * cc-mode.el:
  33213. +    error in default value for c++-untame-characters. needed to negate the
  33214. +    check for c++-emacs-is-fixed-p
  33215. +
  33216. +    * cc-mode.el:
  33217. +    fixed problems in electric-(star|slash) when inserting as first
  33218. +    character in a buffer.
  33219. +
  33220. +    * cc-mode.el:
  33221. +    don't treat double-colon as member init when member defun is split
  33222. +    across two lines at the scope operator. eg:
  33223. +    
  33224. +    HereIsAReallyLongClassName
  33225. +    ::HereIsAReallyLongClassName( const WithALongConstructorArgument& )
  33226. +        : andItsFirstMemberInit( 7 )
  33227. +    {}
  33228. +
  33229. +    * cc-mode.el: added some thanks to the documentation
  33230. +
  33231. +Tue Dec  8 23:57:27 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33232. +
  33233. +    * cc-mode.el:
  33234. +    better c++-submit-bug-report that works with all known mailers
  33235. +
  33236. +Mon Dec  7 16:26:51 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33237. +
  33238. +    * cc-mode.el:
  33239. +    fixed calculation of multiple member-inits where double colons can
  33240. +    appear inside initing parens
  33241. +
  33242. +    * cc-mode.el: improved documentation for c++-special-indent-hook
  33243. +
  33244. +Sat Dec  5 02:52:04 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33245. +
  33246. +    * cc-mode.el: handled member init lists with first embedded colon
  33247. +    
  33248. +    foo() : foo, foo,
  33249. +        foo, foo,
  33250. +        ^--- this should probably be indented to
  33251. +          ^--- here (under colon)
  33252. +    
  33253. +    but that's really hard and of minimal use.
  33254. +
  33255. +    * cc-mode.el:
  33256. +    finally figured out that "questionable member init" indentation
  33257. +    section. It occurs when you have the following style:
  33258. +    
  33259. +    foo(...) :
  33260. +        foo(9), blat(10),
  33261. +        clob(3)
  33262. +    
  33263. +    Note the colon hanging on the previous line. Steve Vinoski is correct,
  33264. +    we should not subtract a level of indentation from the shift since
  33265. +    inclass-shift takes care of it.
  33266. +
  33267. +    * cc-mode.el:
  33268. +    seems like a fix for some close parens not getting outdented when
  33269. +    c++-paren-as-block-close-p is t.  DOES ANYTHING ELSE BREAK????
  33270. +
  33271. +Fri Dec  4 22:11:27 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33272. +
  33273. +    * cc-mode.el:
  33274. +    fixed continued expression in a simple if statement where there is a
  33275. +    comment between the if and the simple statement.
  33276. +
  33277. +Thu Dec  3 23:38:27 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33278. +
  33279. +    * cc-mode.el: cleaned up some documentation
  33280. +
  33281. +    * cc-mode.el: fixed c++-indent-exp for stream operators
  33282. +
  33283. +Tue Dec  1 18:01:45 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33284. +
  33285. +    * cc-mode.el:
  33286. +    c++-backward-over-syntactic-ws should always be given a backlimit in
  33287. +    c++-calculate-indent.
  33288. +
  33289. +    * cc-mode.el:
  33290. +    in previous fix for c++-c-i, it is possible that containing-sexp is
  33291. +    nil, so use (goto-char (or containing-sexp bod))
  33292. +
  33293. +    * cc-mode.el:
  33294. +    enhancements to c++-calculate-indent so that it doesn't assume that
  33295. +    class opening brace starts in column zero.
  33296. +
  33297. +    * cc-mode.el:
  33298. +    c++-submit-bug-report now reports whether emacs is patched
  33299. +
  33300. +Mon Nov 30 23:39:13 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33301. +
  33302. +    * cc-mode.el: fixed K&R C arg decl indentations
  33303. +
  33304. +    * cc-mode.el: cosmetic changes
  33305. +
  33306. +    * cc-mode.el: removed old c++-bosw which was too slow anyway
  33307. +
  33308. +Fri Nov 27 20:18:12 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33309. +
  33310. +    * cc-mode.el:
  33311. +    fixed comment indentation for new c++-comment-only-line-offset
  33312. +    semantics, and also simplified electric-star and electric-slash. They
  33313. +    no longer call c++-electric-terminator.
  33314. +
  33315. +Fri Nov 13 22:42:04 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33316. +
  33317. +    * cc-mode.el: some documentation improvements
  33318. +
  33319. +    * cc-mode.el:
  33320. +    fixed erroneous newline insertion on member init colons when
  33321. +    c++-auto-newline is off.
  33322. +
  33323. +    * cc-mode.el: fixed buggy regexp which would fail on this situation:
  33324. +    
  33325. +    int foo(                                     // foo
  33326. +        int arg1,                                 // arg1
  33327. +                                                 int arg2
  33328. +    
  33329. +    last line gets indented wrong because of the spaces b/w the foo( and
  33330. +    the comment
  33331. +
  33332. +    * cc-mode.el: 1. alphabetized varlist in c++-dump-state
  33333. +    2. improved portability of c++-submit-bug-report for mailers other
  33334. +       than vm.
  33335. +
  33336. +    * cc-mode.el:
  33337. +    use comment-start-skip instead of hard-coded comment regexp
  33338. +
  33339. +    * cc-mode.el:
  33340. +    1. added c++-emacs-is-fixed-p to check for a patched emacs
  33341. +    2. automatically set c++-untame-characters to nil if patched
  33342. +
  33343. +    * cc-mode.el:
  33344. +    fixed comment-line indent calculation. now c++-calculate-indent does
  33345. +    no comment-line calculations, its all handled in c++-indent-line and
  33346. +    c++-indent-sexp
  33347. +
  33348. +    * cc-mode.el: slight documentation fixup
  33349. +
  33350. +    * cc-mode.el:
  33351. +    vastly improved c++-comment-only-line-offset to provide ability to
  33352. +    determine column-zero offsets
  33353. +
  33354. +    * cc-mode.el: attempt to speed up c++-backward-over-syntactic-ws
  33355. +
  33356. +Thu Nov 12 16:45:30 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33357. +
  33358. +    * cc-mode.el:
  33359. +    1. some experimental performance enhancements (not working really great)
  33360. +    2. in c++-at-top-level-p, check for null containing-sexp before in-parens
  33361. +
  33362. +Tue Nov  3 20:46:19 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33363. +
  33364. +    * cc-mode.el:
  33365. +    removed the variable c++-class-member-indent and replaced all
  33366. +    occurances with c-indent-level.  it caused very bad things when
  33367. +    c-indent-level != c++-class-member-indent
  33368. +
  33369. +    * cc-mode.el: c++-match-paren must set parse-sexp-ignore-comments to t
  33370. +
  33371. +Fri Oct  2 22:31:14 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33372. +
  33373. +    * cc-mode.el:
  33374. +    perhaps optimization on skipping backwards over c++ literal comment
  33375. +
  33376. +Tue Sep 29 00:19:22 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33377. +
  33378. +    * cc-mode.el: replaced code accidently removed during last bug fix
  33379. +
  33380. +Mon Sep 28 22:44:51 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33381. +
  33382. +    * cc-mode.el: fixed default[ \t]*: indentation bug
  33383. +
  33384. +    * cc-mode.el:
  33385. +    continuation indentation problem should now work correctly.
  33386. +    c++-in-function-p search from containing-sexp or point
  33387. +
  33388. +    * cc-mode.el:
  33389. +    added c++-in-function-p defun to be used when checking if we're in a
  33390. +    function.  Continuations inside a function
  33391. +
  33392. +    * cc-mode.el: fixed the LCD Archive Entry syntax
  33393. +
  33394. +    * cc-mode.el: removed c++-fill-C-comment, function is unused anywhere
  33395. +
  33396. +Tue Sep  1 21:02:17 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33397. +
  33398. +    * cc-mode.el: 1. compatibility code for loading into a patched emacs
  33399. +    2. also a *slightly* improved c++-backward-over-syntactic-ws.  This
  33400. +       function needs a drastic overhaul -- I bet its the main performance
  33401. +       pig now that emacs is patched.
  33402. +
  33403. +Fri Aug 28 22:07:39 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33404. +
  33405. +    * cc-mode.el: final cleansing before posting
  33406. +
  33407. +Thu Aug 27 16:41:30 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33408. +
  33409. +    * cc-mode.el: added GNU copyright info
  33410. +
  33411. +    * cc-mode.el: standard header and many comment changes
  33412. +
  33413. +Wed Aug 26 23:40:46 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33414. +
  33415. +    * cc-mode.el: cleaned up documentation
  33416. +
  33417. +    * cc-mode.el: yet again, better documentation about untame characters
  33418. +
  33419. +    * cc-mode.el: better documentation on c++-untame-characters
  33420. +
  33421. +    * cc-mode.el:
  33422. +    added some documentation to the front of the file to describe untame
  33423. +    characters
  33424. +
  33425. +    * cc-mode.el:
  33426. +    default value for c++-untame-characters is now just single tick, the
  33427. +    most troublesome character
  33428. +
  33429. +Thu Aug 20 19:29:00 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33430. +
  33431. +    * cc-mode.el:
  33432. +    only check for inside template spec if looking at c++-class-key
  33433. +
  33434. +    * cc-mode.el:
  33435. +    attempted to address keyword "class" appearing inside a template
  33436. +    specification:
  33437. +    
  33438. +    template<class Foo>
  33439. +    Foo& Bar<Foo>::doit( void ){};
  33440. +    
  33441. +    template<class Foo, class Blat>
  33442. +    Foo& Bar<Foo>::doit( void ){};
  33443. +
  33444. +Tue Aug 11 14:06:02 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33445. +
  33446. +    * cc-mode.el: updated docstring for c++-at-top-level-p
  33447. +
  33448. +Mon Aug 10 22:19:52 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33449. +
  33450. +    * cc-mode.el: c++-c-mode's mode-name is "C"
  33451. +
  33452. +    * cc-mode.el: style 1-3 is default for c++-C-block-comments-indent-p
  33453. +
  33454. +Thu Aug  6 19:47:36 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33455. +
  33456. +    * cc-mode.el: fixed auto-indenting of C block comment style 3
  33457. +
  33458. +Wed Aug  5 21:25:39 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33459. +
  33460. +    * cc-mode.el: another patch to docstring
  33461. +
  33462. +    * cc-mode.el: another docstring change
  33463. +
  33464. +    * cc-mode.el: qualify doc string change of previous revision
  33465. +
  33466. +    * cc-mode.el:
  33467. +    improved (hopefully) the docstring for var c++-untame-characters
  33468. +
  33469. +    * cc-mode.el: more optimizations by passing bod to c++-at-top-level-p
  33470. +
  33471. +    * cc-mode.el: parameterized c++-class-key and c++-access-key
  33472. +    the first is class\|struct\|union
  33473. +    the second is public\|protected\|private
  33474. +
  33475. +    * cc-mode.el:
  33476. +    fixed (c++-at-top-level-p t) so it won't get fooled by struct declarations.
  33477. +
  33478. +    * cc-mode.el:
  33479. +    fixed c++-at-top-level-p so it won't get fooled by struct declarations
  33480. +
  33481. +Tue Aug  4 20:59:29 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33482. +
  33483. +    * cc-mode.el: fixed docstring for c++-tab-always-indent
  33484. +
  33485. +Wed Jul 29 14:50:46 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33486. +
  33487. +    * cc-mode.el:
  33488. +    this branch combines C and C++ modes for inclusion into emacs 19
  33489. +
  33490. +Tue Jul 28 19:28:29 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33491. +
  33492. +    * cc-mode.el: fixed documentation for c++-C-block-comments-indent-p
  33493. +
  33494. +Mon Jul 27 15:13:36 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33495. +
  33496. +    * cc-mode.el:
  33497. +    fixed indentation of member init list after a multiline member init call
  33498. +
  33499. +Thu Jul 23 19:59:45 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33500. +
  33501. +    * cc-mode.el:
  33502. +    fixed c++-electric-pound when inserting # at beginning of buffer
  33503. +
  33504. +    * cc-mode.el: simple fix for *some* sequence continuation lines
  33505. +
  33506. +Wed Jul 22 13:28:54 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33507. +
  33508. +    * cc-mode.el:
  33509. +    fixed (c++-at-top-level-p t) so it wouldn't return non-nil if keyword
  33510. +    class appears in arglist
  33511. +
  33512. +    * cc-mode.el:
  33513. +    added to c++-calculate-indent a check if we're at the bobp
  33514. +
  33515. +Tue Jul 21 21:59:27 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33516. +
  33517. +    * cc-mode.el:
  33518. +    new function c++-calculate-c-indent-within-comment used instead of
  33519. +    calculate-c-indent-within-comment (from c-mode).  Supports 4 styles of
  33520. +    C block comments.
  33521. +    
  33522. +    Also, new variable c++-C-block-comments-indent-p to control which
  33523. +    style(s) to use.
  33524. +
  33525. +    * cc-mode.el:
  33526. +    fixed c++-indent-exp to handle public/private/protected with friends
  33527. +
  33528. +    * cc-mode.el: fixed indentation for the following style:
  33529. +    
  33530. +    class foo {
  33531. +        friend class bar;
  33532. +        public:
  33533. +            foo();
  33534. +        private:
  33535. +    };
  33536. +
  33537. +Mon Jul 20 20:22:58 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33538. +
  33539. +    * cc-mode.el:
  33540. +    1. added c++-paren-as-block-close-p to control whether a closing paren is
  33541. +       treated as a closing brace.
  33542. +    
  33543. +    2. also added c++-block-close-brace-offset to bug list of variables
  33544. +
  33545. +    * cc-mode.el: added a c++-c-mode-syntax-table
  33546. +    NOTE: patch in previous version DOES work
  33547. +
  33548. +    * cc-mode.el: rewrite of c++-at-top-level-p for c mode (doesn't work)
  33549. +
  33550. +Fri Jul 17 20:14:30 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33551. +
  33552. +    * cc-mode.el:
  33553. +    change syntax table entry to support lemacs 19 syntax table extension
  33554. +    WARNING: this may change
  33555. +
  33556. +Thu Jul 16 19:35:21 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33557. +
  33558. +    * cc-mode.el: fixed comment-only lines in c++-indent-exp
  33559. +
  33560. +    * cc-mode.el:
  33561. +    patch to c++-indent-exp to make it work consistently with manual
  33562. +    tabbing
  33563. +
  33564. +    * cc-mode.el:
  33565. +    better c++-(un)comment-region functions as supplied by enami
  33566. +
  33567. +Wed Jul 15 18:07:13 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33568. +
  33569. +    * cc-mode.el:
  33570. +    C mode entry point, including a properly working c++-(un)comment-region
  33571. +
  33572. +    * cc-mode.el:
  33573. +    use c++-backward-over-syntactic-ws in another appropriate location in
  33574. +    c++-calculate-indent
  33575. +
  33576. +Tue Jul 14 21:33:04 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33577. +
  33578. +    * cc-mode.el: implemented Brian Kennedy's patches for { if style
  33579. +    seems to be clean now
  33580. +
  33581. +    * cc-mode.el: regexp to correctly pickup '\\' character constant
  33582. +
  33583. +    * cc-mode.el:
  33584. +    new regexp to match even number of backslashes followed by a quote for
  33585. +    c++-in-literal matching of string terminators
  33586. +
  33587. +Mon Jul 13 18:25:21 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33588. +
  33589. +    * cc-mode.el:
  33590. +    better fix to c++-at-top-level-p for limiting backsearching of
  33591. +    class/struct
  33592. +
  33593. +    * cc-mode.el: another patch to c++-at-top-level-p, but now slower
  33594. +
  33595. +    * cc-mode.el:
  33596. +    Igor Metz's patch to fix c++-uncomment-region for Emacs 19
  33597. +    derivatives since zap-to-char now works differently
  33598. +
  33599. +Fri Jul 10 22:02:26 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33600. +
  33601. +    * cc-mode.el:
  33602. +    in c++-fill-C-comment, its cleaner to use let-bind fill-prefix itself
  33603. +    instead of saving its value and later restoring it.
  33604. +
  33605. +    * cc-mode.el:
  33606. +    c++-at-top-level-p never returns non-nil if inside the parens of an
  33607. +    arg decl list for a function.  Also cleaned up c++-at-top-level-p's
  33608. +    docstring for new functionality
  33609. +
  33610. +    * cc-mode.el: 1. added usage notes to top of file
  33611. +    2. another fix for indentation of member init lists in nested classes
  33612. +
  33613. +    * cc-mode.el: fixed member init continuation lines
  33614. +
  33615. +    * cc-mode.el:
  33616. +    fixed emtpy-defun-braces cleanup when at top level wrt enclosing class
  33617. +
  33618. +    * cc-mode.el: fixed nested class member init list indentation
  33619. +
  33620. +Thu Jul  9 21:54:08 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33621. +
  33622. +    * cc-mode.el:
  33623. +    added c++-class-member-indent to varlist in bug submission
  33624. +
  33625. +    * cc-mode.el: nested classes!
  33626. +    added a variable c++-class-member-indent to handle indentation of
  33627. +    class members relative to their enclosing class
  33628. +
  33629. +    * cc-mode.el:
  33630. +    new c++-at-top-level-p function for nested class definitions (does not
  33631. +    work though)
  33632. +
  33633. +    * cc-mode.el:
  33634. +    optimized by changing all references to c++-in-comment-p and
  33635. +    c++-in-open-string-p to use memq and c++-in-literal.  This should
  33636. +    overall reduce the number of calls to c++-in-literal, a time consuming
  33637. +    defun.
  33638. +
  33639. +    * cc-mode.el:
  33640. +    c++-electric-star will now re-indent the line when typed as the first
  33641. +    character on a line of a C block style comment continuation
  33642. +
  33643. +    * cc-mode.el:
  33644. +    fix to c++-at-top-level-p to ignore struct/class declarations inside a
  33645. +    defun which are not definitions:
  33646. +    
  33647. +    void foo()
  33648. +    {
  33649. +        struct blah;
  33650. +    
  33651. +        // we are not now (c++-at-top-level-p t)
  33652. +    
  33653. +    The function is still not perfect so we really need to rethink this
  33654. +    algorithm.
  33655. +
  33656. +    * cc-mode.el:
  33657. +    collapse all c++-point-* commands into a single c++-point command with
  33658. +    an argument
  33659. +
  33660. +Wed Jul  8 19:40:14 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33661. +
  33662. +    * cc-mode.el: fixed parse-start setq in c++-calculate-indent
  33663. +
  33664. +Tue Jul  7 22:03:41 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33665. +
  33666. +    * cc-mode.el: pasing => parsing
  33667. +
  33668. +    * cc-mode.el: grammer -> grammar in comment
  33669. +
  33670. +    * cc-mode.el:
  33671. +    implemented c++-backward-over-syntactic-ws with help of Tor Lillqvist
  33672. +    <tml@tik.vtt.fi>  and replaced all occurances of
  33673. +    c++-backward-over-cpp-directives and c++-skip-backward-to-noncomment.
  33674. +
  33675. +Mon Jul  6 21:25:17 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33676. +
  33677. +    * cc-mode.el:
  33678. +    colon and semi-colon are no longer electric inside of literals
  33679. +
  33680. +    * cc-mode.el: it is possible that c++-beginning-of-defun with
  33681. +    c++-match-header-strong equal to nil will incorrectly find the
  33682. +    beginning of defun.  if this happens, c++-parse-state will return a
  33683. +    null state so we can check for this and then let* bind
  33684. +    c++-match-header-strongly to t.  Then we re-calculate the beginning of
  33685. +    the c++ defun.
  33686. +    
  33687. +    Seems to work around the (char-after ...) bug
  33688. +
  33689. +    * cc-mode.el: swap back to another use of c++-parse-state
  33690. +
  33691. +    * cc-mode.el:
  33692. +    1. don't inherit syntax table from c-mode.  Initialize completely from
  33693. +       in this file
  33694. +    2. wrote c++-parse-state to centralize parsing of syntactic context
  33695. +
  33696. +Tue Jun 30 21:39:23 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33697. +
  33698. +    * cc-mode.el:
  33699. +    fixed a bug in brace-else-brace cleanup where insertion of new
  33700. +    (non-else) brace could possibly go way back to clean up old else brace
  33701. +    constructs.
  33702. +
  33703. +    * cc-mode.el:
  33704. +    use new c++-cleanup-list to replace c++-cleanup-brace-else-brace-p and
  33705. +    c++-cleanup-empty-defun-braces-p, and to implement new cleanup on
  33706. +    close semi.
  33707. +
  33708. +    * cc-mode.el:
  33709. +    fixed c++-electric-pound behavior for # directives in a level of
  33710. +    nesting for alignleft behavior
  33711. +
  33712. +    * cc-mode.el:
  33713. +    c++-cleanup-empty-defun-braces-p only for defun braces (not for empty
  33714. +    if braces for example)
  33715. +
  33716. +    * cc-mode.el:
  33717. +    only do the extra c++-indent-line in c++-electric-brace if hanging
  33718. +    braces is turned off
  33719. +
  33720. +Wed Jun 24 20:07:00 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33721. +
  33722. +    * cc-mode.el:
  33723. +    added a c++-indent-line in the c++-electric-brace to fix non-hanging
  33724. +    brace error message.
  33725. +
  33726. +    * cc-mode.el:
  33727. +    added function c++-skip-backwards-over-cpp-directives for improved
  33728. +    indentation around # lines.
  33729. +
  33730. +Tue Jun 23 19:35:27 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33731. +
  33732. +    * cc-mode.el:
  33733. +    fixed stream op positioning when first >> or << is on the next
  33734. +    continued line of the statement.
  33735. +
  33736. +    * cc-mode.el:
  33737. +    hacking the mode line should only occur in c++-mode defun, when the
  33738. +    mode line is a list, otherwise, if people use the obsolete string-only
  33739. +    form, their mode line will be made invalid.
  33740. +
  33741. +    * cc-mode.el:
  33742. +    fixed indentation of lines not at top level, which follow preprocessor
  33743. +    directive lines.
  33744. +
  33745. +Fri Jun 19 21:46:58 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33746. +
  33747. +    * cc-mode.el:
  33748. +    fixed bug when access specifier line has a comment at the end of it
  33749. +
  33750. +    * cc-mode.el: simplified all point-marks to use (point-marker)
  33751. +
  33752. +Thu Jun 18 15:10:04 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33753. +
  33754. +    * cc-mode.el: fixed c++-electric-pound by using insert-before-markers
  33755. +
  33756. +    * cc-mode.el: 1. added c++-electric-pound command and bound it to #
  33757. +    2. also added c++-electric-pound-behavior to control how # behaves.
  33758. +       Currently only supported behavior is alignleft, but eventually I
  33759. +       will support nested behavior as well.
  33760. +    3. changed the way c++-electric-delete and c++-insert-command work on
  33761. +       # lines.  delete is never hungry in the whitespace b/w # and
  33762. +       directive, and tab only inserts in this area as well.
  33763. +
  33764. +    * cc-mode.el:
  33765. +    added c++-delete-function variable and made c++-electric-delete use
  33766. +    this variable
  33767. +
  33768. +Wed Jun 17 22:29:12 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33769. +
  33770. +    * cc-mode.el:
  33771. +    added c++-special-indent-hook and bug reporting of this variable
  33772. +
  33773. +    * cc-mode.el: support for lining up >> and <<
  33774. +
  33775. +    * cc-mode.el:
  33776. +    added c++-matching-paren as contrib'd by Gnanasekaran Swaminathan
  33777. +
  33778. +Mon Jun 15 21:07:29 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33779. +
  33780. +    * cc-mode.el: fixed c++-indent-command when looking at a blank line and
  33781. +    c++-tab-always-indent is nil
  33782. +
  33783. +    * cc-mode.el:
  33784. +    another fix to c++-indent-command for c++-tab-always-indent == nil
  33785. +
  33786. +    * cc-mode.el:
  33787. +    made c++-indent-command behavior when c++-tab-always-indent is nil
  33788. +    consistent with documentation
  33789. +
  33790. +Thu Jun 11 22:44:47 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33791. +
  33792. +    * cc-mode.el:
  33793. +    added a test to see if c++-auto-newline actually inserts the newline
  33794. +    doing the auto-fill
  33795. +
  33796. +Wed Jun 10 19:10:31 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33797. +
  33798. +    * cc-mode.el:
  33799. +    fixed indentation of first member function after an access specifier
  33800. +    inside a class definition
  33801. +
  33802. +Tue Jun  9 22:45:24 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33803. +
  33804. +    * cc-mode.el:
  33805. +    c++-submit-bug-report uses pop-to-buffer instead of switch-buffer
  33806. +
  33807. +    * cc-mode.el: refined regexp patch in previous fix
  33808. +
  33809. +    * cc-mode.el:
  33810. +    fixed c++-calculate-indent int the situation where we're looking at
  33811. +    the line after a class declaration, but we're not inheriting.  see the
  33812. +    lines after:
  33813. +    ;; else first check to see if its a
  33814. +    ;; multiple inheritance continuation line
  33815. +    
  33816. +    the regexp should match optional inheritance syntax.
  33817. +
  33818. +    * cc-mode.el:
  33819. +    small fix to c++-at-top-level for checking if at top wrt a containing
  33820. +    class definition. (previous fix didn't work)
  33821. +
  33822. +    * cc-mode.el:
  33823. +    1. fixed small bug in c++-at-top-level-p for nested in class checking
  33824. +    2. fixed bug in indentation of continued arg lists in class nested
  33825. +       function declarations
  33826. +
  33827. +Mon Jun  8 21:50:48 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33828. +
  33829. +    * cc-mode.el: removed extra define-key of DEL in c++-mode-map init
  33830. +
  33831. +    * cc-mode.el: fixed friend offset in c++-indent-exp
  33832. +
  33833. +    * cc-mode.el:
  33834. +    indent by c++-friend-offset for all friends, not just class friends
  33835. +
  33836. +    * cc-mode.el: fixed scan-lists failure in c++-at-top-level-p
  33837. +
  33838. +    * cc-mode.el: fixed bogus colon entry "premature sexp end" bug
  33839. +
  33840. +    * cc-mode.el: much preliminary work for inline code proper formatting
  33841. +
  33842. +    * cc-mode.el: fixed double colon cleanup inside defun level
  33843. +
  33844. +    * cc-mode.el: added variable c++-cleanup-empty-defun-braces-p
  33845. +
  33846. +    * cc-mode.el: default value for c++-comment-only-line-offset is now 0
  33847. +
  33848. +    * cc-mode.el: fixed c++-electric-delete's consuming of [] characters
  33849. +
  33850. +    * cc-mode.el: c++-cleanup-brace-else-brace-p is now nil by default
  33851. +
  33852. +    * cc-mode.el:
  33853. +    fixed c++-hanging-member-init-colon for all known situations
  33854. +
  33855. +Fri Jun  5 21:13:54 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33856. +
  33857. +    * cc-mode.el: reorganized the major sections of code
  33858. +
  33859. +Tue Jun  2 15:18:25 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33860. +
  33861. +    * cc-mode.el: more optimizations using c++-beginning-of-defun
  33862. +
  33863. +Mon Jun  1 22:24:52 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33864. +
  33865. +    * cc-mode.el: interrim speedups
  33866. +
  33867. +    * cc-mode.el:
  33868. +    another patch to c++-in-literal for checking for null strings. I think
  33869. +    I've got it this time...
  33870. +
  33871. +    * cc-mode.el:
  33872. +    fixed the regexp for matching the closing double quote of a string
  33873. +
  33874. +Thu May 28 22:24:09 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33875. +
  33876. +    * cc-mode.el: added a (provide ...) to the end of the file
  33877. +
  33878. +    * cc-mode.el: changed c++-brace-}-else-{-p to c++-brace-else-brace-p
  33879. +
  33880. +    * cc-mode.el: fixed hanging base classes for multiple inheritance
  33881. +
  33882. +    * cc-mode.el:
  33883. +    completely rewrote c++-backward-to-noncomment to use c++-in-literal
  33884. +    function.
  33885. +
  33886. +    * cc-mode.el:
  33887. +    replace all beginning-of-defun calls with c++-beginning-of-defun which
  33888. +    more correctly find the true beginning of a c++ definition
  33889. +
  33890. +    * cc-mode.el:
  33891. +    fixed c++-in-literal for the case where "" appears as a string
  33892. +
  33893. +    * cc-mode.el:
  33894. +    fixed bug in c++-calculate-indent when class line is first line in
  33895. +    file. also there may be no space between the class name and colon.
  33896. +
  33897. +    * cc-mode.el:
  33898. +    fixed c++-backward-to-noncomment bug when looking at # lines
  33899. +
  33900. +    * cc-mode.el:
  33901. +    fixed indentation of top-level construct immediately preceeded by a
  33902. +    c-block comment
  33903. +
  33904. +Wed May 27 23:30:43 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33905. +
  33906. +    * cc-mode.el:
  33907. +    complete replacement for c++-in-open-string-p and c++-in-comment-p
  33908. +
  33909. +Tue May 26 22:25:39 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33910. +
  33911. +    * cc-mode.el: added Warner Losh's addition of c++-relative-offset-p
  33912. +
  33913. +    * cc-mode.el:
  33914. +    patched c++-backward-to-start-of-do to ignore do/while constructs in
  33915. +    comments
  33916. +
  33917. +    * cc-mode.el: yet another patch to c++-in-comment-p
  33918. +
  33919. +Fri May 22 18:09:04 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33920. +
  33921. +    * cc-mode.el:
  33922. +    added c++-access-specifier-offset for extra indentation for public,
  33923. +    protected, and private keyword lines
  33924. +
  33925. +Thu May 21 19:18:31 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33926. +
  33927. +    * cc-mode.el: cosmetic changes
  33928. +
  33929. +Wed May 20 22:53:43 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33930. +
  33931. +    * cc-mode.el: fixed typo with c++-always-arglist-indent-p
  33932. +
  33933. +    * cc-mode.el:
  33934. +    mode-line-format is now not completely overridden, but instead, the
  33935. +    c++-isms are tacked onto the format after the mode-name symbol (if it
  33936. +    exists).
  33937. +
  33938. +    * cc-mode.el: installed Terry Glanfield's patch to c++-indent-exp
  33939. +
  33940. +    * cc-mode.el: documented c++-always-arglist-indent, changed the name to
  33941. +    c++-always-arglist-indent-p and added to bug report list.
  33942. +
  33943. +    * cc-mode.el:
  33944. +    installed Milo Chan's patch for addition of c++-always-arglist-indent
  33945. +
  33946. +    * cc-mode.el:
  33947. +    small patch to fix whitespace only line before top-level construct
  33948. +
  33949. +    * cc-mode.el:
  33950. +    rewrote c++-tame-comments to look at a list of characters to tame.
  33951. +    Also removed c++-tame-comments-p and replaced it with
  33952. +    c++-tame-characters
  33953. +
  33954. +    * cc-mode.el: equivalenced class and struct keyword syntacticly
  33955. +
  33956. +Tue May 19 19:34:16 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33957. +
  33958. +    * cc-mode.el: fixed multiple inheritance continuation indentation
  33959. +
  33960. +    * cc-mode.el: fixed indentation for member init lists when colon hangs
  33961. +
  33962. +    * cc-mode.el:
  33963. +    1. c++-electric-colon is made smarter so that it only adds newlines
  33964. +       after a colong when absolutely necessary
  33965. +    
  33966. +    2. extended semantics of c++-hanging-member-init-colon
  33967. +
  33968. +    * cc-mode.el: fixed small bug in constness fix of 2.55
  33969. +
  33970. +Mon May 18 21:55:14 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33971. +
  33972. +    * cc-mode.el: fixed top level enum constructs
  33973. +
  33974. +    * cc-mode.el: fixed indentation when inputing after a const function
  33975. +
  33976. +    * cc-mode.el: handle default: lines exactly line case: lines
  33977. +
  33978. +Thu May 14 21:37:53 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33979. +
  33980. +    * cc-mode.el: updated info at top of file re, bug reports
  33981. +
  33982. +    * cc-mode.el:
  33983. +    fixed continued statements inside a simple for/if style loop
  33984. +
  33985. +    * cc-mode.el: fixed member-init bug introduced in v2.47
  33986. +
  33987. +Wed May 13 20:45:33 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33988. +
  33989. +    * cc-mode.el: yet another patch to c++-in-comment-p
  33990. +
  33991. +    * cc-mode.el:
  33992. +    added interactive command c++-version and bound it to C-c C-v
  33993. +
  33994. +Tue May 12 21:37:20 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33995. +
  33996. +    * cc-mode.el: another patch to c++-in-comment-p
  33997. +
  33998. +    * cc-mode.el:
  33999. +    fixed c++-calculate-indent to ignore parens and such which occur in
  34000. +    comment regions during the initial iterative parse of the defun.
  34001. +
  34002. +    * cc-mode.el:
  34003. +    in c++-in-comment-p, it was necessary to set ?/ temporarily to ". 14"
  34004. +    class so that c++ style comments wouldn't affect parse-partial-sexp
  34005. +
  34006. +    * cc-mode.el:
  34007. +    tab does not insert a C style comment block continuation line when
  34008. +    point is on or before the first non-whitespace character on the line.
  34009. +
  34010. +Mon May 11 22:28:30 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34011. +
  34012. +    * cc-mode.el: added variable c++-tame-comments-p
  34013. +
  34014. +    * cc-mode.el:
  34015. +    fixed c++-in-comment-p to handle special case of C style block comments
  34016. +
  34017. +    * cc-mode.el: added some documentation to c++-mode
  34018. +
  34019. +    * cc-mode.el:
  34020. +    C-c C-b is the accepted standard for c++-submit-bug-report
  34021. +
  34022. +Fri May  8 20:47:38 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34023. +
  34024. +    * cc-mode.el:
  34025. +    1. cleaned up all the intro information at the top of the file
  34026. +    2. added c++-submit-bug-report function and related variables.
  34027. +
  34028. +    * cc-mode.el: fixed mailing list info
  34029. +
  34030. +    * cc-mode.el: added information about c++-mode-victims mailing list.
  34031. +
  34032. +    * cc-mode.el:
  34033. +    fixed c++-tame-comments. now we tame all string and parenthesis class
  34034. +    characters.
  34035. +
  34036. +    * cc-mode.el:
  34037. +    changed syntax of single quote back to string class and added
  34038. +    c++-electric-tick and c++-tame-ticks defuns to handle backslashifying
  34039. +    single quotes in comment areas.
  34040. +
  34041. +Thu May  7 20:03:32 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34042. +
  34043. +    * cc-mode.el:
  34044. +    added fix by Reed Hastings <reed@adapt.net.com> so that c++-indent-exp
  34045. +    can properly terminate when // style comments are found within the
  34046. +    function.
  34047. +
  34048. +    * cc-mode.el:
  34049. +    c++-calculate-indent should now not re-indent comment-only lines which
  34050. +    begin in comment-column
  34051. +
  34052. +    * cc-mode.el:
  34053. +    fixed c++-electric-terminator insertion when auto-newline fills a long
  34054. +    line due to auto-fill being on.
  34055. +
  34056. +    * cc-mode.el:
  34057. +    comment only lines which continue previous line's comment field would
  34058. +    probably be indented in comment-column so those comments which begin
  34059. +    in comment-column don't indent
  34060. +
  34061. +Wed May  6 17:29:16 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34062. +
  34063. +    * cc-mode.el:
  34064. +    handle comment-only lines which continue from the previous line.
  34065. +
  34066. +Mon May  4 23:33:51 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34067. +
  34068. +    * cc-mode.el:
  34069. +    added a few of Hallvard's speedups (but not the c++-auto-newline one)
  34070. +
  34071. +    * cc-mode.el: changed all functions to conform to c++-<func> style
  34072. +
  34073. +    * cc-mode.el:
  34074. +    changed the variable c-tab-always-indent to c++-tab-always-indent and
  34075. +    extended this variable's functionality.
  34076. +
  34077. +    * cc-mode.el: forgot to remove the debug statement
  34078. +
  34079. +    * cc-mode.el: simplified c++-cleanup-}-else-{-p
  34080. +
  34081. +Sat May  2 18:12:21 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34082. +
  34083. +    * cc-mode.el: changed c++-cleanup-}-else-{ to c++-cleanup-}-else-{-p
  34084. +
  34085. +Fri May  1 21:09:09 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34086. +
  34087. +    * cc-mode.el:
  34088. +    beginnings of } else { cleanup, but not completely bugless yet
  34089. +
  34090. +    * cc-mode.el:
  34091. +    fixed indent-c++-exp. when setting this-indent as max of different
  34092. +    values, max it with 0 not 1, otherwise some things won't ever end up
  34093. +    in column zero.
  34094. +
  34095. +    * cc-mode.el:
  34096. +    I think I've extended calculate-c++-indent to properly handle
  34097. +    switch/case statements (at least the style that I use).
  34098. +
  34099. +Thu Apr 30 22:21:51 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34100. +
  34101. +    * cc-mode.el: added c++-backward-to-start-of-do, which is analogous to
  34102. +    c-backward-to-start-of-if and finds the corresponding preceding do for
  34103. +    a do/while statement.  made the necessary changes to
  34104. +    calculate-c++-indent to handle nested do's
  34105. +
  34106. +    * cc-mode.el:
  34107. +    this version will now handle continued statements with no compound
  34108. +    statements on ifs, elses, fors, dos, and whiles.
  34109. +
  34110. +    * cc-mode.el: add tab-width to the list of variables to dump...
  34111. +
  34112. +Wed Apr 29 22:23:25 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34113. +
  34114. +    * cc-mode.el:
  34115. +    simplification of auto-hungry functions and mode-line updates with
  34116. +    much thanks to Hallvard Furuseth.
  34117. +
  34118. +    * cc-mode.el:
  34119. +    copied c++-in-parens-p from c-mode's c-inside-parens-p.  this is so we
  34120. +    can play with trying to work around emacs' bogus syntax bugs. we'll
  34121. +    see if the new behavior is any better
  34122. +
  34123. +    * cc-mode.el:
  34124. +    eliminate infinite loop bug in c++-indent-defun by using a marker.
  34125. +    this is necessary since c++-indent-line could change the location of
  34126. +    the marker and just saving its buffer position is not sufficient.
  34127. +
  34128. +    * cc-mode.el:
  34129. +    close parens act like close braces by indenting to c-indent-level
  34130. +    plus value of c++-block-close-brace-offset.
  34131. +
  34132. +    * cc-mode.el:
  34133. +    fixed infinite loop problem in c++-indent-defun which was caused by
  34134. +    substituting forward-line for next-line.
  34135. +
  34136. +    * cc-mode.el: some changes to calculate-c++-indent defun
  34137. +    1. fixed unbalanced paren problem (emacs bug) in comment by adding a
  34138. +       paren to the j.peck hack comment (probably should eventually clean
  34139. +       up these comments)
  34140. +    
  34141. +    2. applied Doug Moore's (dougm@cs.rice.edu) patch to fix continued
  34142. +       function declarations of the form:
  34143. +    
  34144. +       int foo( int i,
  34145. +                int j );
  34146. +       ^---- next line should only indent to here
  34147. +    
  34148. +    3. cleaned up some comment sections
  34149. +
  34150. +    * cc-mode.el:
  34151. +    added the variable c++-block-close-brace-offset for modifying the
  34152. +    offset of close braces for non-top level blocks (i.e. braces which
  34153. +    don't close a function).
  34154. +
  34155. +    * cc-mode.el:
  34156. +    removed c++-delete-is-hungry-in-literals-p.  Delete key is now,
  34157. +    *never* hungry inside literals.
  34158. +
  34159. +Tue Apr 28 22:38:35 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34160. +
  34161. +    * cc-mode.el: fixed free variable problems in indent-c++-exp
  34162. +    1. innerloop-done was let'ed as inner-loop-done. changed all
  34163. +       innerloop-done's to inner-loop-done in body of defun
  34164. +    
  34165. +    2. last-depth wasn't let'ed
  34166. +
  34167. +    * cc-mode.el:
  34168. +    added c++-delete-is-hungry-in-literals-p to control whether
  34169. +    hungry-delete consumes whitespace even in literals.
  34170. +
  34171. +    * cc-mode.el:
  34172. +    whoops, parse-start was a free variable in c++-at-top-level-p. I just
  34173. +    added the local binding to the let statement in that defun.
  34174. +
  34175. +    * cc-mode.el:
  34176. +    changed c++-hanging-braces-p to c++-hanging-braces. this variable can
  34177. +    now control whether hanging braces happen always, never, or only on
  34178. +    non-top level open braces.
  34179. +
  34180. +    * cc-mode.el: fixed comment-only line related bugs:
  34181. +    
  34182. +    1. comment-only lines not in the first column, but at the top level
  34183. +       were inserting all tab characters.
  34184. +    
  34185. +    2. fixed #1, but this caused non-comment top-level lines which follow
  34186. +       indented top-level comment-only lines to indent, which they
  34187. +       shouldn't do.
  34188. +    
  34189. +    I think this fixes all repercussions of comment-only lines.
  34190. +
  34191. +    * cc-mode.el:
  34192. +    replaced all next-line's with forward-line's since next-line is really
  34193. +    a user level function (and may be overloaded by the user).
  34194. +
  34195. +Mon Apr 27 16:03:29 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34196. +
  34197. +    * cc-mode.el:
  34198. +    fixed enum entry bug reported by Rolf Schreiber by patching
  34199. +    c++-backward-to-noncomment.  it is possible that (max (point-bol) lim)
  34200. +    is greater than point, which chokes the search-backward call.  I now
  34201. +    have a test for sblim being less than or equal to point.
  34202. +
  34203. +Fri Apr 24 22:02:47 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34204. +
  34205. +    * cc-mode.el:
  34206. +    1. added documentation in c++-mode for auto-hungry states and related
  34207. +       variables.
  34208. +    2. removed duplicated setq's in c++-mode buffer-local-variable setups
  34209. +
  34210. +    * cc-mode.el: more header doc information
  34211. +
  34212. +Wed Apr 22 22:30:31 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34213. +
  34214. +    * cc-mode.el: final clean up before posting
  34215. +
  34216. +    * cc-mode.el: bumping to baseline rev number 2.0
  34217. +
  34218. +Thu Apr 16 17:05:40 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34219. +
  34220. +    * cc-mode.el: added LCD Archive Entry and new file header format
  34221. +
  34222. +Wed Apr 15 19:44:38 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34223. +
  34224. +    * cc-mode.el:
  34225. +    fixed column zero comment-only line indentation problem when inside a
  34226. +    containing-sexp.
  34227. +
  34228. +    * cc-mode.el: needed to add a trailing newline for proper unsharing
  34229. +
  34230. +Tue Apr 14 18:12:22 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34231. +
  34232. +    * cc-mode.el: Bumping
  34233. +
  34234. +    * cc-mode.el: added bug reporting information
  34235. +
  34236. +Fri Apr 10 17:48:46 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34237. +
  34238. +    * cc-mode.el: cleaned up c++-mode doc string
  34239. +
  34240. +    * cc-mode.el:
  34241. +    1. updated mode documentation string for c++-mode to include new
  34242. +       variables.
  34243. +    
  34244. +    2. changed c++-auto-hungry-toggle-p to c++-auto-hungry-toggle since it
  34245. +       is not a binary valued variable.
  34246. +
  34247. +    * cc-mode.el:
  34248. +    changed ' syntax back to string quote instead of punctuation
  34249. +
  34250. +Thu Apr  9 22:26:00 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34251. +
  34252. +    * cc-mode.el: added a (goto-char (point-min)) in c++-dump-state
  34253. +
  34254. +    * cc-mode.el: added c++-dump-state function for bug reporting
  34255. +
  34256. +Tue Mar 31 23:38:56 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34257. +
  34258. +    * cc-mode.el: lots of toggling options, plus individual toggling for
  34259. +    hungry-delete-key and auto-newline states.
  34260. +
  34261. +    * cc-mode.el: added organization
  34262. +
  34263. +Fri Mar 27 23:19:32 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34264. +
  34265. +    * cc-mode.el: major renovation on auto/hungry toggling
  34266. +
  34267. +Thu Mar 26 23:43:09 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34268. +
  34269. +    * cc-mode.el:
  34270. +    use better mode-line formatting instead of hacking mode-name
  34271. +
  34272. +Fri Mar 20 20:38:29 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34273. +
  34274. +    * cc-mode.el:
  34275. +    made buffer-local c++-auto-newline and c++-hungry-delete-key-p
  34276. +
  34277. +Thu Mar 19 19:16:14 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34278. +
  34279. +    * cc-mode.el:
  34280. +    bound c++-toggle-auto-newline function to C-cC-t and compacted info
  34281. +    mode name
  34282. +
  34283. +    * cc-mode.el:
  34284. +    use better mode-line updating than (redraw-display) in c++-toggle-auto-newline
  34285. +
  34286. +Wed Mar 18 19:52:14 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34287. +
  34288. +    * cc-mode.el: fixed display of c++-toggle-auto-newline
  34289. +
  34290. +Tue Mar 17 21:01:05 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34291. +
  34292. +    * cc-mode.el: test for c++-hungry-delete-key-p (typo)
  34293. +
  34294. +Mon Mar 16 22:14:18 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34295. +
  34296. +    * cc-mode.el: added c++-hungry-delete-key-p
  34297. +
  34298. +    * cc-mode.el: handles auto newline for member init list
  34299. +
  34300. +    * cc-mode.el: replaced within-c++-string w/ c++-in-open-string-p
  34301. +
  34302. +    * cc-mode.el: lots of fixes for:
  34303. +    1. column zero comments don't indent
  34304. +    2. made electric chars comment & open-string safe
  34305. +    3. made electric brace w/auto-fill work
  34306. +    4. made calculate-c++-indent work for while( foo ) style
  34307. +    5. added c++-hanging-braces-p for no auto-newline on left braces
  34308. +
  34309. +Sat Mar 14 07:01:14 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34310. +
  34311. +    * cc-mode.el:
  34312. +    fixed double-colon and various other problems with c-auto-newline
  34313. +    also changed c-auto-newline to c++-auto-newline
  34314. +
  34315. +    * cc-mode.el: fixed c-auto-newline for double colons and }; syntax
  34316. +
  34317. +    * cc-mode.el: fixed autoindent of comments for hanging arithmetic
  34318. +
  34319. +Fri Mar 13 23:47:34 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34320. +
  34321. +    * cc-mode.el: better documentation for electric-c++-slash
  34322. +
  34323. +    * cc-mode.el:
  34324. +    fixed c++-indent-line to work with electric-c++-slash and bind "/" to it
  34325. +
  34326. +    * cc-mode.el: added c++-comment-only-line-offset
  34327. +
  34328. +    * cc-mode.el: Initial revision
  34329. +
  34330. diff -ru --new-file baseline/fsf/emacs/site-lisp/DUMPING amiga/fsf/emacs/site-lisp/DUMPING
  34331. --- baseline/fsf/emacs/site-lisp/DUMPING    Wed Dec 31 17:00:00 1969
  34332. +++ amiga/fsf/emacs/site-lisp/DUMPING    Sun Oct 15 17:07:17 1995
  34333. @@ -0,0 +1,132 @@
  34334. +DUMPING instructions for cc-mode.el 4.85
  34335. +Barry A. Warsaw <bwarsaw@cnri.reston.va.us>
  34336. +1994/09/10 17:30:12
  34337. +
  34338. +For now, you're going to be kind of on your own, but here are my, and
  34339. +other, experiences in dumping Emacs with cc-mode.  If you like
  34340. +cc-mode.el, you should lobby RMS to adopt it as *the* c-mode,
  34341. +c++-mode, and objc-mode for FSF's Emacs.  Note that if you are using
  34342. +XEmacs 19.11 (formerly Lucid Emacs), you do not need to do any of
  34343. +this.  XEmacs comes with cc-mode already dumped.  Yay!
  34344. +
  34345. +    Do this:
  34346. +
  34347. +    % cd <wherever_c_mode.el_is>
  34348. +    % mv c-mode.el c-mode.el.bak
  34349. +    % mv cc-mode.el c-mode.el
  34350. +
  34351. +    Then byte-compile c-mode.el to produce c-mode.elc
  34352. +
  34353. +    In both FSF 19.22 and Lucid 19.9 version.el is loaded too late in
  34354. +    the loadup.el file.  cc-mode.el depends on the value of
  34355. +    emacs-version so you need to move the load of version.el higher up
  34356. +    in the file.
  34357. +
  34358. +    You may need to crank up PURESIZE in src/pursize.h.  I found I had
  34359. +    to add about 14k, others have reported an increase of ~23k, but of
  34360. +    course YMMV.
  34361. +
  34362. +    Tell your users not to add the f/makunbound's or autoloads to
  34363. +    their .emacs files, since they'll now get cc-mode for free.
  34364. +
  34365. +    In Lucid 19.9, loaddefs.el contains a lot of automatically
  34366. +    generated autoload definitions which will cause warnings when it
  34367. +    finds pointers to doc strings.  You can either ignore these
  34368. +    warnings (they won't hurt you), or you can comment out the
  34369. +    autoloads for c++-mode and c-style.  Or you can regenerate the
  34370. +    automatic autoloads once you've moved c++-mode.el and c-mode.el
  34371. +    aside, but you'll have to figure this part out by yourself.
  34372. +
  34373. +    I've also been told that under FSF Emacs 19, you have to get rid
  34374. +    of the autoloads for cplus-md*.el since c++-mode.el has been
  34375. +    renamed. You should also do an update-directory-autoloads on the
  34376. +    lisp directory before you redump.
  34377. +
  34378. +
  34379. +Andrew Hall <fmrco!ahall@uunet.uu.net> provides this diff which
  34380. +applies to FSF's Emacs 19.25.90 loaddefs.el file.  This zaps the
  34381. +autoloads for cplus-md.el and c-mode.el so you shouldn't need to do an
  34382. +update-directory-autoloads.
  34383. +
  34384. +*** loaddefs.el.orig    Sat Jul  2 15:39:30 1994
  34385. +--- loaddefs.el    Thu Jul 21 12:23:22 1994
  34386. +***************
  34387. +*** 1959,2035 ****
  34388. +  
  34389. +  ;;;***
  34390. +  
  34391. +- ;;;### (autoloads (c++-mode) "cplus-md" "cplus-md.el" (11649 1462))
  34392. +- ;;; Generated autoloads from cplus-md.el
  34393. +- 
  34394. +- (autoload (quote c++-mode) "cplus-md" "\
  34395. +- Major mode for editing C++ code.  Very much like editing C code.
  34396. +- Expression and list commands understand all C++ brackets.
  34397. +- Tab at left margin indents for C++ code
  34398. +- Comments are delimited with /* ... */ {or with // ... <newline>}
  34399. +- Paragraphs are separated by blank lines only.
  34400. +- Delete converts tabs to spaces as it moves back.
  34401. +- \\{c++-mode-map}
  34402. +- Variables controlling indentation style:
  34403. +-  c-tab-always-indent
  34404. +-     Non-nil means TAB in C mode should always reindent the current line,
  34405. +-     regardless of where in the line point is when the TAB command is used.
  34406. +-     Default is t.
  34407. +-  c-auto-newline
  34408. +-     Non-nil means automatically newline before and after braces,
  34409. +-     and after colons and semicolons, inserted in C code.
  34410. +-  c-indent-level
  34411. +-     Indentation of C statements within surrounding block.
  34412. +-     The surrounding block's indentation is the indentation
  34413. +-     of the line on which the open-brace appears.
  34414. +-  c-continued-statement-offset
  34415. +-     Extra indentation given to a substatement, such as the
  34416. +-     then-clause of an if or body of a while.
  34417. +-  c-continued-brace-offset
  34418. +-     Extra indentation given to a brace that starts a substatement.
  34419. +-     This is in addition to c-continued-statement-offset.
  34420. +-  c-brace-offset
  34421. +-     Extra indentation for line if it starts with an open brace.
  34422. +-  c-brace-imaginary-offset
  34423. +-     An open brace following other text is treated as if it were
  34424. +-     this far to the right of the start of its line.
  34425. +-  c-argdecl-indent
  34426. +-     Indentation level of declarations of C function arguments.
  34427. +-  c-label-offset
  34428. +-     Extra indentation for line that is a label, or case or ``default:'', or
  34429. +-     ``public:'' or ``private:'', or ``protected:''.
  34430. +-  c++-electric-colon
  34431. +-     If non-nil at invocation of c++-mode (t is the default) colon electricly
  34432. +-     indents.
  34433. +-  c++-empty-arglist-indent
  34434. +-     If non-nil, a function declaration or invocation which ends a line with a
  34435. +-     left paren is indented this many extra spaces, instead of flush with the
  34436. +-     left paren.
  34437. +-  c++-friend-offset
  34438. +-     Offset of C++ friend declarations relative to member declarations.
  34439. +-  c++-member-init-indent
  34440. +-     Indentation level of member initializations in function declarations,
  34441. +-     if they are on a separate line beginning with a colon.
  34442. +-  c++-continued-member-init-offset
  34443. +-     Extra indentation for continuation lines of member initializations; NIL
  34444. +-     means to align with previous initializations rather than with the colon.
  34445. +- 
  34446. +- Settings for K&R, BSD, and Stroustrup indentation styles are
  34447. +-   c-indent-level                5    8    4
  34448. +-   c-continued-statement-offset  5    8    4
  34449. +-   c-continued-brace-offset                0
  34450. +-   c-brace-offset               -5   -8    0
  34451. +-   c-brace-imaginary-offset                0
  34452. +-   c-argdecl-indent              0    8    4
  34453. +-   c-label-offset               -5   -8   -4
  34454. +-   c++-empty-arglist-indent                4
  34455. +-   c++-friend-offset                       0
  34456. +- 
  34457. +- Turning on C++ mode calls the value of the variable `c++-mode-hook' with
  34458. +- no args if that value is non-nil." t nil)
  34459. +- 
  34460. +- ;;;***
  34461. +- 
  34462. +  ;;;### (autoloads (dabbrev-expand) "dabbrev" "dabbrev.el" (11577 36858))
  34463. +  ;;; Generated autoloads from dabbrev.el
  34464. +  
  34465. +--- 1959,1964 ----
  34466. diff -ru --new-file baseline/fsf/emacs/site-lisp/MANIFEST amiga/fsf/emacs/site-lisp/MANIFEST
  34467. --- baseline/fsf/emacs/site-lisp/MANIFEST    Wed Dec 31 17:00:00 1969
  34468. +++ amiga/fsf/emacs/site-lisp/MANIFEST    Sun Oct 15 17:07:21 1995
  34469. @@ -0,0 +1,29 @@
  34470. +MANIFEST for tar distribution of cc-mode.el 4.85
  34471. +Barry A. Warsaw <bwarsaw@cnri.reston.va.us>
  34472. +1994/09/10 17:46:02
  34473. +
  34474. +You should have received the following files in the distribution tar
  34475. +file for cc-mode 4.85:
  34476. +
  34477. +    MANIFEST: This file
  34478. +
  34479. +    cc-mode.el: Version 4.85 of the mode.
  34480. +
  34481. +    cc-compat.el: version 1.2.  Helps ease the transition from
  34482. +    c-mode.el to cc-mode style indentation control.  This is provided
  34483. +    for your convenience only, and is completely unguaranteed and
  34484. +    unsupported.
  34485. +
  34486. +    cc-mode-18.el: Emacs 18 compatibility file.  This is provided for
  34487. +    your convenience only, and is completely unguaranteed and
  34488. +    unsupported.  Emacs 18 support will probably be completely dropped
  34489. +    in cc-mode version 5.
  34490. +
  34491. +    README: manual on how to use cc-mode to edit C, C++, and
  34492. +    Objective-C files. Eventually this will be replaced by a texinfo
  34493. +    manual.  VOLUNTEERS ARE SOUGHT to help complete the manual.
  34494. +
  34495. +    DUMPING: A guide to ditching c-mode.el and c++-mode.el in favor of
  34496. +    cc-mode.el.  Unnecessary for XEmacs 19.11!  Yay!
  34497. +
  34498. +    ChangeLog: Extremely verbose history of changes.
  34499. diff -ru --new-file baseline/fsf/emacs/site-lisp/README amiga/fsf/emacs/site-lisp/README
  34500. --- baseline/fsf/emacs/site-lisp/README    Wed Dec 31 17:00:00 1969
  34501. +++ amiga/fsf/emacs/site-lisp/README    Sun Oct 15 17:07:22 1995
  34502. @@ -0,0 +1,847 @@
  34503. +README for cc-mode.el 4.85
  34504. +Barry A. Warsaw <bwarsaw@cnri.reston.va.us>
  34505. +1994/09/10 17:18:01
  34506. +
  34507. +Note, you can browse this file either as a flat, multiple page file,
  34508. +or as an Emacs outline.  As a flat file, just use "C-x ]" to move
  34509. +forward one page, or "C-x [" to move backward one page.  To read this
  34510. +as an outline, hit "M-x outline-mode RET".  outline-mode is described
  34511. +in your Emacs documentation.
  34512. +
  34513. +
  34514. +* Introduction
  34515. +
  34516. +    Welcome to cc-mode, version 4.  This is a Emacs Lisp mode for
  34517. +    editing C, C++, and Objective-C in GNU Emacs.  This mode is
  34518. +    decendent from c-mode.el (also called "Boring Old C Mode" or bocm
  34519. +    :-), and c++-mode.el, version 2, which I have been maintaining
  34520. +    since 1992.  cc-mode represents a significant milestone in the
  34521. +    mode's life.  It has been fully merged back with Emacs 19's
  34522. +    c-mode.el. Also a new, more intuitive and flexible mechanism for
  34523. +    controlling indentation has been developed.  More on this below.
  34524. +
  34525. +    You can now use cc-mode to edit K&R and ANSI C, most ARM C++, and
  34526. +    Objective-C programs.  See below for limitations.
  34527. +
  34528. +    In lieu of a texinfo manual (which is in the works -- volunteers
  34529. +    are desperately sought!), this file will describe the following:
  34530. +
  34531. +        * how to get started using cc-mode
  34532. +    * how to customize the new indentation engine
  34533. +    * the differences between cc-mode.el and bocm c-mode.el
  34534. +    * the differences between cc-mode.el and c++-mode.el.
  34535. +
  34536. +    Note that the name of the file is cc-mode.el, and I'll often refer
  34537. +    to the mode as cc-mode, but there really is no top level cc-mode
  34538. +    entry point.  I call it cc-mode simply to differentiate it from
  34539. +    c-mode.el.  All of the variables, commands, and functions in
  34540. +    cc-mode are prefixed with c-<thing>, and c-mode, c++-mode, and
  34541. +    objc-mode entry points are provided.  This file is intended to be
  34542. +    a replacement for c-mode.el and c++-mode.el -- you should be able
  34543. +    to remove them and dump Emacs with cc-mode.el instead.  See the
  34544. +    file DUMPING for details on how to do this.
  34545. +
  34546. +    The major version number was incremented to 4 with the addition of
  34547. +    objc-mode.
  34548. +
  34549. +    This distribution contains release 4.85 of cc-mode.  See below for
  34550. +    a list of changes since the last release version 4.35.  See the
  34551. +    MANIFEST for a list of files that should have been included in
  34552. +    this distribution.
  34553. +
  34554. +    XEmacs 19.11 (formerly Lucid Emacs) now comes with cc-mode.el 4.85
  34555. +    dumped in the executable.  It has completely replaced c-mode.el
  34556. +    and c++-mode.el.  Both XEmacs and this distribution now contain a
  34557. +    new file called cc-compat.el which should ease your transition
  34558. +    from bocm to cc-mode.  It comes unguaranteed and unsupported.
  34559. +
  34560. +    Note also that I am moving to a new job!  I don't yet know what
  34561. +    the state of the mailing lists will be, but for a short while, I
  34562. +    expect mail will get forwarded to my new address, so please
  34563. +    continue to send bug reports, add/drop messages to the old
  34564. +    addresses.  I'll make the appropriate announcements to the various
  34565. +    newsgroups when I know more what's going to happen.  My
  34566. +    *tentative* new email address is given above.  No guarantees that
  34567. +    will really be it, as I don't start the job until Sept. 19, 1994.
  34568. +    Don't try sending mail there at least until after that date.
  34569. +
  34570. +
  34571. +* Getting Started
  34572. +
  34573. +    cc-mode.el works well with the 2 main branches of Emacs 19, XEmacs
  34574. +    (former Lucid Emacs) and the Emacs 19 maintained by the FSF.
  34575. +    FSF's Emacs 19 users will want to use Emacs version 19.21 or
  34576. +    better, XEmacs/Lucid users will want 19.6 or better.  cc-mode.el
  34577. +    works moderately well with Emacs 18, if you use the cc-mode-18.el
  34578. +    compatibility file.  A word of warning though, Emacs 18 lacks some
  34579. +    fundamental functionality that makes Emacs 18 support a losing
  34580. +    battle.  Hence it is no longer supported and it is highly
  34581. +    recommended that you upgrade to Emacs 19.  If you use cc-mode
  34582. +    under Emacs 18, you're on your own.  With cc-mode version 5, Emacs
  34583. +    18 support will be dropped altogether.
  34584. +
  34585. +    The first thing you want to do is put cc-mode.el somewhere on your
  34586. +    load-path where Emacs can find it.  Do a "C-h v load-path" to see
  34587. +    all the directories Emacs looks at when loading a file.  If none
  34588. +    of these directories are appropriate, create a new directory and
  34589. +    add it to your load-path:
  34590. +
  34591. +        [in the shell]
  34592. +    % cd
  34593. +    % mkdir mylisp
  34594. +    % mv cc-mode.el mylisp
  34595. +    % cd mylisp
  34596. +
  34597. +    [in your .emacs file add]
  34598. +    (setq load-path (cons "~/mylisp" load-path))
  34599. +
  34600. +    Next you want to byte-compile cc-mode.el.  The mode uses a lot of
  34601. +    macros so if you don't byte-compile it, things will be unbearably
  34602. +    slow.  YOU CAN IGNORE ALL BYTE-COMPILER WARNINGS!  They are the
  34603. +    result of the multi-Emacs support and none of the warnings have
  34604. +    any effect on operation. Let me say this again: YOU REALLY CAN
  34605. +    IGNORE ALL BYTE-COMPILER WARNINGS!
  34606. +
  34607. +    Here's what to do to byte-comple the file [in emacs]:
  34608. +
  34609. +    M-x byte-compile-file RET ~/mylisp/cc-mode.el RET
  34610. +
  34611. +    Most users will probably be running an Emacs that already has bocm
  34612. +    c-mode.el dumped.  You will not want to use this, or any older
  34613. +    releases of c++-mode.el if you use cc-mode.el.  If your Emacs is
  34614. +    dumped with either of these files you first need to make Emacs
  34615. +    "forget" about those older modes.
  34616. +
  34617. +    If you can do a "C-h v c-mode-map" you probably need to add these
  34618. +    lines at the top of your .emacs file:
  34619. +
  34620. +        (fmakunbound 'c-mode)
  34621. +        (makunbound 'c-mode-map)
  34622. +        (fmakunbound 'c++-mode)
  34623. +        (makunbound 'c++-mode-map)
  34624. +    (makunbound 'c-style-alist)
  34625. +
  34626. +    After those lines you will want to add the following autoloads to
  34627. +    your .emacs file so that cc-mode gets loaded at the right time:
  34628. +
  34629. +        (autoload 'c++-mode  "cc-mode" "C++ Editing Mode" t)
  34630. +        (autoload 'c-mode    "cc-mode" "C Editing Mode" t)
  34631. +        (autoload 'objc-mode "cc-mode" "Objective-C Editing Mode" t)
  34632. +
  34633. +    Important note: XEmacs 19.11 already have cc-mode.el dumped in
  34634. +    their Emacs, so if you are using that Emacs, do *not* add the
  34635. +    *makunbound or autoload lines above!
  34636. +
  34637. +    Next, you will want to set up Emacs so that it edits C files in
  34638. +    c-mode, C++ files in c++-mode, and Objective-C files in objc-mode.
  34639. +    All users (including XEmacs users) should add the following to
  34640. +    your .emacs file after the autoload lines above.  Note that this
  34641. +    assumes you'll be editing .h and .c files as C, .hh, .C, and .cc
  34642. +    files as C++, and .m files as Objective-C. Your mileage may vary:
  34643. +
  34644. +    (setq auto-mode-alist
  34645. +      (append '(("\\.C$"     . c++-mode)
  34646. +            ("\\.cc$"    . c++-mode)
  34647. +            ("\\.hh$"    . c++-mode)
  34648. +            ("\\.c$"     . c-mode)
  34649. +            ("\\.h$"     . c-mode)
  34650. +            ("\\.m$"  . objc-mode)
  34651. +           ) auto-mode-alist))
  34652. +
  34653. +    You may already have some or all of these settings on your
  34654. +    auto-mode-alist, but it won't hurt to put them on there again.
  34655. +
  34656. +    That's all you need. After you've done all this, you should quit
  34657. +    and restart Emacs.  The next time you visit a C, C++, or
  34658. +    Objective-C file you should be using cc-mode.  You can check this
  34659. +    easily by hitting "C-c C-v" in the c-mode, c++-mode, or objc-mode
  34660. +    buffer.  You should see this message in the echo area:
  34661. +
  34662. +        Using cc-mode version 4.85
  34663. +
  34664. +
  34665. +* New indentation engine
  34666. +
  34667. +    cc-mode has a new indentation engine, providing a simplified, yet
  34668. +    flexible and general mechanism for customizing indentation. It
  34669. +    breaks indentation calculation into two steps. First it tries to
  34670. +    figure out what kind of language construct its looking at, then it
  34671. +    applies a user defined offset to the current line based on the
  34672. +    type of construct it finds.
  34673. +
  34674. +    This section will briefly cover how indentation is calculated in
  34675. +    cc-mode. Only enough detail will be given so that you will know
  34676. +    how to customize indentation.  Plenty of examples will be given to
  34677. +    help you stylize your code, but more detailed examples will be
  34678. +    left to the texinfo manual (when it is complete) and your own
  34679. +    exploration.  You can also contact the help address given below.
  34680. +
  34681. +** Step 1: Syntactic Analysis
  34682. +
  34683. +    In the first step, cc-mode looks at the line you are currently
  34684. +    indenting and tries to determine the syntactic components of the
  34685. +    construct on that line.  cc-mode builds a list of these syntactic
  34686. +    components, where each component on the list contains a "syntactic
  34687. +    symbol" and a relative buffer position.  Syntactic symbols
  34688. +    describe elements of C/C++/Objc code such as `statement',
  34689. +    `substatement', `class-open', `class-close', `knr-argdecl', etc.
  34690. +    You can do a "C-h v c-offsets-alist" to see the entire list of
  34691. +    support syntactic symbols along with a description of the
  34692. +    constructs they represent.
  34693. +
  34694. +    Conceptually, a line of C/C++/Objc code is always indented
  34695. +    relative to the indentation of some line higher up in the buffer.
  34696. +    This is represented by the relative buffer positions in the
  34697. +    syntactic component list.
  34698. +
  34699. +    Here's an example. Suppose we had the following code in a c++-mode
  34700. +    buffer (the line numbers don't actually appear in the buffer):
  34701. +
  34702. +  Example 1:
  34703. +
  34704. +    1: void swap( int& a, int& b ) 
  34705. +    2: {
  34706. +    3:     int tmp = a;
  34707. +    4:     a = b;
  34708. +    5:     b = tmp;
  34709. +    6: }
  34710. +
  34711. +    We can use the command C-c C-s (c-show-syntactic-information) to
  34712. +    simply report what syntactic analysis is for a line.  If we hit
  34713. +    C-c C-s on line 4, we'd see in the echo area:
  34714. +
  34715. +        ((statement . 36))
  34716. +
  34717. +    This tells us that the line is a statement and it is indented
  34718. +    relative to buffer position 36, which happens to be the `i' in
  34719. +    "int" on line 3.  If you were to move point to line 3 and hit C-c
  34720. +    C-s, you would see:
  34721. +
  34722. +        ((defun-block-intro . 30))
  34723. +
  34724. +    This indicates that the `int' line is the first statement in a
  34725. +    block, and is indented relative to buffer position 30, which is
  34726. +    the brace just after the function header.
  34727. +
  34728. +    Here's another example:
  34729. +
  34730. +  Example 2:
  34731. +
  34732. +    1: int add( int val, int incr, int doit )
  34733. +    2: {
  34734. +    3:     if( doit )
  34735. +    4:         {
  34736. +    5:             return( val + incr );
  34737. +    6:         }
  34738. +    7:     return( val );
  34739. +    8: }
  34740. +
  34741. +    Hitting C-c C-s on line 4 gives us:
  34742. +
  34743. +        ((substatement-open . 46))
  34744. +
  34745. +    which tells us that this is a brace that `opens' a substatement
  34746. +    block. By the way, a `substatement' indicates the line after an
  34747. +    if, else, while, do, switch, and for statements.  See the variable
  34748. +    c-offsets-alist for a full description of the available syntactic
  34749. +    symbols.
  34750. +
  34751. +    Syntactic analysis lists can contain more than one element
  34752. +    (i.e. cons cell), and syntactic symbols need not have relative
  34753. +    buffer positions.
  34754. +
  34755. +** Step 2: Indentation Calculation
  34756. +
  34757. +    Indentation for the current line is calculated using the list of
  34758. +    syntactic components derived in step 1 above.  Each component
  34759. +    contributes to the final total indentation of the line in two
  34760. +    ways.
  34761. +
  34762. +    First, the syntactic symbol is looked up in the c-offsets-alist
  34763. +    variable, which is an association list of syntactic symbols and
  34764. +    the offsets to apply for those symbols.  This offset is added to
  34765. +    the running total.
  34766. +
  34767. +    Second, if the component has a relative buffer position, cc-mode
  34768. +    adds the column number of that position to the running total.  By
  34769. +    adding up the offsets and columns for every syntactic component on
  34770. +    the list, the final total indentation for the current line is
  34771. +    computed.
  34772. +
  34773. +    Lets use our two code examples above to see how this works.  Just
  34774. +    as a reminder and a convenience the code is presented again here.
  34775. +
  34776. +  Example 1:
  34777. +
  34778. +    1: void swap( int& a, int& b ) 
  34779. +    2: {
  34780. +    3:     int tmp = a;
  34781. +    4:     a = b;
  34782. +    5:     b = tmp;
  34783. +    6: }
  34784. +
  34785. +    Lets say point is on line 3 and we hit the TAB key to re-indent
  34786. +    the line.  Remember that the syntactic component list for that
  34787. +    line is:
  34788. +
  34789. +        ((defun-block-intro . 30))
  34790. +
  34791. +    So first cc-mode is going to look up `defun-block-intro' in the
  34792. +    c-offsets-alist variable.  Lets say it find the integer `4'; it
  34793. +    adds this to the running total (initialized to zero), yielding a
  34794. +    running total indentation of 4 spaces.
  34795. +
  34796. +    Next cc-mode goes to buffer position 30 and asks for the current
  34797. +    column.  Since the brace at buffer position 30 is in column zero,
  34798. +    it adds 0 to the running total, and since there is only one
  34799. +    syntactic component on the list for this line, the total
  34800. +    indentation for the line is 4 spaces.
  34801. +
  34802. +  Example 2:
  34803. +
  34804. +    1: int add( int val, int incr, int doit )
  34805. +    2: {
  34806. +    3:     if( doit )
  34807. +    4:         {
  34808. +    5:             return( val + incr );
  34809. +    6:         }
  34810. +    7:     return( val );
  34811. +    8: }
  34812. +
  34813. +    If we were to hit TAB on line 4 in example 2 above, the same basic
  34814. +    process is performed, despite the differences in the syntactic
  34815. +    component list.  Remember that the list for this line is:
  34816. +
  34817. +        ((substatement-open . 46))
  34818. +
  34819. +    Here, cc-mode first looks up the `substatement-open' symbol in
  34820. +    c-offsets-alist, for which it might find `4'.  At this point the
  34821. +    running total is 4 (0 + 4 = 4).  cc-mode then goes to buffer
  34822. +    position 46, which is the `i' in "if" on line 3.  This character
  34823. +    is in the fourth column on that line so adding this to the running
  34824. +    total, yields an indentation for the line of 8 spaces.
  34825. +
  34826. +    Simple, huh?
  34827. +
  34828. +    Actually, the mode usually just does The Right Thing without you
  34829. +    having to think about it in this much detail.  But when
  34830. +    customizing indentation, its good to have a general idea of the
  34831. +    indentation model being used.
  34832. +
  34833. +
  34834. +* Customizing Indentation
  34835. +
  34836. +    The c-offsets-alist variable is where you customize all your
  34837. +    indentations.  You simply need to decide what additional offset
  34838. +    you want to add for every syntactic symbol.  You can use the
  34839. +    command C-c C-o (c-set-offset) as the way to set offsets, both
  34840. +    interactively and from your mode hook.  Also, you can set up
  34841. +    "styles" of indentation just like in standard c-mode.el.  But
  34842. +    you'll probably find that most of the offsets are right for your
  34843. +    style.
  34844. +
  34845. +    In fact, the offset values in c-offsets-alist can be an integer, a
  34846. +    function or variable name, or one of the following symbols: +, -,
  34847. +    ++, or --, indicating positive or negative multiples of the
  34848. +    variable c-basic-offset.  Thus if you like the general indentation
  34849. +    levels, but you use 3 spaces instead of 4 spaces per level, you
  34850. +    can probably achieve your style by just changing c-basic-offset
  34851. +    like so (in your .emacs file):
  34852. +
  34853. +        (setq c-basic-offset 3)
  34854. +
  34855. +    The offset value can also be a function, and this can really give
  34856. +    power users a lot of flexibility in customizing indentation.
  34857. +
  34858. +    As an example of how to customize indentation, lets change the
  34859. +    style of example 2 above from:
  34860. +
  34861. +    1: int add( int val, int incr, int doit )
  34862. +    2: {
  34863. +    3:     if( doit )
  34864. +    4:         {
  34865. +    5:             return( val + incr );
  34866. +    6:         }
  34867. +    7:     return( val );
  34868. +    8: }
  34869. +
  34870. +    to:
  34871. +
  34872. +    1: int add( int val, int incr, int doit )
  34873. +    2: {
  34874. +    3:     if( doit )
  34875. +    4:     {
  34876. +    5:         return( val + incr );
  34877. +    6:     }
  34878. +    7:     return( val );
  34879. +    8: }
  34880. +
  34881. +    Since line 4 is the start of the construct we want to re-indent,
  34882. +    we first move to that line and hit C-c C-s:
  34883. +
  34884. +        ((substatement-open . 46))
  34885. +
  34886. +    So we know want to change the `substatement-open' indentation.  To
  34887. +    do this interactively, just hit C-c C-o.  This prompts you for the
  34888. +    syntactic symbol to change, giving you a reasonable default, in
  34889. +    this case, substatement-open, which is just the syntactic symbol
  34890. +    we want to change!
  34891. +
  34892. +    After you hit return cc-mode will then prompt you for the new
  34893. +    offset value, with the old value as the default.  Hit backspace to
  34894. +    delete the old value, then hit "0" and then return.  This moves
  34895. +    the construct one level of indentation to the left.
  34896. +
  34897. +    To check your changes quickly, just hit C-c C-q to reindent the
  34898. +    entire function.  If this does what you want, you can put the
  34899. +    following lisp in your c-mode-common-hook (see below for an
  34900. +    example):
  34901. +
  34902. +        (c-set-offset 'substatement-open 0)
  34903. +
  34904. +    You could also set up a "style" that sets this and all your
  34905. +    customizations in a convenient manner.  See the variable
  34906. +    c-style-alist and the command c-set-style for more information, or
  34907. +    take a look at the sample .emacs file below.
  34908. +    
  34909. +
  34910. +* Frequently Asked Questions
  34911. +
  34912. +    Q. How do I re-indent the whole file?
  34913. +    A. Visit the file and hit "C-x h" to mark the whole buffer. Then
  34914. +       hit "ESC C-\" to re-indent the entire region which you've just
  34915. +       marked.
  34916. +
  34917. +    Q. How do I re-indent the entire function? ESC C-x doesn't work
  34918. +    A. ESC C-x is reserved for future Emacs use.  To re-indent the
  34919. +       entire function hit C-c C-q.
  34920. +
  34921. +    Q. How do I re-indent the current block?
  34922. +    A. First move to the brace which opens the block with "ESC C-u",
  34923. +       then re-indent that expression with "ESC C-q".
  34924. +
  34925. +    Q. Why doesn't the RET key indent the line to where the new text
  34926. +       should go after inserting the newline?
  34927. +    A. Emacs' convention is that RET just add a new line, and that LFD
  34928. +       adds a newline and indents.  You can make RET do this too by
  34929. +       adding this to your c-mode-common-hook (see the sample .emacs
  34930. +       file below):
  34931. +
  34932. +       (define-key c-mode-map "\C-m" 'newline-and-indent)
  34933. +
  34934. +       This is a very common question. :-) If you want this to be the
  34935. +       default behavior, don't lobby me, lobby RMS!
  34936. +
  34937. +    Q. I put (c-set-offset 'substatement-open 0) in my .emacs file and
  34938. +       I get an error saying that c-set-offset's function definition is
  34939. +       void.
  34940. +    A. Since cc-mode is autoloaded, it is typically not loaded into
  34941. +       your Emacs session by the time of the c-set-offset call.
  34942. +       Instead of putting this in your top-level .emacs file, put the
  34943. +       call to c-set-offset in your c-mode-common-hook.  See the
  34944. +       sample .emacs file below for details.
  34945. +
  34946. +
  34947. +;; Sample .emacs file
  34948. +
  34949. +;; Of course there are lots of other indentation features that I
  34950. +;; haven't touched on here.  Until the texinfo is complete, you're
  34951. +;; going to have to explore these on your own.  Here's a sample .emacs
  34952. +;; file that might help you along the way.  Just hit "C-x C-p", then
  34953. +;; "ESC w" to copy this region, then paste it into your .emacs file
  34954. +;; with "C-y".  You may want to change some of the actual values.
  34955. +
  34956. +(defconst my-c-style
  34957. +  '("PERSONAL"
  34958. +    (c-tab-always-indent           . t)
  34959. +    (c-comment-only-line-offset    . 4)
  34960. +    (c-hanging-braces-alist        . ((substatement-open after)
  34961. +                      (brace-list-open)))
  34962. +    (c-hanging-colons-alist        . ((member-init-intro before)
  34963. +                      (inher-intro)
  34964. +                      (case-label after)
  34965. +                      (label after)
  34966. +                      (access-label after)))
  34967. +    (c-cleanup-list                . (scope-operator
  34968. +                      empty-defun-braces
  34969. +                      defun-close-semi))
  34970. +    (c-offsets-alist               . ((arglist-close     . c-lineup-arglist)
  34971. +                      (substatement-open . 0
  34972. +                      (case-label        . 4)
  34973. +                      (block-open        . 0)
  34974. +                      (knr-argdecl-intro . -)))
  34975. +    (c-echo-syntactic-information-p . t)
  34976. +    )
  34977. +  "My C Programming Style")
  34978. +
  34979. +;; Customizations for both c-mode and c++-mode
  34980. +(defun my-c-mode-common-hook ()
  34981. +  ;; set up for my perferred indentation style, but  only do it once
  34982. +  (let ((my-style "PERSONAL"))
  34983. +    (or (assoc my-style c-style-alist)
  34984. +    (setq c-style-alist (cons my-c-style c-style-alist)))
  34985. +    (c-set-style my-style))
  34986. +  ;; offset customizations not in my-c-style
  34987. +  (c-set-offset 'member-init-intro '++)
  34988. +  ;; other customizations
  34989. +  (setq tab-width 8
  34990. +    ;; this will make sure spaces are used instead of tabs
  34991. +    indent-tabs-mode nil)
  34992. +  ;; we like auto-newline and hungry-delete
  34993. +  (c-toggle-auto-hungry-state 1)
  34994. +  ;; keybindings for C, C++, and Objective-C.  We can put these in
  34995. +  ;; c-mode-map because c++-mode-map and objc-mode-map inherit it
  34996. +  (define-key c-mode-map "\C-m" 'newline-and-indent)
  34997. +  )
  34998. +
  34999. +;; the following only works in Emacs 19
  35000. +;; Emacs 18ers can use (setq c-mode-common-hook 'my-c-mode-common-hook)
  35001. +(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
  35002. +
  35003. +
  35004. +* User level differences between cc-mode.el and c-mode.el (as
  35005. +  distributed with FSF Emacs 19.22).
  35006. +
  35007. +    New indentation engine (described above).
  35008. +
  35009. +    Direct support for C++ and Objective-C editing.
  35010. +
  35011. +    Menubar support (Emacs 19 only).
  35012. +
  35013. +    New variables:
  35014. +        c-mode-common-hook
  35015. +        c-strict-semantics-p
  35016. +        c-echo-semantic-information-p
  35017. +        c-basic-offset
  35018. +        c-offsets-alist
  35019. +        c-comment-only-line-offset
  35020. +        c-block-comments-indent-p
  35021. +        c-cleanup-list
  35022. +        c-hanging-braces-alist
  35023. +        c-hanging-colons-alist
  35024. +        c-untame-characters (Emacs 18 users only)
  35025. +        c-special-indent-hook
  35026. +        c-delete-function
  35027. +        c-electric-pound-behavior
  35028. +        c-backscan-limit (Emacs 18 users only)
  35029. +
  35030. +    Expanded semantics for variables:
  35031. +        c-tab-always-indent
  35032. +    c-style-alist
  35033. +
  35034. +    New minor-mode features: auto-newline and hungry-delete-key (do
  35035. +    "C-h f c-toggle-auto-hungry-state RET" for more info).
  35036. +
  35037. +    New commands:
  35038. +        c-toggle-auto-state         (C-c C-a)
  35039. +    c-toggle-hungry-state       (C-c C-d)
  35040. +    c-toggle-auto-hungry-state  (C-c C-t)
  35041. +    c-electric-delete           (DEL)
  35042. +        c-electric-slash            (/)
  35043. +    c-electric-star             (*)
  35044. +    c-set-offset                (C-c C-o)
  35045. +    c-forward-into-nomenclature
  35046. +    c-backward-into-nomenclature
  35047. +    c-scope-operator
  35048. +    c-tame-insert               (Emacs 18 only)
  35049. +    c-tame-comments             (Emacs 18 only)
  35050. +    c-indent-defun              (C-c C-q)
  35051. +    c-show-semantic-information (C-c C-s)
  35052. +    c-version                   (C-c C-v)
  35053. +    c-submit-bug-report         (C-c C-b)
  35054. +
  35055. +    Renamed commands:
  35056. +        electric-c-brace      => c-electric-brace
  35057. +    electric-c-semi       => c-electric-semi&comma
  35058. +    electric-c-sharp-sign => c-electric-pound
  35059. +    mark-c-function       => c-mark-function
  35060. +        electric-c-terminator => c-electric-colon
  35061. +    indent-c-exp          => c-indent-exp
  35062. +    set-c-style           => c-set-style
  35063. +
  35064. +    Obsolete variables:
  35065. +        c-indent-level
  35066. +    c-brace-imaginary-offset
  35067. +    c-brace-offset
  35068. +    c-argdecl-indent
  35069. +    c-label-offset
  35070. +    c-continued-statement-offset
  35071. +    c-continued-brace-offset
  35072. +
  35073. +
  35074. +* User level differences between cc-mode.el and c++-mode.el 2.353
  35075. +  (a.k.a cplus-md1.el in FSF 19):
  35076. +
  35077. +    New Indentation Engine (described above).
  35078. +
  35079. +    General rename of all variables and defuns from c++-<thing> to
  35080. +    c-<thing>.  I don't list them all individually here.
  35081. +
  35082. +    Direct support for C and Objective-C editing.
  35083. +
  35084. +    Menubar support (Emacs 19 only).
  35085. +
  35086. +    New variables:
  35087. +        c-strict-semantics-p
  35088. +    c-echo-semantic-information-p
  35089. +    c-basic-offset
  35090. +    c-offsets-alist
  35091. +    c-style-alist
  35092. +
  35093. +    New commands:
  35094. +        c-set-offset
  35095. +    c-set-style
  35096. +    c-fill-paragraph
  35097. +    c-forward-into-nomenclature
  35098. +    c-backward-into-nomenclature
  35099. +    c-scope-operator
  35100. +    c-beginning-of-statement
  35101. +    c-end-of-statement
  35102. +    c-up-conditional
  35103. +    c-backward-conditional
  35104. +    c-forward-conditional
  35105. +    c-show-semantic-information
  35106. +
  35107. +    Other renamed commands/variables:
  35108. +        c++-c-mode                    => c-mode
  35109. +    c++-C-block-comments-indent-p => c-block-comments-indent-p
  35110. +        c++-hanging-braces            => c-hanging-braces-alist
  35111. +    c++-hanging-member-init-colon => c-hanging-colons-alist
  35112. +        c++-default-macroize-column   => c-backslash-column
  35113. +    c++-macroize-region           => c-backslash-region
  35114. +        c++-electric-semi             => c-electric-semi&comma
  35115. +
  35116. +    Obsolete variables/commands:
  35117. +        c++-always-arglist-indent-p
  35118. +    c++-block-close-brace-offset
  35119. +    c++-paren-as-block-close-p
  35120. +    c++-continued-member-init-offset
  35121. +    c++-member-init-indent
  35122. +    c++-friend-offset
  35123. +    c++-access-specifier-offset
  35124. +    c++-empty-arglist-indent
  35125. +    c++-auto-hungry-initial-state
  35126. +    c++-auto-hungry-toggle
  35127. +    c++-relative-offset-p
  35128. +    c++-match-header-strongly
  35129. +    c++-beginning-of-defun
  35130. +    c++-end-of-defun
  35131. +    c++-insert-header
  35132. +    c++-match-paren
  35133. +    c++-forward-sexp
  35134. +    c++-backward-sexp
  35135. +        c++-comment-region
  35136. +    c++-uncomment-region
  35137. +
  35138. +
  35139. +* For more information
  35140. +
  35141. +    The best thing to do at this point is poke around the source code.
  35142. +    Eventually there will be an extensive texinfo manual describing
  35143. +    the mode in greater detail.  Can I say this again?  Volunteers to
  35144. +    help finish the manual are desperately sought!
  35145. +
  35146. +
  35147. +* Requirements
  35148. +
  35149. +    cc-mode.el requires reporter.el for submission of bug reports.
  35150. +    reporter.el is distributed with the latest FSF and Lucid Emacs
  35151. +    19's.  See below for Emacs Lisp Archive anonymous ftp'ing
  35152. +    instructions for those of you who are using older Emacsen.
  35153. +
  35154. +
  35155. +* Limitations and Known Bugs
  35156. +
  35157. +    multi-line macros are not handled properly.
  35158. +
  35159. +    re-indenting large regions or expressions can be slow.
  35160. +
  35161. +    Use with Emacs 18 can be slow and annoying. You should seriously
  35162. +    consider upgrading to Emacs 19.
  35163. +
  35164. +    indentation of some nested switch constructs are known to be
  35165. +    broken.
  35166. +
  35167. +    there is still some weird behavior when filling C block comments.
  35168. +    My suggestion is to check out add-on fill packages such as
  35169. +    filladapt, available at the elisp archive.
  35170. +
  35171. +
  35172. +* Electronic Mail
  35173. +
  35174. +    To report bugs, use the C-c C-b (c-submit-bug-report) command.
  35175. +    This provides vital information I need to reproduce your problem.
  35176. +    Make sure you include a stripped down code example.
  35177. +
  35178. +    For other help or suggestions, send a message to
  35179. +    cc-mode-help@anthem.nlm.nih.gov.
  35180. +
  35181. +    To get on the beta testers list, send an add message to
  35182. +    cc-mode-victims-request@anthem.nlm.nih.gov.  Note that this is a
  35183. +    fairly technical discussion list so you should be moderately Emacs
  35184. +    lisp fluent and have anonymous ftp access.
  35185. +
  35186. +    There is also an announce only list where you will get beta
  35187. +    version update diffs, but will not join in the technical
  35188. +    discussions.  You should still have anon-ftp, and you shouldn't
  35189. +    expect beta releases to be as stable as public releases.  Send an
  35190. +    add message to cc-mode-announce-request@anthem.nlm.nih.gov to be
  35191. +    added to this list.
  35192. +
  35193. +    Please use these addresses instead of my personal address so I can
  35194. +    keep track of all the incoming mail!
  35195. +
  35196. +
  35197. +* Here's the Emacs Lisp Archive information for reporter.el:
  35198. +
  35199. +     GNU Emacs Lisp Code Directory Apropos -- "reporter"
  35200. +"~/" refers to archive.cis.ohio-state.edu:/pub/gnu/emacs/elisp-archive/
  35201. +
  35202. +reporter (1.23)          02-Feb-1993
  35203. +     Barry A. Warsaw, <bwarsaw@cen.com>
  35204. +     ~/misc/reporter.el.Z
  35205. +     Customizable bug reporting of lisp programs.
  35206. +
  35207. +
  35208. +* User visible changes since 4.35
  35209. +
  35210. +** c-set-offset and related functions and variables can now accept
  35211. +   variable symbols.  Also ++ and -- which mean 2* positive and
  35212. +   negative c-basic-offset respectively.
  35213. +
  35214. +** new variable, c-recognize-knr-p, which controls whether K&R C
  35215. +   contructs will be recognized.  Trying to recognize K&R constructs
  35216. +   is a time hog so if you're programming strictly in ANSI C, set this
  35217. +   variable to nil (it should already be nil in c++-mode).
  35218. +
  35219. +** new variable, c-hanging-comment-ender-p for controlling
  35220. +   c-fill-paragraph's behavior.
  35221. +
  35222. +** new syntactic symbol: statement-case-open.  This is assigned to
  35223. +   lines containing an open brace just after a case/default label.
  35224. +
  35225. +** new variable, c-progress-interval, which controls minibuffer update
  35226. +   message displays during long re-indention.  This is a new feature
  35227. +   which prints percentage complete messages at specified intervals.
  35228. +
  35229. +** Better menu titles in FSF's Emacs.
  35230. +
  35231. +** Improved selective-display compatibility.
  35232. +
  35233. +** Bug fixes, bug fixes, bug fixes!
  35234. +
  35235. +** Some performance enhancements, but nothing radically better.
  35236. +
  35237. +
  35238. +* User visible changes since 3.349
  35239. +
  35240. +** New major-mode: objc-mode for Objective-C editing. Also added,
  35241. +   objc-mode-hook, objc-mode-abbrev-table, objc-mode-map, and
  35242. +   objc-mode-syntax-table.
  35243. +
  35244. +** New syntactic symbols objc-method-intro, objc-method-args, and
  35245. +   objc-method-call-cont have been added, with appropriate offsets in
  35246. +   c-offsets-alist.
  35247. +
  35248. +** Ellemtel style puts substatement-open braces on their own line.
  35249. +
  35250. +** Better conformance to GNU coding style. New line up function set on
  35251. +   arglist-close for GNU style: c-lineup-arglist-intro-after-paren.
  35252. +
  35253. +** bracket lists are treated like paren lists (i.e. they are given the
  35254. +   appropriate arglist-* syntax).
  35255. +
  35256. +** some changes to recognition of brace-lists. When an otherwise
  35257. +   brace-list-entry or brace-list-intro is found to start with an open
  35258. +   brace, the line is given brace-list-open syntax instead.
  35259. +
  35260. +** brace-list-intro and brace-list-entry are hangable via
  35261. +   c-hanging-braces-alist.
  35262. +
  35263. +** c-set-offset provides a reasonable default in the prompt.
  35264. +
  35265. +** various name changes to commands and variables for consistency of
  35266. +   terminology.  The changes are:
  35267. +
  35268. +   Cmd/Var   Old Name                       New Name
  35269. +   -------   --------                       --------
  35270. +   [var]     c-strict-semantics-p           c-strict-syntax-p
  35271. +   [var]     c-echo-semantic-information-p  c-echo-syntactic-information-p
  35272. +   [var]     c-semantics                    c-syntactic-context
  35273. +   [cmd]     c-show-syntactic-information   c-show-syntactic-information
  35274. +
  35275. +   some other, non-user-level name changes were effected as well
  35276. +
  35277. +** Usual gobs of bug fixes.
  35278. +
  35279. +
  35280. +* User-visible Changes Since 3.304
  35281. +
  35282. +** You can now specify `hanginess' of close braces. See
  35283. +   c-hanging-braces-alist.
  35284. +
  35285. +** New syntactic symbol `substatement-open' to control indentation of
  35286. +   braces which open a substatement block (i.e. if, for, ...).  C-c
  35287. +   C-s used to call these ((block-open . ??) (substatement . ??)), but
  35288. +   now they are just ((substatement-open . ??)).  WARNING: THIS CHANGE
  35289. +   MAY AFFECT YOUR CURRENT INDENTATION SETTINGS.
  35290. +
  35291. +** c-adaptive-block-open lineup function is removed. Obsoleted by
  35292. +   substatement-open change above.
  35293. +
  35294. +** New "Default" style returns indentation variables to their default
  35295. +   values.
  35296. +
  35297. +** Support for Lucid Emacs 19.10's mode-popup-menu convention.
  35298. +
  35299. +** c-macro-expand command put on C-c C-e.
  35300. +
  35301. +** New buffer-local variable c-comment-start-regexp. Useful for using
  35302. +   cc-mode as a basis for other C-like languages.
  35303. +
  35304. +** c++-mode handles try/catch blocks.  Assigns them `substatement'
  35305. +   syntax similar to if/for/while/...
  35306. +
  35307. +** c-indent-via-language-element renamed to c-indent-line for
  35308. +   awk-mode, BOCM compatibility.
  35309. +
  35310. +** Usual gobs of bug fixes.
  35311. +
  35312. +
  35313. +* User-visible Changes Since 3.229
  35314. +
  35315. +** Tons 'o performance enhancements.
  35316. +
  35317. +** Tons 'o bug fixes.
  35318. +
  35319. +** Improved support for nested structs in C.
  35320. +
  35321. +** Emacs 18 support has been split out into a separate file,
  35322. +   cc-mode-18.el. Emacs 18 support is a losing battle, so after this
  35323. +   release, I am not going to actively maintain cc-mode for Emacs 18,
  35324. +   although I will incorporate contributed patches to cc-mode-18.el.
  35325. +
  35326. +** The last of the dependencies on c-mode.el should be removed.
  35327. +
  35328. +** New syntactic symbol, defun-block-intro, which controls the
  35329. +   indentation for the first line in a top-level function or class.
  35330. +
  35331. +** c-indent-defun moved to C-c C-q
  35332. +
  35333. +** c-scope-operator moved to C-c :
  35334. +
  35335. +** New coding style added to c-style-alist: Ellemtel.  This supports
  35336. +   the C++ coding style defined in "Programming in C++, Rules and
  35337. +   Recommendations", Erik Nyquist and Mats Henricson, Ellemtel,
  35338. +   ftp'able from euagate.eua.ericsson.se.
  35339. +
  35340. +** c-set-style now modifies the global values by default. Buffer local
  35341. +   versions are made when optional universal argument is given.
  35342. +
  35343. +** New variable: c-inhibit-startup-warnings-p
  35344. +
  35345. +** New custom indentation functions, which are not used by default:
  35346. +   c-lineup-math and c-lineup-runin-statements.  The former lines up
  35347. +   math statement-cont lines after the equals sign.  The latter lines
  35348. +   up statement lines when the first statement in a block appears on
  35349. +   the same line as the block opening brace.
  35350. diff -ru --new-file baseline/fsf/emacs/site-lisp/cc-compat.el amiga/fsf/emacs/site-lisp/cc-compat.el
  35351. --- baseline/fsf/emacs/site-lisp/cc-compat.el    Wed Dec 31 17:00:00 1969
  35352. +++ amiga/fsf/emacs/site-lisp/cc-compat.el    Sun Oct 15 17:07:24 1995
  35353. @@ -0,0 +1,155 @@
  35354. +;;; cc-compat.el --- cc-mode compatibility with c-mode.el confusion
  35355. +
  35356. +;; Author: 1994 Barry A. Warsaw, Century Computing, Inc. <bwarsaw@cen.com>
  35357. +;; Maintainer:    bwarsaw@cen.com
  35358. +;; Created:       August 1994
  35359. +;; Version:       1.2
  35360. +;; Last Modified: 1994/08/10 17:54:53
  35361. +;; Keywords: C++ C Objective-C cc-mode
  35362. +
  35363. +;; Copyright (C) 1994 Barry A. Warsaw
  35364. +
  35365. +;; This file is not part of GNU Emacs.
  35366. +
  35367. +;; This program is free software; you can redistribute it and/or modify
  35368. +;; it under the terms of the GNU General Public License as published by
  35369. +;; the Free Software Foundation; either version 2 of the License, or
  35370. +;; (at your option) any later version.
  35371. +;; 
  35372. +;; This program is distributed in the hope that it will be useful,
  35373. +;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  35374. +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  35375. +;; GNU General Public License for more details.
  35376. +;; 
  35377. +;; You should have received a copy of the GNU General Public License
  35378. +;; along with this program; if not, write to the Free Software
  35379. +;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  35380. +
  35381. +;;; Commentary:
  35382. +;;
  35383. +;; Boring old c-mode.el (BOCM) is confusion and brain melt. cc-mode.el
  35384. +;; is clarity of thought and purity of chi. If you are still unwilling
  35385. +;; to accept enlightenment, this might help, or it may prolong your
  35386. +;; agony.
  35387. +;;
  35388. +;; To use, add the following to your c-mode-hook:
  35389. +;;
  35390. +;; (require 'cc-compat)
  35391. +;; (c-set-style "BOCM")
  35392. +
  35393. +;; LCD Archive Entry:
  35394. +;; cc-compat|Barry A. Warsaw|bwarsaw@cen.com
  35395. +;; |cc-mode compatibility with c-mode.el confusion
  35396. +;; |1994/08/10 17:54:53|1.2|
  35397. +
  35398. +;;; Code:
  35399. +
  35400. +
  35401. +;; In case c-mode.el isn't loaded
  35402. +(defvar c-indent-level 2
  35403. +  "*Indentation of C statements with respect to containing block.")
  35404. +(defvar c-brace-imaginary-offset 0
  35405. +  "*Imagined indentation of a C open brace that actually follows a statement.")
  35406. +(defvar c-brace-offset 0
  35407. +  "*Extra indentation for braces, compared with other text in same context.")
  35408. +(defvar c-argdecl-indent 5
  35409. +  "*Indentation level of declarations of C function arguments.")
  35410. +(defvar c-label-offset -2
  35411. +  "*Offset of C label lines and case statements relative to usual indentation.")
  35412. +(defvar c-continued-statement-offset 2
  35413. +  "*Extra indent for lines not starting new statements.")
  35414. +(defvar c-continued-brace-offset 0
  35415. +  "*Extra indent for substatements that start with open-braces.
  35416. +This is in addition to c-continued-statement-offset.")
  35417. +
  35418. +
  35419. +
  35420. +;; these offsets are taken by brute force testing c-mode.el, since
  35421. +;; there's no logic to what it does.
  35422. +(let* ((offsets
  35423. +    '((defun-block-intro     . cc-block-intro-offset)
  35424. +      (statement-block-intro . cc-block-intro-offset)
  35425. +      (defun-open            . 0)
  35426. +      (class-open            . 0)
  35427. +      (inline-open           . c-brace-offset)
  35428. +      (block-open            . c-brace-offset)
  35429. +      (block-close           . cc-block-close-offset)
  35430. +      (brace-list-open       . c-brace-offset)
  35431. +      (substatement-open     . cc-substatement-open-offset)
  35432. +      (substatement          . c-continued-statement-offset)
  35433. +      (knr-argdecl-intro     . c-argdecl-indent)
  35434. +      (case-label            . c-label-offset)
  35435. +      (access-label          . c-label-offset)
  35436. +      (label                 . c-label-offset)
  35437. +      )))
  35438. +  (if (assoc "BOCM" c-style-alist)
  35439. +      (setcdr (assoc "BOCM" c-style-alist)
  35440. +          (list (cons 'c-offsets-alist offsets)))
  35441. +    (setq c-style-alist
  35442. +      (cons (list "BOCM" (cons 'c-offsets-alist offsets))
  35443. +        c-style-alist)))
  35444. +  )
  35445. +
  35446. +(defun cc-block-intro-offset (langelem)
  35447. +  ;; taken directly from calculate-c-indent confusion
  35448. +  (save-excursion
  35449. +    (c-backward-syntactic-ws)
  35450. +    (if (= (preceding-char) ?{)
  35451. +    (forward-char -1)
  35452. +      (goto-char (cdr langelem)))
  35453. +    (let* ((curcol (save-excursion 
  35454. +             (goto-char (cdr langelem))
  35455. +             (current-column)))
  35456. +      (bocm-lossage
  35457. +       ;; If no previous statement, indent it relative to line
  35458. +       ;; brace is on.  For open brace in column zero, don't let
  35459. +       ;; statement start there too.  If c-indent-level is zero,
  35460. +       ;; use c-brace-offset + c-continued-statement-offset
  35461. +       ;; instead.  For open-braces not the first thing in a line,
  35462. +       ;; add in c-brace-imaginary-offset.
  35463. +       (+ (if (and (bolp) (zerop c-indent-level))
  35464. +          (+ c-brace-offset c-continued-statement-offset)
  35465. +        c-indent-level)
  35466. +          ;; Move back over whitespace before the openbrace.  If
  35467. +          ;; openbrace is not first nonwhite thing on the line,
  35468. +          ;; add the c-brace-imaginary-offset.
  35469. +          (progn (skip-chars-backward " \t")
  35470. +             (if (bolp) 0 c-brace-imaginary-offset))
  35471. +          ;; If the openbrace is preceded by a parenthesized exp,
  35472. +          ;; move to the beginning of that; possibly a different
  35473. +          ;; line
  35474. +          (progn
  35475. +        (if (eq (preceding-char) ?\))
  35476. +            (forward-sexp -1))
  35477. +        ;; Get initial indentation of the line we are on.
  35478. +        (current-indentation)))))
  35479. +      (- bocm-lossage curcol))))
  35480. +
  35481. +
  35482. +(defun cc-block-close-offset (langelem)
  35483. +  (save-excursion
  35484. +    (let* ((here (point))
  35485. +       bracep 
  35486. +       (curcol (progn
  35487. +             (goto-char (cdr langelem))
  35488. +             (current-column)))
  35489. +       (bocm-lossage (progn
  35490. +               (goto-char (cdr langelem))
  35491. +               (if (= (following-char) ?{)
  35492. +                   (setq bracep t)
  35493. +                 (goto-char here)
  35494. +                 (beginning-of-line)
  35495. +                 (backward-up-list 1)
  35496. +                 (forward-char 1)
  35497. +                 (c-forward-syntactic-ws))
  35498. +               (current-column))))
  35499. +      (- bocm-lossage curcol
  35500. +     (if bracep 0 c-indent-level)))))
  35501. +      
  35502. +
  35503. +(defun cc-substatement-open-offset (langelem)
  35504. +  (+ c-continued-statement-offset c-continued-brace-offset))
  35505. +
  35506. +
  35507. +(provide 'cc-compat)
  35508. +;;; cc-compat.el ends here
  35509. diff -ru --new-file baseline/fsf/emacs/site-lisp/cc-mode-18.el amiga/fsf/emacs/site-lisp/cc-mode-18.el
  35510. --- baseline/fsf/emacs/site-lisp/cc-mode-18.el    Wed Dec 31 17:00:00 1969
  35511. +++ amiga/fsf/emacs/site-lisp/cc-mode-18.el    Sun Oct 15 17:07:26 1995
  35512. @@ -0,0 +1,334 @@
  35513. +;;; cc-mode-18.el --- compatibility for cc-mode in Emacs 18
  35514. +
  35515. +;; Authors: 1994 Barry A. Warsaw, Century Computing Inc. <bwarsaw@cen.com>
  35516. +;; Maintainer:      cc-mode-help@anthem.nlm.nih.gov
  35517. +;; Created:         8-Feb-1994 (from cc-mode.el)
  35518. +;; Version:         1.11
  35519. +;; Last Modified:   1994/04/15 23:14:27
  35520. +;; Keywords: C++ C editing major-mode Emacs 18 compatible
  35521. +
  35522. +;; Copyright (C) 1994 Barry A. Warsaw
  35523. +
  35524. +;; This file is not yet part of GNU Emacs, and hopefully never will be.
  35525. +;;
  35526. +;; This program is free software; you can redistribute it and/or modify
  35527. +;; it under the terms of the GNU General Public License as published by
  35528. +;; the Free Software Foundation; either version 2 of the License, or
  35529. +;; (at your option) any later version.
  35530. +;; 
  35531. +;; This program is distributed in the hope that it will be useful,
  35532. +;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  35533. +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  35534. +;; GNU General Public License for more details.
  35535. +;; 
  35536. +;; You should have received a copy of the GNU General Public License
  35537. +;; along with this program; if not, write to the Free Software
  35538. +;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  35539. +
  35540. +;;; Commentary:
  35541. +
  35542. +;; This file provides hooks into cc-mode for use with Emacs 18. All
  35543. +;; native Emacs 18 support has been moved out of cc-mode.el proper. If
  35544. +;; you find you need this file (i.e. you're using Emacs 18), you
  35545. +;; should SERIOUSLY consider upgrading to FSF or Lucid 19.  Emacs 18
  35546. +;; simply doesn't have what it takes to edit C++ code.
  35547. +;;
  35548. +;; To use this, put the following in your .emacs file:
  35549. +;;
  35550. +;; (require 'cc-mode-18)
  35551. +;; (or (assq 'c-emacs18-common-hook c-mode-common-hook)
  35552. +;;     (setq c-mode-common-hook (cons 'c-emacs18-common-hook
  35553. +;;                                    c-mode-common-hook)))
  35554. +;;
  35555. +;; I cannot provide any direct support for v18 support anymore, but I
  35556. +;; will install and distribute contributed patches.  This file, and
  35557. +;; v18 support in general should be considered sold "As Is".  Caveat
  35558. +;; Emptor! :-)
  35559. +
  35560. +;; LCD Archive Entry:
  35561. +;; cc-mode-18.el|Barry A. Warsaw|cc-mode-help@anthem.nlm.nih.gov
  35562. +;; |Compatibility for cc-mode in Emacs 18
  35563. +;; |1994/04/15 23:14:27|1.11|
  35564. +
  35565. +;;; Code:
  35566. +(require 'cc-mode)
  35567. +
  35568. +
  35569. +;; user definable variables
  35570. +;; vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
  35571. +
  35572. +(defvar c-untame-characters '(?\')
  35573. +  "*Utilize a backslashing workaround of an Emacs18 syntax deficiency.
  35574. +If non-nil, this variable should contain a list of characters which
  35575. +are prepended by a backslash in comment regions.  By default, the list
  35576. +contains only the most troublesome character, the single quote.  To be
  35577. +completely safe, set this variable to:
  35578. +
  35579. +    '(?\( ?\) ?\' ?\{ ?\} ?\[ ?\])
  35580. +
  35581. +This variable has no effect under Emacs 19. For details on why this is
  35582. +necessary in GNU Emacs 18, please refer to the cc-mode texinfo manual.")
  35583. +
  35584. +(defvar c-backscan-limit 2000
  35585. +  "*Character limit for looking back while skipping syntactic whitespace.
  35586. +This variable has no effect under Emacs 19.  For details on why this
  35587. +is necessary under GNU Emacs 18, please refer to the texinfo manual.")
  35588. +
  35589. +
  35590. +;; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  35591. +;; NO USER DEFINABLE VARIABLES BEYOND THIS POINT
  35592. +
  35593. +;; extend the keymap
  35594. +(defun c-emacs18-common-hook ()
  35595. +  ;; Do all the set up necessary to get cc-mode working in Emacs 18,
  35596. +  ;; but make sure we only do it once
  35597. +  (if (or (get 'c-mode 'c-emacs-18)
  35598. +      (not (featurep 'cc-mode))
  35599. +      (not (memq 'v18 c-emacs-features)))
  35600. +      ;; do nothing if conditions we aren't in Emacs 18, or cc-mode
  35601. +      ;; hasn't been loaded yet, or we've already run this hook
  35602. +      nil
  35603. +    ;; extend the keymap for use with Emacs 18. c-mode-map must already
  35604. +    ;; be set up (i.e. from cc-mode.el)
  35605. +    (define-key c-mode-map "\C-c'" 'c-tame-comments)
  35606. +    (define-key c-mode-map "'"     'c-tame-insert)
  35607. +    (define-key c-mode-map "["     'c-tame-insert)
  35608. +    (define-key c-mode-map "]"     'c-tame-insert)
  35609. +    (define-key c-mode-map "("     'c-tame-insert)
  35610. +    (define-key c-mode-map ")"     'c-tame-insert)
  35611. +
  35612. +    ;; Vanilla GNU18 doesn't support mult-style comments.  We'll do
  35613. +    ;; the best we can, but some strange behavior may be encountered.
  35614. +    ;; PATCH or UPGRADE!
  35615. +    (modify-syntax-entry ?/  ". 124" c-mode-syntax-table)
  35616. +    (modify-syntax-entry ?*  ". 23"  c-mode-syntax-table)
  35617. +    (modify-syntax-entry ?\n ">"     c-mode-syntax-table)
  35618. +
  35619. +    (modify-syntax-entry ?/  ". 124" c++-mode-syntax-table)
  35620. +    (modify-syntax-entry ?*  ". 23"  c++-mode-syntax-table)
  35621. +    (modify-syntax-entry ?\n ">"     c++-mode-syntax-table)
  35622. +
  35623. +    ;; set up comment skipping interface functions, and other
  35624. +    ;; non-compatible functions
  35625. +    (fset 'c-forward-syntactic-ws 'c-emacs18-fsws)
  35626. +    (fset 'c-backward-syntactic-ws 'c-emacs18-bsws)
  35627. +    (fset 'c-in-literal 'c-emacs18-il)
  35628. +    (fset 'c-mark-function 'c-emacs18-mark-function)
  35629. +    (fset 'c-insert-special-chars 'c-emacs18-insert-special-chars)
  35630. +
  35631. +    ;; Emacs 18 can't handle parse-sexp-ignore-comments == t
  35632. +    (setq parse-sexp-ignore-comments nil)
  35633. +
  35634. +    ;; put the property out there so we don't do this again
  35635. +    (put 'c-mode 'c-emacs-18 'c-emacs-18)
  35636. +    ))
  35637. +
  35638. +
  35639. +;; Emacs 18 support for whitespace skipping and literal parsing.
  35640. +
  35641. +;; Emacs 19 has nice built-in functions to do this, but Emacs 18 does
  35642. +;; not.  Also note that only Emacs19 implementation currently has
  35643. +;; support for multi-line macros, and this feature is imposes the
  35644. +;; restriction that backslashes at the end of a line can only occur on
  35645. +;; multi-line macro lines.
  35646. +
  35647. +;; This is the best we can do in vanilla GNU 18 Emacsen.
  35648. +(defun c-emacs18-fsws (&optional lim)
  35649. +  ;; Forward skip syntactic whitespace for Emacs 18.
  35650. +  (let ((lim (or lim (point-max)))
  35651. +    stop)
  35652. +    (while (not stop)
  35653. +      (skip-chars-forward " \t\n\r\f" lim)
  35654. +      (cond
  35655. +       ;; c++ comment
  35656. +       ((looking-at "//") (end-of-line))
  35657. +       ;; c comment
  35658. +       ((looking-at "/\\*") (re-search-forward "*/" lim 'noerror))
  35659. +       ;; preprocessor directive
  35660. +       ((and (= (c-point 'boi) (point))
  35661. +         (= (following-char) ?#))
  35662. +    (end-of-line))
  35663. +       ;; none of the above
  35664. +       (t (setq stop t))
  35665. +       ))))
  35666. +
  35667. +(defun c-emacs18-bsws (&optional lim)
  35668. +  ;; Backward skip syntactic whitespace for Emacs 18.
  35669. +  (let ((lim (or lim (c-point 'bod)))
  35670. +    literal stop)
  35671. +    (if (and c-backscan-limit
  35672. +         (> (- (point) lim) c-backscan-limit))
  35673. +    (setq lim (- (point) c-backscan-limit)))
  35674. +    (while (not stop)
  35675. +      (skip-chars-backward " \t\n\r\f" lim)
  35676. +      ;; c++ comment
  35677. +      (if (eq (setq literal (c-in-literal lim)) 'c++)
  35678. +      (progn
  35679. +        (skip-chars-backward "^/" lim)
  35680. +        (skip-chars-backward "/" lim)
  35681. +        (while (not (or (and (= (following-char) ?/)
  35682. +                 (= (char-after (1+ (point))) ?/))
  35683. +                (<= (point) lim)))
  35684. +          (skip-chars-backward "^/" lim)
  35685. +          (skip-chars-backward "/" lim)))
  35686. +    ;; c comment
  35687. +    (if (eq literal 'c)
  35688. +        (progn
  35689. +          (skip-chars-backward "^*" lim)
  35690. +          (skip-chars-backward "*" lim)
  35691. +          (while (not (or (and (= (following-char) ?*)
  35692. +                   (= (preceding-char) ?/))
  35693. +                  (<= (point) lim)))
  35694. +        (skip-chars-backward "^*" lim)
  35695. +        (skip-chars-backward "*" lim))
  35696. +          (or (bobp) (forward-char -1)))
  35697. +      ;; preprocessor directive
  35698. +      (if (eq literal 'pound)
  35699. +          (progn
  35700. +        (beginning-of-line)
  35701. +        (setq stop (<= (point) lim)))
  35702. +        ;; just outside of c block
  35703. +        (if (and (= (preceding-char) ?/)
  35704. +             (= (char-after (- (point) 2)) ?*))
  35705. +        (progn
  35706. +          (skip-chars-backward "^*" lim)
  35707. +          (skip-chars-backward "*" lim)
  35708. +          (while (not (or (and (= (following-char) ?*)
  35709. +                       (= (preceding-char) ?/))
  35710. +                  (<= (point) lim)))
  35711. +            (skip-chars-backward "^*" lim)
  35712. +            (skip-chars-backward "*" lim))
  35713. +          (or (bobp) (forward-char -1)))
  35714. +          ;; none of the above
  35715. +          (setq stop t))))))))
  35716. +
  35717. +
  35718. +;; Return `c' if in a C-style comment, `c++' if in a C++ style
  35719. +;; comment, `string' if in a string literal, `pound' if on a
  35720. +;; preprocessor line, or nil if not in a comment at all.  Optional LIM
  35721. +;; is used as the backward limit of the search.  If omitted, or nil,
  35722. +;; `beginning-of-defun' is used."
  35723. +(defun c-emacs18-il (&optional lim)
  35724. +  ;; Determine if point is in a C/C++ literal
  35725. +  (save-excursion
  35726. +    (let* ((here (c-point 'eol))
  35727. +       (state nil)
  35728. +       (match nil)
  35729. +       (lim  (or lim (c-point 'bod))))
  35730. +      (goto-char lim )
  35731. +      (while (< (point) here)
  35732. +    (setq match
  35733. +          (and (re-search-forward "\\(/[/*]\\)\\|[\"']\\|\\(^[ \t]*#\\)"
  35734. +                      here 'move)
  35735. +           (buffer-substring (match-beginning 0) (match-end 0))))
  35736. +    (setq state
  35737. +          (cond
  35738. +           ;; no match
  35739. +           ((null match) nil)
  35740. +           ;; looking at the opening of a C++ style comment
  35741. +           ((string= "//" match)
  35742. +        (if (<= here (progn (end-of-line) (point))) 'c++))
  35743. +           ;; looking at the opening of a C block comment
  35744. +           ((string= "/*" match)
  35745. +        (if (not (re-search-forward "*/" here 'move)) 'c
  35746. +          (if (= (+ (match-beginning 0) 2) here) 'c)))
  35747. +           ;; looking at the opening of a double quote string
  35748. +           ((string= "\"" match)
  35749. +        (if (not (save-restriction
  35750. +               ;; this seems to be necessary since the
  35751. +               ;; re-search-forward will not work without it
  35752. +               (narrow-to-region (point) here)
  35753. +               (re-search-forward
  35754. +                ;; this regexp matches a double quote
  35755. +                ;; which is preceded by an even number
  35756. +                ;; of backslashes, including zero
  35757. +                "\\([^\\]\\|^\\)\\(\\\\\\\\\\)*\"" here 'move)))
  35758. +            'string))
  35759. +           ;; looking at the opening of a single quote string
  35760. +           ((string= "'" match)
  35761. +        (if (not (save-restriction
  35762. +               ;; see comments from above
  35763. +               (narrow-to-region (point) here)
  35764. +               (re-search-forward
  35765. +                ;; this matches a single quote which is
  35766. +                ;; preceded by zero or two backslashes.
  35767. +                "\\([^\\]\\|^\\)\\(\\\\\\\\\\)?'"
  35768. +                here 'move)))
  35769. +            'string))
  35770. +           ((string-match "[ \t]*#" match)
  35771. +        (if (<= here (progn (end-of-line) (point))) 'pound))
  35772. +           (t nil)))
  35773. +    ) ; end-while
  35774. +      state)))
  35775. +
  35776. +
  35777. +(defun c-emacs18-mark-function ()
  35778. +  "Put mark at end of a C/C++ defun, point at beginning."
  35779. +  (interactive)
  35780. +  (push-mark (point))
  35781. +  (end-of-defun)
  35782. +  (push-mark)
  35783. +  (beginning-of-defun)
  35784. +  (backward-paragraph))
  35785. +
  35786. +
  35787. +(defun c-emacs18-insert-special-chars (arg)
  35788. +  ;; insert last-command-char in the buffer and possibly tame it
  35789. +  (let ((numarg (prefix-numeric-value arg))
  35790. +    (literal (c-in-literal)))
  35791. +    (and (memq literal '(c c++))
  35792. +     (memq last-command-char c-untame-characters)
  35793. +     (= numarg 1)
  35794. +     (insert "\\"))
  35795. +    (self-insert-command numarg)))
  35796. +
  35797. +
  35798. +;; Workarounds for GNU Emacs 18 scanning deficiencies
  35799. +(defun c-tame-insert (arg)
  35800. +  "Safely inserts certain troublesome characters in comment regions.
  35801. +This function is only necessary in GNU Emacs 18.  For details, refer
  35802. +to the accompanying texinfo manual.
  35803. +
  35804. +See also the variable `c-untame-characters'."
  35805. +  (interactive "P")
  35806. +  (let ((literal (c-in-literal)))
  35807. +    (c-insert-special-chars arg)))
  35808. +
  35809. +(defun c-tame-comments ()
  35810. +  "Backslashifies all untamed in comment regions found in the buffer.
  35811. +This function is only necessary in GNU Emacs 18. For details, refer to
  35812. +the accompanying texinfo manual.
  35813. +
  35814. +See also the variable `c-untame-characters'."
  35815. +  (interactive)
  35816. +  ;; make the list into a valid charset, escaping where necessary
  35817. +  (let ((charset (concat "^" (mapconcat
  35818. +                  (function
  35819. +                   (lambda (char)
  35820. +                 (if (memq char '(?\\ ?^ ?-))
  35821. +                     (concat "\\" (char-to-string char))
  35822. +                   (char-to-string char))))
  35823. +                  c-untame-characters ""))))
  35824. +    (save-excursion
  35825. +      (beginning-of-buffer)
  35826. +      (while (not (eobp))
  35827. +    (skip-chars-forward charset)
  35828. +    (if (and (not (zerop (following-char)))
  35829. +         (memq (c-in-literal) '(c c++))
  35830. +         (/= (preceding-char) ?\\ ))
  35831. +        (insert-char  ?\\ 1))
  35832. +    (if (not (eobp))
  35833. +        (forward-char 1))))))
  35834. +
  35835. +
  35836. +;; set up an Emacs session to use this stuff
  35837. +;;(let ((hookfunsym 'c-emacs18-common-hook))
  35838. +;;  (if (fboundp 'add-hook)
  35839. +;;      (add-hook 'c-mode-common-hook hookfunsym)
  35840. +    ;; do it the hard way
  35841. +;;    (if (not (memq hookfunsym c-mode-common-hook))
  35842. +;;    (setq c-mode-common-hook (cons hookfunsym c-mode-common-hook))
  35843. +;;      )))
  35844. +
  35845. +(provide 'cc-mode-18)
  35846. +;; cc-mode-18.el ends here
  35847. diff -ru --new-file baseline/fsf/emacs/site-lisp/cc-mode.el amiga/fsf/emacs/site-lisp/cc-mode.el
  35848. --- baseline/fsf/emacs/site-lisp/cc-mode.el    Wed Dec 31 17:00:00 1969
  35849. +++ amiga/fsf/emacs/site-lisp/cc-mode.el    Sun Oct 15 17:07:28 1995
  35850. @@ -0,0 +1,4260 @@
  35851. +;;; cc-mode.el --- major mode for editing C++ and C code
  35852. +
  35853. +;; Authors: 1992 Barry A. Warsaw <bwarsaw@cnri.reston.va.us>
  35854. +;;          1987 Dave Detlefs and Stewart Clamen
  35855. +;;          1985 Richard M. Stallman
  35856. +;; Maintainer: cc-mode-help@anthem.nlm.nih.gov
  35857. +;; Created: a long, long, time ago. adapted from the original c-mode.el
  35858. +;; Version:         4.85
  35859. +;; Last Modified:   1994/09/08 14:27:45
  35860. +;; Keywords: C++ C Objective-C editing major-mode
  35861. +
  35862. +;; Copyright (C) 1992, 1993, 1994 Barry A. Warsaw
  35863. +;; Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
  35864. +
  35865. +;; This file is part of GNU Emacs.
  35866. +
  35867. +;; GNU Emacs is free software; you can redistribute it and/or modify
  35868. +;; it under the terms of the GNU General Public License as published by
  35869. +;; the Free Software Foundation; either version 2, or (at your option)
  35870. +;; any later version.
  35871. +
  35872. +;; GNU Emacs is distributed in the hope that it will be useful,
  35873. +;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  35874. +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  35875. +;; GNU General Public License for more details.
  35876. +
  35877. +;; You should have received a copy of the GNU General Public License
  35878. +;; along with GNU Emacs; see the file COPYING.  If not, write to
  35879. +;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  35880. +
  35881. +;;; Commentary:
  35882. +
  35883. +;; This package provides modes in GNU Emacs for editing C, C++, and
  35884. +;; Objective-C code. It is intended to be a replacement for c-mode.el
  35885. +;; (a.k.a. BOCM -- Boring Old C-Mode), and c++-mode.el, both of which
  35886. +;; are ancestors of this file.  A number of important improvements
  35887. +;; have been made, briefly: complete K&R C, ANSI C, `ARM' C++, and
  35888. +;; Objective-C support with consistent indentation across all modes,
  35889. +;; more intuitive indentation controlling variables, compatibility
  35890. +;; across all known Emacsen, nice new features, and tons of bug fixes.
  35891. +;; This package is called "cc-mode" to distinguish it from its
  35892. +;; ancestors, but there really is no top-level cc-mode.
  35893. +
  35894. +;; Details on how to use cc-mode will some day be contained in an
  35895. +;; accompanying texinfo manual.  Volunteers to help finish this manual
  35896. +;; would be greatly appreciated!  Contact me at the address above if
  35897. +;; you'd like to volunteer. Until the manual is finished, an
  35898. +;; accompanying README is the only documentation available.
  35899. +
  35900. +;; To submit bug reports, hit "C-c C-b", and please try to include a
  35901. +;; code sample and exact recipe so I can reproduce your problem.  If
  35902. +;; you have other questions contact me at the following address:
  35903. +;; cc-mode-help@anthem.nlm.nih.gov.  Please don't send bug reports to
  35904. +;; my personal account, I may not get it for a long time.
  35905. +
  35906. +;; YOU CAN IGNORE ALL BYTE-COMPILER WARNINGS. They are the result of
  35907. +;; the multi-Emacsen support. FSF's Emacs 19, XEmacs 19 (formerly
  35908. +;; Lucid), and GNU Emacs 18 all do things differently and there's no
  35909. +;; way to shut the byte-compiler up at the necessary granularity.  Let
  35910. +;; me say this again: YOU CAN IGNORE ALL BYTE-COMPILER WARNINGS (you'd
  35911. +;; be surprised at how many people don't follow this advice :-).
  35912. +
  35913. +;; If your Emacs is dumped with c-mode.el and/or c++-mode.el, you will
  35914. +;; need to add the following to your .emacs file before any other
  35915. +;; reference to c-mode or c++-mode:
  35916. +;;
  35917. +;; (fmakunbound 'c-mode)
  35918. +;; (makunbound 'c-mode-map)
  35919. +;; (fmakunbound 'c++-mode)
  35920. +;; (makunbound 'c++-mode-map)
  35921. +;; (makunbound 'c-style-alist)
  35922. +
  35923. +;; There are three major mode entry points provided by this package,
  35924. +;; one for editing C++ code, one for editing C code (both K&R and
  35925. +;; ANSI), and one for editing Objective-C code.  To use cc-mode, add
  35926. +;; the following to your .emacs file.  This assumes you will use .cc
  35927. +;; or .C extensions for your C++ source, .c for your C code, and .m
  35928. +;; for your Objective-C code:
  35929. +;;
  35930. +;; (autoload 'c++-mode  "cc-mode" "C++ Editing Mode" t)
  35931. +;; (autoload 'c-mode    "cc-mode" "C Editing Mode" t)
  35932. +;; (autoload 'objc-mode "cc-mode" "Objective-C Editing Mode" t)
  35933. +;; (setq auto-mode-alist
  35934. +;;   (append '(("\\.C$"  . c++-mode)
  35935. +;;             ("\\.cc$" . c++-mode)
  35936. +;;             ("\\.c$"  . c-mode)
  35937. +;;             ("\\.h$"  . c-mode)
  35938. +;;             ("\\.m$"  . objc-mode)
  35939. +;;            ) auto-mode-alist))
  35940. +;;
  35941. +;; If you would like to join the beta testers list, send add/drop
  35942. +;; requests to cc-mode-victims-request@anthem.nlm.nih.gov.
  35943. +;; Discussions go to cc-mode-victims@anthem.nlm.nih.gov, but bug
  35944. +;; reports and such should still be sent to cc-mode-help only (see
  35945. +;; above).
  35946. +;;
  35947. +;; Many, many thanks go out to all the folks on the beta test list.
  35948. +;; Without their patience, testing, insight, code contributions, and
  35949. +;; encouragement cc-mode.el would be a far inferior package.
  35950. +
  35951. +;; LCD Archive Entry:
  35952. +;; cc-mode.el|Barry A. Warsaw|cc-mode-help@anthem.nlm.nih.gov
  35953. +;; |Major mode for editing C++, Objective-C, and ANSI/K&R C code
  35954. +;; |1994/09/08 14:27:45|4.85|
  35955. +
  35956. +;;; Code:
  35957. +
  35958. +
  35959. +;; user definable variables
  35960. +;; vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
  35961. +
  35962. +(defvar c-inhibit-startup-warnings-p nil
  35963. +  "*If non-nil, inhibits start up compatibility warnings.")
  35964. +(defvar c-strict-syntax-p nil
  35965. +  "*If non-nil, all syntactic symbols must be found in `c-offsets-alist'.
  35966. +If the syntactic symbol for a particular line does not match a symbol
  35967. +in the offsets alist, an error is generated, otherwise no error is
  35968. +reported and the syntactic symbol is ignored.")
  35969. +(defvar c-echo-syntactic-information-p nil
  35970. +  "*If non-nil, syntactic info is echoed when the line is indented.")
  35971. +(defvar c-basic-offset 4
  35972. +  "*Amount of basic offset used by + and - symbols in `c-offsets-alist'.")
  35973. +
  35974. +(defconst c-offsets-alist-default
  35975. +  '((string                . -1000)
  35976. +    (c                     . c-lineup-C-comments)
  35977. +    (defun-open            . 0)
  35978. +    (defun-close           . 0)
  35979. +    (defun-block-intro     . +)
  35980. +    (class-open            . 0)
  35981. +    (class-close           . 0)
  35982. +    (inline-open           . +)
  35983. +    (inline-close          . 0)
  35984. +    (ansi-funcdecl-cont    . -)
  35985. +    (knr-argdecl-intro     . +)
  35986. +    (knr-argdecl           . 0)
  35987. +    (topmost-intro         . 0)
  35988. +    (topmost-intro-cont    . 0)
  35989. +    (member-init-intro     . +)
  35990. +    (member-init-cont      . 0)
  35991. +    (inher-intro           . +)
  35992. +    (inher-cont            . c-lineup-multi-inher)
  35993. +    (block-open            . 0)
  35994. +    (block-close           . 0)
  35995. +    (brace-list-open       . 0)
  35996. +    (brace-list-close      . 0)
  35997. +    (brace-list-intro      . +)
  35998. +    (brace-list-entry      . 0)
  35999. +    (statement             . 0)
  36000. +    ;; some people might prefer
  36001. +    ;;(statement             . c-lineup-runin-statements)
  36002. +    (statement-cont        . +)
  36003. +    ;; some people might prefer
  36004. +    ;;(statement-cont        . c-lineup-math)
  36005. +    (statement-block-intro . +)
  36006. +    (statement-case-intro  . +)
  36007. +    (statement-case-open   . 0)
  36008. +    (substatement          . +)
  36009. +    (substatement-open     . +)
  36010. +    (case-label            . 0)
  36011. +    (access-label          . -)
  36012. +    (label                 . 2)
  36013. +    (do-while-closure      . 0)
  36014. +    (else-clause           . 0)
  36015. +    (comment-intro         . c-lineup-comment)
  36016. +    (arglist-intro         . +)
  36017. +    (arglist-cont          . 0)
  36018. +    (arglist-cont-nonempty . c-lineup-arglist)
  36019. +    (arglist-close         . +)
  36020. +    (stream-op             . c-lineup-streamop)
  36021. +    (inclass               . +)
  36022. +    (cpp-macro             . -1000)
  36023. +    (friend                . 0)
  36024. +    (objc-method-intro     . -1000)
  36025. +    (objc-method-args-cont . c-lineup-objc-method-args)
  36026. +    (objc-method-call-cont . c-lineup-objc-method-call)
  36027. +    )
  36028. +  "Default settings for offsets of syntactic elements.
  36029. +Do not change this constant!  See the variable `c-offsets-alist' for
  36030. +more information.")
  36031. +
  36032. +(defvar c-offsets-alist (copy-alist c-offsets-alist-default)
  36033. +  "*Association list of syntactic element symbols and indentation offsets.
  36034. +As described below, each cons cell in this list has the form:
  36035. +
  36036. +    (SYNTACTIC-SYMBOL . OFFSET)
  36037. +
  36038. +When a line is indented, cc-mode first determines the syntactic
  36039. +context of the line by generating a list of symbols called syntactic
  36040. +elements.  This list can contain more than one syntactic element and
  36041. +the global variable `c-syntactic-context' contains the context list
  36042. +for the line being indented.  Each element in this list is actually a
  36043. +cons cell of the syntactic symbol and a buffer position.  This buffer
  36044. +position is call the relative indent point for the line.  Some
  36045. +syntactic symbols may not have a relative indent point associated with
  36046. +them.
  36047. +
  36048. +After the syntactic context list for a line is generated, cc-mode
  36049. +calculates the absolute indentation for the line by looking at each
  36050. +syntactic element in the list.  First, it compares the syntactic
  36051. +element against the SYNTACTIC-SYMBOL's in `c-offsets-alist'.  When it
  36052. +finds a match, it adds the OFFSET to the column of the relative indent
  36053. +point.  The sum of this calculation for each element in the syntactic
  36054. +list is the absolute offset for line being indented.
  36055. +
  36056. +If the syntactic element does not match any in the `c-offsets-alist',
  36057. +an error is generated if `c-strict-syntax-p' is non-nil, otherwise
  36058. +the element is ignored.
  36059. +
  36060. +Actually, OFFSET can be an integer, a function, a variable, or one of
  36061. +the following symbols: `+', `-', `++', or `--'.  These latter
  36062. +designate positive or negative multiples of `c-basic-offset',
  36063. +respectively: *1, *-1, *2, and *-2. If OFFSET is a function, it is
  36064. +called with a single argument containing the cons of the syntactic
  36065. +element symbol and the relative indent point.  The function should
  36066. +return an integer offset.
  36067. +
  36068. +Here is the current list of valid syntactic element symbols:
  36069. +
  36070. + string                 -- inside multi-line string
  36071. + c                      -- inside a multi-line C style block comment
  36072. + defun-open             -- brace that opens a function definition
  36073. + defun-close            -- brace that closes a function definition
  36074. + defun-block-intro      -- the first line in a top-level defun
  36075. + class-open             -- brace that opens a class definition
  36076. + class-close            -- brace that closes a class definition
  36077. + inline-open            -- brace that opens an in-class inline method
  36078. + inline-close           -- brace that closes an in-class inline method
  36079. + ansi-funcdecl-cont     -- the nether region between an ANSI function
  36080. +                           declaration and the defun opening brace
  36081. + knr-argdecl-intro      -- first line of a K&R C argument declaration
  36082. + knr-argdecl            -- subsequent lines in a K&R C argument declaration
  36083. + topmost-intro          -- the first line in a topmost construct definition
  36084. + topmost-intro-cont     -- topmost definition continuation lines
  36085. + member-init-intro      -- first line in a member initialization list
  36086. + member-init-cont       -- subsequent member initialization list lines
  36087. + inher-intro            -- first line of a multiple inheritance list
  36088. + inher-cont             -- subsequent multiple inheritance lines
  36089. + block-open             -- statement block open brace
  36090. + block-close            -- statement block close brace
  36091. + brace-list-open        -- open brace of an enum or static array list
  36092. + brace-list-close       -- close brace of an enum or static array list
  36093. + brace-list-intro       -- first line in an enum or static array list
  36094. + brace-list-entry       -- subsequent lines in an enum or static array list
  36095. + statement              -- a C/C++/ObjC statement
  36096. + statement-cont         -- a continuation of a C/C++/ObjC statement
  36097. + statement-block-intro  -- the first line in a new statement block
  36098. + statement-case-intro   -- the first line in a case `block'
  36099. + statement-case-open    -- the first line in a case block starting with brace
  36100. + substatement           -- the first line after an if/while/for/do/else
  36101. + substatement-open      -- the brace that opens a substatement block
  36102. + case-label             -- a case or default label
  36103. + access-label           -- C++ private/protected/public access label
  36104. + label                  -- any non-special C/C++/ObjC label
  36105. + do-while-closure       -- the `while' that ends a do/while construct
  36106. + else-clause            -- the `else' of an if/else construct
  36107. + comment-intro          -- a line containing only a comment introduction
  36108. + arglist-intro          -- the first line in an argument list
  36109. + arglist-cont           -- subsequent argument list lines when no
  36110. +                           arguments follow on the same line as the
  36111. +                           the arglist opening paren
  36112. + arglist-cont-nonempty  -- subsequent argument list lines when at
  36113. +                           least one argument follows on the same
  36114. +                           line as the arglist opening paren
  36115. + arglist-close          -- the solo close paren of an argument list
  36116. + stream-op              -- lines continuing a stream operator construct
  36117. + inclass                -- the construct is nested inside a class definition
  36118. + cpp-macro              -- the start of a cpp macro
  36119. + friend                 -- a C++ friend declaration
  36120. + objc-method-intro      -- the first line of an Objective-C method definition
  36121. + objc-method-args-cont  -- lines continuing an Objective-C method definition
  36122. + objc-method-call-cont  -- lines continuing an Objective-C method call
  36123. +")
  36124. +
  36125. +(defvar c-tab-always-indent t
  36126. +  "*Controls the operation of the TAB key.
  36127. +If t, hitting TAB always just indents the current line.  If nil,
  36128. +hitting TAB indents the current line if point is at the left margin or
  36129. +in the line's indentation, otherwise it insert a real tab character.
  36130. +If other than nil or t, then tab is inserted only within literals
  36131. +-- defined as comments and strings -- and inside preprocessor
  36132. +directives, but line is always reindented.
  36133. +
  36134. +Note that indentation of lines containing only comments is also
  36135. +controlled by the `c-comment-only-line-offset' variable.")
  36136. +
  36137. +(defvar c-comment-only-line-offset 0
  36138. +  "*Extra offset for line which contains only the start of a comment.
  36139. +Can contain an integer or a cons cell of the form:
  36140. +
  36141. + (NON-ANCHORED-OFFSET . ANCHORED-OFFSET)
  36142. +
  36143. +Where NON-ANCHORED-OFFSET is the amount of offset given to
  36144. +non-column-zero anchored comment-only lines, and ANCHORED-OFFSET is
  36145. +the amount of offset to give column-zero anchored comment-only lines.
  36146. +Just an integer as value is equivalent to (<val> . 0)")
  36147. +
  36148. +(defvar c-block-comments-indent-p nil
  36149. +  "*Specifies how to re-indent C style block comments.
  36150. +
  36151. +4 styles of C block comments are supported.  If this variable is nil,
  36152. +then styles 1-3 are supported.  If this variable is non-nil, style 4
  36153. +only is supported.  Note that this currently has *no* effect on how
  36154. +comments are lined up or whether stars are inserted when C comments
  36155. +are auto-filled.  In any case, you still have to insert the stars
  36156. +manually.
  36157. +
  36158. + style 1:       style 2:       style 3:       style 4:
  36159. + /*             /*             /*             /*
  36160. +    blah         * blah        ** blah        blah
  36161. +    blah         * blah        ** blah        blah
  36162. +    */           */            */             */")
  36163. +
  36164. +(defvar c-cleanup-list '(scope-operator)
  36165. +  "*List of various C/C++/ObjC constructs to \"clean up\".
  36166. +These clean ups only take place when the auto-newline feature is turned
  36167. +on, as evidenced by the `/a' or `/ah' appearing next to the mode name.
  36168. +Valid symbols are:
  36169. +
  36170. + brace-else-brace    -- cleans up `} else {' constructs by placing entire
  36171. +                        construct on a single line.  This clean up only
  36172. +                        takes place when there is nothing but white
  36173. +                        space between the braces and the `else'.  Clean
  36174. +            up occurs when the open-brace after the `else'
  36175. +            is typed.
  36176. + empty-defun-braces  -- cleans up empty defun braces by placing the
  36177. +                        braces on the same line.  Clean up occurs when
  36178. +            the defun closing brace is typed.
  36179. + defun-close-semi    -- cleans up the terminating semi-colon on defuns
  36180. +            by placing the semi-colon on the same line as
  36181. +            the closing brace.  Clean up occurs when the
  36182. +            semi-colon is typed.
  36183. + list-close-comma    -- cleans up commas following braces in array
  36184. +                        and aggregate initializers.  Clean up occurs
  36185. +            when the comma is typed.
  36186. + scope-operator      -- cleans up double colons which may designate
  36187. +            a C++ scope operator split across multiple
  36188. +            lines. Note that certain C++ constructs can
  36189. +            generate ambiguous situations.  This clean up
  36190. +            only takes place when there is nothing but
  36191. +            whitespace between colons. Clean up occurs
  36192. +            when the second colon is typed.")
  36193. +
  36194. +(defvar c-hanging-braces-alist '((brace-list-open)
  36195. +                 (substatement-open after))
  36196. +  "*Controls the insertion of newlines before and after braces.
  36197. +This variable contains an association list with elements of the
  36198. +following form: (SYNTACTIC-SYMBOL . (NL-LIST)).
  36199. +
  36200. +SYNTACTIC-SYMBOL can be any of: defun-open, defun-close, class-open,
  36201. +class-close, inline-open, inline-close, block-open, block-close,
  36202. +substatement-open, statement-case-open, brace-list-open,
  36203. +brace-list-close, brace-list-intro, or brace-list-entry. See
  36204. +`c-offsets-alist' for details.
  36205. +
  36206. +NL-LIST can contain any combination of the symbols `before' or
  36207. +`after'. It also be nil.  When a brace is inserted, the syntactic
  36208. +context it defines is looked up in this list, and if found, the
  36209. +NL-LIST is used to determine where newlines are inserted.  If not
  36210. +found, the default is to insert a newline both before and after
  36211. +braces.")
  36212. +
  36213. +(defvar c-hanging-colons-alist nil
  36214. +  "*Controls the insertion of newlines before and after certain colons.
  36215. +This variable contains an association list with elements of the
  36216. +following form: (SYNTACTIC-SYMBOL . (NL-LIST)).
  36217. +
  36218. +SYNTACTIC-SYMBOL can be any of: member-init-intro, inher-intro,
  36219. +case-label, label, and access-label. See `c-offsets-alist' for
  36220. +details.
  36221. +
  36222. +NL-LIST can contain any combination of the symbols `before' or
  36223. +`after'. It also be nil.  When a colon is inserted, the language
  36224. +element that it defines is looked up in this list, and if found, the
  36225. +NL-LIST is used to determine where newlines are inserted.  If the
  36226. +language element for the colon is not found in this list, the default
  36227. +behavior is to not insert any newlines.")
  36228. +
  36229. +(defvar c-hanging-comment-ender-p t
  36230. +  "*If nil, `c-fill-paragraph' leaves C block comment enders on their own line.
  36231. +Default value is t, which inhibits leaving block comment ending string
  36232. +`*/' on a line by itself.  This is BOCM's sole behavior.")
  36233. +
  36234. +(defvar c-backslash-column 48
  36235. +  "*Column to insert backslashes when macroizing a region.")
  36236. +(defvar c-special-indent-hook nil
  36237. +  "*Hook for user defined special indentation adjustments.
  36238. +This hook gets called after a line is indented by the mode.")
  36239. +(defvar c-delete-function 'backward-delete-char-untabify
  36240. +  "*Function called by `c-electric-delete' when deleting a single char.")
  36241. +(defvar c-electric-pound-behavior nil
  36242. +  "*List of behaviors for electric pound insertion.
  36243. +Only currently supported behavior is `alignleft'.")
  36244. +
  36245. +(defvar c-recognize-knr-p t
  36246. +  "*If non-nil, `c-mode' and `objc-mode' will recognize K&R constructs.
  36247. +This variable is needed because of ambiguities in C syntax that make
  36248. +fast recognition of K&R constructs problematic, and slow.  If you are
  36249. +coding with ANSI prototypes, set this variable to nil to speed up
  36250. +recognition of certain constructs.
  36251. +
  36252. +This variable is nil by default in `c++-mode', and t by default in
  36253. +`c-mode' and `objc-mode'.  This variable is buffer-local.")
  36254. +
  36255. +(defvar c-progress-interval 5
  36256. +  "*Interval used to update progress status during long re-indentation.
  36257. +If a number, percentage complete gets updated after each interval of
  36258. +that many seconds.   Set to nil to inhibit updating.  This is only
  36259. +useful for Emacs 19.")
  36260. +
  36261. +(defvar c-style-alist
  36262. +  '(("GNU"
  36263. +     (c-basic-offset . 2)
  36264. +     (c-comment-only-line-offset . 0)
  36265. +     (c-offsets-alist . ((statement-block-intro . +)
  36266. +             (knr-argdecl-intro . 5)
  36267. +             (substatement-open . +)
  36268. +             (label . -)
  36269. +             (statement-cont . +)
  36270. +             (arglist-intro . c-lineup-arglist-intro-after-paren)
  36271. +             (arglist-close . c-lineup-arglist)
  36272. +             ))
  36273. +     )
  36274. +    ("K&R"
  36275. +     (c-basic-offset . 5)
  36276. +     (c-comment-only-line-offset . 0)
  36277. +     (c-offsets-alist . ((statement-block-intro . +)
  36278. +             (knr-argdecl-intro . 0)
  36279. +             (substatement-open . 0)
  36280. +             (label . -)
  36281. +             (statement-cont . +)
  36282. +             ))
  36283. +     )
  36284. +    ("BSD"
  36285. +     (c-basic-offset . 4)
  36286. +     (c-comment-only-line-offset . 0)
  36287. +     (c-offsets-alist . ((statement-block-intro . +)
  36288. +             (knr-argdecl-intro . +)
  36289. +             (substatement-open . 0)
  36290. +             (label . -)
  36291. +             (statement-cont . +)
  36292. +             ))
  36293. +     )
  36294. +    ("Stroustrup"
  36295. +     (c-basic-offset . 4)
  36296. +     (c-comment-only-line-offset . 0)
  36297. +     (c-offsets-alist . ((statement-block-intro . +)
  36298. +             (substatement-open . 0)
  36299. +             (label . -)
  36300. +             (statement-cont . +)
  36301. +             ))
  36302. +     )
  36303. +    ("Whitesmith"
  36304. +     (c-basic-offset . 4)
  36305. +     (c-comment-only-line-offset . 0)
  36306. +     (c-offsets-alist . ((statement-block-intro . +)
  36307. +             (knr-argdecl-intro . +)
  36308. +             (substatement-open . 0)
  36309. +             (label . -)
  36310. +             (statement-cont . +)
  36311. +             ))
  36312. +
  36313. +     )
  36314. +    ("Ellemtel"
  36315. +     (c-basic-offset . 3)
  36316. +     (c-comment-only-line-offset . 0)
  36317. +     (c-hanging-braces-alist     . ((substatement-open before after)))
  36318. +     (c-offsets-alist . ((topmost-intro        . 0)
  36319. +                         (topmost-intro-cont   . 0)
  36320. +                         (substatement         . 3)
  36321. +             (substatement-open    . 0)
  36322. +             (statement-case-intro . 0)
  36323. +                         (case-label           . +)
  36324. +                         (access-label         . -3)
  36325. +                         (inclass              . 6)
  36326. +                         (inline-open          . 0)
  36327. +                         ))
  36328. +     ))
  36329. +  "Styles of Indentation.
  36330. +Elements of this alist are of the form:
  36331. +
  36332. +  (STYLE-STRING (VARIABLE . VALUE) [(VARIABLE . VALUE) ...])
  36333. +
  36334. +where STYLE-STRING is a short descriptive string used to select a
  36335. +style, VARIABLE is any cc-mode variable, and VALUE is the intended
  36336. +value for that variable when using the selected style.
  36337. +
  36338. +There is one special case when VARIABLE is `c-offsets-alist'.  In this
  36339. +case, the VALUE is a list containing elements of the form:
  36340. +
  36341. +  (SYNTACTIC-SYMBOL . VALUE)
  36342. +
  36343. +as described in `c-offsets-alist'.  These are passed directly to
  36344. +`c-set-offset' so there is no need to set every syntactic symbol in
  36345. +your style, only those that are different from the default.")
  36346. +
  36347. +;; dynamically append the default value of most variables
  36348. +(or (assoc "Default" c-style-alist)
  36349. +    (let* ((varlist '(c-inhibit-startup-warnings-p
  36350. +              c-strict-syntax-p
  36351. +              c-echo-syntactic-information-p
  36352. +              c-basic-offset
  36353. +              c-offsets-alist
  36354. +              c-tab-always-indent
  36355. +              c-comment-only-line-offset
  36356. +              c-block-comments-indent-p
  36357. +              c-cleanup-list
  36358. +              c-hanging-braces-alist
  36359. +              c-hanging-colons-alist
  36360. +              c-backslash-column
  36361. +              c-electric-pound-behavior))
  36362. +       (default (cons "Default"
  36363. +              (mapcar
  36364. +               (function
  36365. +                (lambda (var)
  36366. +                  (cons var (symbol-value var))
  36367. +                  ))
  36368. +               varlist))))
  36369. +      (setq c-style-alist (cons default c-style-alist))))
  36370. +
  36371. +(defvar c-mode-hook nil
  36372. +  "*Hook called by `c-mode'.")
  36373. +(defvar c++-mode-hook nil
  36374. +  "*Hook called by `c++-mode'.")
  36375. +(defvar objc-mode-hook nil
  36376. +  "*Hook called by `objc-mode'.")
  36377. +
  36378. +(defvar c-mode-common-hook nil
  36379. +  "*Hook called by `c-mode', `c++-mode', and 'objc-mode' during common init.")
  36380. +
  36381. +(defvar c-mode-menu
  36382. +  '(["Comment Out Region"     comment-region (mark)]
  36383. +    ["Macro Expand Region"    c-macro-expand (mark)]
  36384. +    ["Backslashify"           c-backslash-region (mark)]
  36385. +    ["Indent Expression"      c-indent-exp
  36386. +     (memq (following-char) '(?\( ?\[ ?\{))]
  36387. +    ["Indent Line"            c-indent-command t]
  36388. +    ["Fill Comment Paragraph" c-fill-paragraph t]
  36389. +    ["Up Conditional"         c-up-conditional t]
  36390. +    ["Backward Conditional"   c-backward-conditional t]
  36391. +    ["Forward Conditional"    c-forward-conditional t]
  36392. +    ["Backward Statement"     c-beginning-of-statement t]
  36393. +    ["Forward Statement"      c-end-of-statement t]
  36394. +    )
  36395. +  "XEmacs 19 (formerly Lucid) menu for C/C++/ObjC modes.")
  36396. +
  36397. +
  36398. +;; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  36399. +;; NO USER DEFINABLE VARIABLES BEYOND THIS POINT
  36400. +
  36401. +(defconst c-emacs-features
  36402. +  (let ((major (and (boundp 'emacs-major-version)
  36403. +            emacs-major-version))
  36404. +    (minor (and (boundp 'emacs-minor-version)
  36405. +            emacs-minor-version))
  36406. +    flavor comments)
  36407. +    ;; figure out version numbers if not already discovered
  36408. +    (and (or (not major) (not minor))
  36409. +     (string-match "\\([0-9]+\\).\\([0-9]+\\)" emacs-version)
  36410. +     (setq major (string-to-int (substring emacs-version
  36411. +                           (match-beginning 1)
  36412. +                           (match-end 1)))
  36413. +           minor (string-to-int (substring emacs-version
  36414. +                           (match-beginning 2)
  36415. +                           (match-end 2)))))
  36416. +    (if (not (and major minor))
  36417. +    (error "Cannot figure out the major and minor version numbers."))
  36418. +    ;; calculate the major version
  36419. +    (cond
  36420. +     ((= major 18) (setq major 'v18))    ;Emacs 18
  36421. +     ((= major 4)  (setq major 'v18))    ;Epoch 4
  36422. +     ((= major 19) (setq major 'v19    ;Emacs 19
  36423. +             flavor (if (or (string-match "Lucid" emacs-version)
  36424. +                    (string-match "XEmacs" emacs-version))
  36425. +                    'XEmacs 'FSF)))
  36426. +     ;; I don't know
  36427. +     (t (error "Cannot recognize major version number: %s" major)))
  36428. +    ;; All XEmacs 19's (formerly Lucid) use 8-bit modify-syntax-entry
  36429. +    ;; flags, as do all patched (obsolete) FSF Emacs 19, Emacs 18,
  36430. +    ;; Epoch 4's.  Only vanilla FSF Emacs 19 uses 1-bit flag.  Lets be
  36431. +    ;; as smart as we can about figuring this out.
  36432. +    (if (eq major 'v19)
  36433. +    (let ((table (copy-syntax-table)))
  36434. +      (modify-syntax-entry ?a ". 12345678" table)
  36435. +      (if (= (logand (lsh (aref table ?a) -16) 255) 255)
  36436. +          (setq comments '8-bit)
  36437. +        (setq comments '1-bit)))
  36438. +      (setq comments 'no-dual-comments))
  36439. +    ;; lets do some minimal sanity checking.
  36440. +    (if (and (or
  36441. +          ;; Lemacs before 19.6 had bugs
  36442. +          (and (eq major 'v19) (eq flavor 'XEmacs) (< minor 6))
  36443. +          ;; FSF 19 before 19.21 has known bugs
  36444. +          (and (eq major 'v19) (eq flavor 'FSF) (< minor 21)))
  36445. +         (not c-inhibit-startup-warnings-p))
  36446. +    (with-output-to-temp-buffer "*cc-mode warnings*"
  36447. +      (print (format
  36448. +"The version of Emacs that you are running, %s,
  36449. +has known bugs in its syntax.c parsing routines which will affect the
  36450. +performance of cc-mode. You should strongly consider upgrading to the
  36451. +latest available version.  cc-mode may continue to work, after a
  36452. +fashion, but strange indentation errors could be encountered."
  36453. +             emacs-version))))
  36454. +    ;; Emacs 18, with no patch is not too good
  36455. +    (if (and (eq major 'v18) (eq comments 'no-dual-comments)
  36456. +         (not c-inhibit-startup-warnings-p))
  36457. +    (with-output-to-temp-buffer "*cc-mode warnings*"
  36458. +      (print (format
  36459. +"The version of Emacs 18 you are running, %s,
  36460. +has known deficiencies in its ability to handle dual C++ comments,
  36461. +i.e. C++ line style comments and C block style comments.  This will
  36462. +not be much of a problem for you if you are only editing C code, but
  36463. +if you are doing much C++ editing, you should strongly consider
  36464. +upgrading to one of the latest Emacs 19's.  In Emacs 18, you may also
  36465. +experience performance degradations. Emacs 19 has some new built-in
  36466. +routines which will speed things up for you.
  36467. +
  36468. +Because of these inherent problems, cc-mode is no longer being
  36469. +actively maintained for Emacs 18, however, until you can upgrade to
  36470. +Emacs 19, you may want to look at cc-mode-18.el in the cc-mode
  36471. +distribution.  THIS FILE IS COMPLETELY UNSUPPORTED!  If you use it,
  36472. +you are on your own, although patch contributions will be folded into
  36473. +the main release."
  36474. +                emacs-version))))
  36475. +    ;; Emacs 18 with the syntax patches are no longer supported
  36476. +    (if (and (eq major 'v18) (not (eq comments 'no-dual-comments))
  36477. +         (not c-inhibit-startup-warnings-p))
  36478. +    (with-output-to-temp-buffer "*cc-mode warnings*"
  36479. +      (print (format
  36480. +"You are running a syntax patched Emacs 18 variant.  While this should
  36481. +work for you, you may want to consider upgrading to one of the latest
  36482. +Emacs 19's (FSF or XEmacs -- formerly Lucid).  The syntax patches are
  36483. +no longer supported either for syntax.c or cc-mode."))))
  36484. +    (list major comments))
  36485. +  "A list of features extant in the Emacs you are using.
  36486. +There are many flavors of Emacs out there, each with different
  36487. +features supporting those needed by cc-mode.  Here's the current
  36488. +supported list, along with the values for this variable:
  36489. +
  36490. + Vanilla Emacs 18/Epoch 4:   (v18 no-dual-comments)
  36491. + Emacs 18/Epoch 4 (patch2):  (v18 8-bit)
  36492. + XEmacs (formerly Lucid) 19: (v19 8-bit)
  36493. + FSF Emacs 19:               (v19 1-bit).")
  36494. +
  36495. +(defvar c++-mode-abbrev-table nil
  36496. +  "Abbrev table in use in c++-mode buffers.")
  36497. +(define-abbrev-table 'c++-mode-abbrev-table ())
  36498. +
  36499. +(defvar c-mode-abbrev-table nil
  36500. +  "Abbrev table in use in c-mode buffers.")
  36501. +(define-abbrev-table 'c-mode-abbrev-table ())
  36502. +
  36503. +(defvar objc-mode-abbrev-table nil
  36504. +  "Abbrev table in use in objc-mode buffers.")
  36505. +(define-abbrev-table 'objc-mode-abbrev-table ())
  36506. +
  36507. +(defun c-mode-fsf-menu (name map)
  36508. +  ;; Add FSF menu to a keymap.  FSF menus suck.  Don't add them for
  36509. +  ;; XEmacs. This feature test will fail on other than FSF's Emacs 19.
  36510. +  (condition-case nil
  36511. +      (progn
  36512. +    (define-key map [menu-bar] (make-sparse-keymap))
  36513. +    (define-key map [menu-bar c] (cons name (make-sparse-keymap name)))
  36514. +
  36515. +    (define-key map [menu-bar c comment-region]
  36516. +      '("Comment Out Region" . comment-region))
  36517. +    (define-key map [menu-bar c c-macro-expand]
  36518. +      '("Macro Expand Region" . c-macro-expand))
  36519. +    (define-key map [menu-bar c c-backslash-region]
  36520. +      '("Backslashify" . c-backslash-region))
  36521. +    (define-key map [menu-bar c indent-exp]
  36522. +      '("Indent Expression" . c-indent-exp))
  36523. +    (define-key map [menu-bar c indent-line]
  36524. +      '("Indent Line" . c-indent-command))
  36525. +    (define-key map [menu-bar c fill]
  36526. +      '("Fill Comment Paragraph" . c-fill-paragraph))
  36527. +    (define-key map [menu-bar c up]
  36528. +      '("Up Conditional" . c-up-conditional))
  36529. +    (define-key map [menu-bar c backward]
  36530. +      '("Backward Conditional" . c-backward-conditional))
  36531. +    (define-key map [menu-bar c forward]
  36532. +      '("Forward Conditional" . c-forward-conditional))
  36533. +    (define-key map [menu-bar c backward-stmt]
  36534. +      '("Backward Statement" . c-beginning-of-statement))
  36535. +    (define-key map [menu-bar c forward-stmt]
  36536. +      '("Forward Statement" . c-end-of-statement))
  36537. +
  36538. +    ;; RMS: mouse-3 should not select this menu.  mouse-3's global
  36539. +    ;; definition is useful in C mode and we should not interfere
  36540. +    ;; with that.  The menu is mainly for beginners, and for them,
  36541. +    ;; the menubar requires less memory than a special click.
  36542. +    t)
  36543. +    (error nil)))
  36544. +
  36545. +(defvar c-mode-map ()
  36546. +  "Keymap used in c-mode buffers.")
  36547. +(if c-mode-map
  36548. +    ()
  36549. +  ;; TBD: should we even worry about naming this keymap. My vote: no,
  36550. +  ;; because FSF and XEmacs (formerly Lucid) do it differently.
  36551. +  (setq c-mode-map (make-sparse-keymap))
  36552. +  ;; put standard keybindings into MAP
  36553. +  ;; the following mappings correspond more or less directly to BOCM
  36554. +  (define-key c-mode-map "{"         'c-electric-brace)
  36555. +  (define-key c-mode-map "}"         'c-electric-brace)
  36556. +  (define-key c-mode-map ";"         'c-electric-semi&comma)
  36557. +  (define-key c-mode-map "#"         'c-electric-pound)
  36558. +  (define-key c-mode-map ":"         'c-electric-colon)
  36559. +  ;; Lemacs 19.9 defines these two, the second of which is commented out
  36560. +  ;; (define-key c-mode-map "\e{" 'c-insert-braces)
  36561. +  ;; Commented out electric square brackets because nobody likes them.
  36562. +  ;; (define-key c-mode-map "[" 'c-insert-brackets)
  36563. +  (define-key c-mode-map "\e\C-h"    'c-mark-function)
  36564. +  (define-key c-mode-map "\e\C-q"    'c-indent-exp)
  36565. +  (define-key c-mode-map "\ea"       'c-beginning-of-statement)
  36566. +  (define-key c-mode-map "\ee"       'c-end-of-statement)
  36567. +  ;; I'd rather use an adaptive fill program instead of this.
  36568. +  (define-key c-mode-map "\eq"       'c-fill-paragraph)
  36569. +  (define-key c-mode-map "\C-c\C-n"  'c-forward-conditional)
  36570. +  (define-key c-mode-map "\C-c\C-p"  'c-backward-conditional)
  36571. +  (define-key c-mode-map "\C-c\C-u"  'c-up-conditional)
  36572. +  (define-key c-mode-map "\t"        'c-indent-command)
  36573. +  (define-key c-mode-map "\177"      'c-electric-delete)
  36574. +  ;; these are new keybindings, with no counterpart to BOCM
  36575. +  (define-key c-mode-map ","         'c-electric-semi&comma)
  36576. +  (define-key c-mode-map "/"         'c-electric-slash)
  36577. +  (define-key c-mode-map "*"         'c-electric-star)
  36578. +  (define-key c-mode-map "\C-c\C-q"  'c-indent-defun)
  36579. +  (define-key c-mode-map "\C-c\C-\\" 'c-backslash-region)
  36580. +  ;; TBD: where if anywhere, to put c-backward|forward-into-nomenclature
  36581. +  (define-key c-mode-map "\C-c\C-a"  'c-toggle-auto-state)
  36582. +  (define-key c-mode-map "\C-c\C-b"  'c-submit-bug-report)
  36583. +  (define-key c-mode-map "\C-c\C-c"  'comment-region)
  36584. +  (define-key c-mode-map "\C-c\C-d"  'c-toggle-hungry-state)
  36585. +  (define-key c-mode-map "\C-c\C-e"  'c-macro-expand)
  36586. +  (define-key c-mode-map "\C-c\C-o"  'c-set-offset)
  36587. +  (define-key c-mode-map "\C-c\C-s"  'c-show-syntactic-information)
  36588. +  (define-key c-mode-map "\C-c\C-t"  'c-toggle-auto-hungry-state)
  36589. +  (define-key c-mode-map "\C-c\C-v"  'c-version)
  36590. +  ;; FSF Emacs 19 defines menus in the mode map. This call will return
  36591. +  ;; t on FSF Emacs 19, otherwise no-op and return nil.
  36592. +  (if (and (not (c-mode-fsf-menu "C" c-mode-map))
  36593. +       ;; in XEmacs (formerly Lucid) 19, we want the menu to popup
  36594. +       ;; when the 3rd button is hit.  In 19.10 and beyond this is
  36595. +       ;; done automatically if we put the menu on mode-popup-menu
  36596. +       ;; variable, see c-common-init. RMS decided that this
  36597. +       ;; feature should not be included for FSF's Emacs.
  36598. +       (boundp 'current-menubar)
  36599. +       (not (boundp 'mode-popup-menu)))
  36600. +      (define-key c-mode-map 'button3 'c-popup-menu)))
  36601. +
  36602. +(defvar c++-mode-map ()
  36603. +  "Keymap used in c++-mode buffers.")
  36604. +(if c++-mode-map
  36605. +    ()
  36606. +  ;; In Emacs 19, it makes more sense to inherit c-mode-map
  36607. +  (if (memq 'v19 c-emacs-features)
  36608. +      ;; XEmacs (formerly Lucid) and FSF Emacs 19 do this differently
  36609. +      (if (not (fboundp 'set-keymap-parent))
  36610. +      (setq c++-mode-map (cons 'keymap c-mode-map))
  36611. +    (setq c++-mode-map (make-sparse-keymap))
  36612. +    (set-keymap-parent c++-mode-map c-mode-map))
  36613. +    ;; Do it the hard way for Emacs 18 -- given by JWZ
  36614. +    (setq c++-mode-map (nconc (make-sparse-keymap) c-mode-map)))
  36615. +  ;; add bindings which are only useful for C++
  36616. +  (define-key c++-mode-map "\C-c:"  'c-scope-operator)
  36617. +  ;; FSF Emacs 19 defines menus in the mode map. This call will return
  36618. +  ;; t on FSF Emacs 19, otherwise no-op and return nil.
  36619. +  (c-mode-fsf-menu "C++" c++-mode-map))
  36620. +
  36621. +(defvar objc-mode-map ()
  36622. +  "Keymap used in objc-mode buffers.")
  36623. +(if objc-mode-map
  36624. +    ()
  36625. +  ;; In Emacs 19, it makes more sense to inherit c-mode-map
  36626. +  (if (memq 'v19 c-emacs-features)
  36627. +      ;; XEmacs (formerly Lucid) and FSF Emacs 19 do this differently
  36628. +      (if (not (fboundp 'set-keymap-parent))
  36629. +      (setq objc-mode-map (cons 'keymap c-mode-map))
  36630. +    (setq objc-mode-map (make-sparse-keymap))
  36631. +    (set-keymap-parent objc-mode-map c-mode-map))
  36632. +    ;; Do it the hard way for Emacs 18 -- given by JWZ
  36633. +    (setq objc-mode-map (nconc (make-sparse-keymap) c-mode-map)))
  36634. +  ;; add bindings which are only useful for Objective-C
  36635. +  ;;
  36636. +  ;; no additional bindings
  36637. +  ;;
  36638. +  ;; FSF Emacs 19 defines menus in the mode map. This call will return
  36639. +  ;; t on FSF Emacs 19, otherwise no-op and return nil.
  36640. +  (c-mode-fsf-menu "ObjC" objc-mode-map))
  36641. +
  36642. +(defun c-populate-syntax-table (table)
  36643. +  ;; Populate the syntax TABLE
  36644. +  ;; DO NOT TRY TO SET _ (UNDERSCORE) TO WORD CLASS!
  36645. +  (modify-syntax-entry ?\\ "\\"    table)
  36646. +  (modify-syntax-entry ?+  "."     table)
  36647. +  (modify-syntax-entry ?-  "."     table)
  36648. +  (modify-syntax-entry ?=  "."     table)
  36649. +  (modify-syntax-entry ?%  "."     table)
  36650. +  (modify-syntax-entry ?<  "."     table)
  36651. +  (modify-syntax-entry ?>  "."     table)
  36652. +  (modify-syntax-entry ?&  "."     table)
  36653. +  (modify-syntax-entry ?|  "."     table)
  36654. +  (modify-syntax-entry ?\' "\""    table))
  36655. +
  36656. +(defvar c-mode-syntax-table nil
  36657. +  "Syntax table used in c-mode buffers.")
  36658. +(if c-mode-syntax-table
  36659. +    ()
  36660. +  (setq c-mode-syntax-table (make-syntax-table))
  36661. +  (c-populate-syntax-table c-mode-syntax-table)
  36662. +  ;; add extra comment syntax
  36663. +  (modify-syntax-entry ?/  ". 14"  c-mode-syntax-table)
  36664. +  (modify-syntax-entry ?*  ". 23"  c-mode-syntax-table))
  36665. +
  36666. +(defvar c++-mode-syntax-table nil
  36667. +  "Syntax table used in c++-mode buffers.")
  36668. +(if c++-mode-syntax-table
  36669. +    ()
  36670. +  (setq c++-mode-syntax-table (make-syntax-table))
  36671. +  (c-populate-syntax-table c++-mode-syntax-table)
  36672. +  ;; add extra comment syntax
  36673. +  (cond
  36674. +   ((memq '8-bit c-emacs-features)
  36675. +    ;; XEmacs (formerly Lucid) has the best implementation
  36676. +    (modify-syntax-entry ?/  ". 1456" c++-mode-syntax-table)
  36677. +    (modify-syntax-entry ?*  ". 23"   c++-mode-syntax-table)
  36678. +    (modify-syntax-entry ?\n "> b"    c++-mode-syntax-table)
  36679. +    ;; Give CR the same syntax as newline, for selective-display
  36680. +    (modify-syntax-entry ?\^m "> b"    c++-mode-syntax-table))
  36681. +   ((memq '1-bit c-emacs-features)
  36682. +    ;; FSF Emacs 19 does things differently, but we can work with it
  36683. +    (modify-syntax-entry ?/  ". 124b" c++-mode-syntax-table)
  36684. +    (modify-syntax-entry ?*  ". 23"   c++-mode-syntax-table)
  36685. +    (modify-syntax-entry ?\n "> b"    c++-mode-syntax-table)
  36686. +    ;; Give CR the same syntax as newline, for selective-display
  36687. +    (modify-syntax-entry ?\^m "> b"    c++-mode-syntax-table))
  36688. +   )
  36689. +  ;; TBD: does it make sense for colon to be symbol class in C++?
  36690. +  ;; I'm not so sure, since c-label-key is busted on lines like:
  36691. +  ;; Foo::bar( i );
  36692. +  ;; maybe c-label-key should be fixed instead of commenting this out,
  36693. +  ;; but it also bothers me that this only seems appropriate for C++
  36694. +  ;; and not C.
  36695. +  ;;(modify-syntax-entry ?: "_" c++-mode-syntax-table)
  36696. +  )
  36697. +
  36698. +(defvar objc-mode-syntax-table nil
  36699. +  "Syntax table used in objc-mode buffers.")
  36700. +(if objc-mode-syntax-table
  36701. +    ()
  36702. +  (setq objc-mode-syntax-table (make-syntax-table))
  36703. +  (c-populate-syntax-table objc-mode-syntax-table)
  36704. +  ;; add extra comment syntax
  36705. +  (cond
  36706. +   ((memq '8-bit c-emacs-features)
  36707. +    ;; XEmacs (formerly Lucid) has the best implementation
  36708. +    (modify-syntax-entry ?/  ". 1456" objc-mode-syntax-table)
  36709. +    (modify-syntax-entry ?*  ". 23"   objc-mode-syntax-table)
  36710. +    (modify-syntax-entry ?\n "> b"    objc-mode-syntax-table)
  36711. +    ;; Give CR the same syntax as newline, for selective-display
  36712. +    (modify-syntax-entry ?\^m "> b"   objc-mode-syntax-table))
  36713. +   ((memq '1-bit c-emacs-features)
  36714. +    ;; FSF Emacs 19 does things differently, but we can work with it
  36715. +    (modify-syntax-entry ?/  ". 124b" objc-mode-syntax-table)
  36716. +    (modify-syntax-entry ?*  ". 23"   objc-mode-syntax-table)
  36717. +    (modify-syntax-entry ?\n "> b"    objc-mode-syntax-table)
  36718. +    ;; Give CR the same syntax as newline, for selective-display
  36719. +    (modify-syntax-entry ?\^m "> b"   objc-mode-syntax-table))
  36720. +   )
  36721. +  ;; everyone gets these
  36722. +  (modify-syntax-entry ?@ "_" objc-mode-syntax-table)
  36723. +  )
  36724. +
  36725. +(defvar c-hungry-delete-key nil
  36726. +  "Internal state of hungry delete key feature.")
  36727. +(defvar c-auto-newline nil
  36728. +  "Internal state of auto newline feature.")
  36729. +(defvar c-auto-hungry-string nil
  36730. +  "Internal auto-newline/hungry-delete designation string for mode line.")
  36731. +(defvar c-syntactic-context nil
  36732. +  "Variable containing syntactic analysis list during indentation.")
  36733. +(defvar c-comment-start-regexp nil
  36734. +  "Buffer local variable describing how comment are introduced.")
  36735. +(defvar c-conditional-key nil
  36736. +  "Buffer local language-specific conditional keyword regexp.")
  36737. +(defvar c-access-key nil
  36738. +  "Buffer local language-specific access key regexp.")
  36739. +(defvar c-class-key nil
  36740. +  "Buffer local language-specific class key regexp.")
  36741. +
  36742. +(make-variable-buffer-local 'c-auto-newline)
  36743. +(make-variable-buffer-local 'c-hungry-delete-key)
  36744. +(make-variable-buffer-local 'c-auto-hungry-string)
  36745. +(make-variable-buffer-local 'c-comment-start-regexp)
  36746. +(make-variable-buffer-local 'c-conditional-key)
  36747. +(make-variable-buffer-local 'c-access-key)
  36748. +(make-variable-buffer-local 'c-class-key)
  36749. +(make-variable-buffer-local 'c-recognize-knr-p)
  36750. +
  36751. +;; cmacexp is lame because it uses no preprocessor symbols.
  36752. +;; It isn't very extensible either -- hardcodes /lib/cpp.
  36753. +;; [I add it here only because c-mode has it -- BAW]]
  36754. +(autoload 'c-macro-expand "cmacexp"
  36755. +  "Display the result of expanding all C macros occurring in the region.
  36756. +The expansion is entirely correct because it uses the C preprocessor."
  36757. +  t)
  36758. +
  36759. +
  36760. +;; constant regular expressions for looking at various constructs
  36761. +(defconst c-symbol-key "\\(\\w\\|\\s_\\)+"
  36762. +  "Regexp describing a C/C++/ObjC symbol.
  36763. +We cannot use just `word' syntax class since `_' cannot be in word
  36764. +class.  Putting underscore in word class breaks forward word movement
  36765. +behavior that users are familiar with.")
  36766. +(defconst c-C++-class-key "\\(class\\|struct\\|union\\)"
  36767. +  "Regexp describing a C++ class declaration, including templates.")
  36768. +(defconst c-inher-key
  36769. +  (concat "\\(\\<static\\>\\s +\\)?"
  36770. +      c-C++-class-key "[ \t]+" c-symbol-key
  36771. +      "\\([ \t]*:[ \t]*\\)?\\s *[^;]")
  36772. +  "Regexp describing a class inheritance declaration.")
  36773. +(defconst c-protection-key
  36774. +  "\\<\\(public\\|protected\\|private\\)\\>"
  36775. +  "Regexp describing protection keywords.")
  36776. +(defconst c-baseclass-key
  36777. +  (concat
  36778. +   ":?[ \t]*\\(virtual[ \t]+\\)?\\("
  36779. +   c-protection-key "[ \t]+\\)" c-symbol-key)
  36780. +  "Regexp describing base classes in a derived class definition.")
  36781. +(defconst c-switch-label-key
  36782. +  "\\(\\(case[( \t]+\\S .*\\)\\|default[ \t]*\\):"
  36783. +  "Regexp describing a switch's case or default label")
  36784. +(defconst c-C++-access-key
  36785. +  (concat c-protection-key ":")
  36786. +  "Regexp describing C++ access specification keywords.")
  36787. +(defconst c-label-key
  36788. +  (concat c-symbol-key ":\\([^:]\\|$\\)")
  36789. +  "Regexp describing any label.")
  36790. +(defconst c-C-conditional-key
  36791. +  "\\b\\(for\\|if\\|do\\|else\\|while\\|switch\\)\\b[^_]"
  36792. +  "Regexp describing a conditional control.")
  36793. +(defconst c-C++-conditional-key
  36794. +  "\\b\\(for\\|if\\|do\\|else\\|while\\|switch\\|try\\|catch\\)\\b[^_]"
  36795. +  "Regexp describing a conditional control for C++.")
  36796. +
  36797. +(defconst c-ObjC-method-key
  36798. +  (concat
  36799. +   "^\\s *[+-]\\s *"
  36800. +   "\\(([^)]*)\\)?"            ; return type
  36801. +   ;; \\s- in objc syntax table does not include \n
  36802. +   ;; since it is considered the end of //-comments.
  36803. +   "[ \t\n]*" c-symbol-key)
  36804. +  "Regexp describing an Objective-C method intro.")
  36805. +(defconst c-ObjC-access-key
  36806. +  (concat "@" c-protection-key)
  36807. +  "Regexp describing access specification keywords for Objective-C.")
  36808. +(defconst c-ObjC-class-key
  36809. +  (concat
  36810. +   "@\\(interface\\|implementation\\)\\s +"
  36811. +   c-symbol-key                ;name of the class
  36812. +   "\\(\\s *:\\s *" c-symbol-key "\\)?"    ;maybe followed by the superclass
  36813. +   "\\(\\s *<[^>]+>\\)?"        ;and maybe the adopted protocols list
  36814. +   )
  36815. +  "Regexp describing a class or protocol declaration for Objective-C.")
  36816. +
  36817. +
  36818. +;; main entry points for the modes
  36819. +;;;###autoload
  36820. +(defun c++-mode ()
  36821. +  "Major mode for editing C++ code.
  36822. +cc-mode Revision: 4.85
  36823. +To submit a problem report, enter `\\[c-submit-bug-report]' from a
  36824. +c++-mode buffer.  This automatically sets up a mail buffer with
  36825. +version information already added.  You just need to add a description
  36826. +of the problem, including a reproducable test case and send the
  36827. +message.
  36828. +
  36829. +Note that the details of configuring c++-mode have been moved to the
  36830. +accompanying texinfo manual (which is not yet completed -- volunteers
  36831. +are welcome).  Until then, please read the README file that came with
  36832. +the cc-mode distribution.
  36833. +
  36834. +The hook variable `c++-mode-hook' is run with no args, if that
  36835. +variable is bound and has a non-nil value.  Also the common hook
  36836. +c-mode-common-hook is run first, by this defun, `c-mode', and `objc-mode'.
  36837. +
  36838. +Key bindings:
  36839. +\\{c++-mode-map}"
  36840. +  (interactive)
  36841. +  (kill-all-local-variables)
  36842. +  (set-syntax-table c++-mode-syntax-table)
  36843. +  (setq major-mode 'c++-mode
  36844. +    mode-name "C++"
  36845. +    local-abbrev-table c++-mode-abbrev-table
  36846. +    ;; should be set before c-common-init call
  36847. +    c-recognize-knr-p nil)
  36848. +  (use-local-map c++-mode-map)
  36849. +  (c-common-init)
  36850. +  (setq comment-start "// "
  36851. +    comment-end ""
  36852. +    c-conditional-key c-C++-conditional-key
  36853. +    c-comment-start-regexp "//\\|/\\*"
  36854. +    c-class-key c-C++-class-key
  36855. +    c-access-key c-C++-access-key)
  36856. +  (run-hooks 'c++-mode-hook))
  36857. +
  36858. +;;;###autoload
  36859. +(defun c-mode ()
  36860. +  "Major mode for editing K&R and ANSI C code.
  36861. +cc-mode Revision: 4.85
  36862. +To submit a problem report, enter `\\[c-submit-bug-report]' from a
  36863. +c-mode buffer.  This automatically sets up a mail buffer with version
  36864. +information already added.  You just need to add a description of the
  36865. +problem, including a reproducable test case and send the message.
  36866. +
  36867. +Note that the details of configuring c++-mode have been moved to the
  36868. +accompanying texinfo manual (which is not yet completed -- volunteers
  36869. +are welcome).  Until then, please read the README file that came with
  36870. +the cc-mode distribution.
  36871. +
  36872. +The hook variable `c-mode-hook' is run with no args, if that value is
  36873. +bound and has a non-nil value.  Also the common hook
  36874. +c-mode-common-hook is run first, by this defun, `c++-mode', and `objc-mode'.
  36875. +
  36876. +Key bindings:
  36877. +\\{c-mode-map}"
  36878. +  (interactive)
  36879. +  (kill-all-local-variables)
  36880. +  (set-syntax-table c-mode-syntax-table)
  36881. +  (setq major-mode 'c-mode
  36882. +    mode-name "C"
  36883. +    local-abbrev-table c-mode-abbrev-table
  36884. +    ;; should be set before c-common-init call
  36885. +    c-recognize-knr-p t)
  36886. +  (use-local-map c-mode-map)
  36887. +  (c-common-init)
  36888. +  (setq comment-start "/* "
  36889. +    comment-end   " */"
  36890. +    c-conditional-key c-C-conditional-key
  36891. +    c-class-key c-C++-class-key
  36892. +    c-comment-start-regexp "/\\*")
  36893. +  (run-hooks 'c-mode-hook))
  36894. +
  36895. +;;;###autoload
  36896. +(defun objc-mode ()
  36897. +  "Major mode for editing Objective C code.
  36898. +cc-mode Revision: 4.85
  36899. +To submit a problem report, enter `\\[c-submit-bug-report]' from an
  36900. +objc-mode buffer.  This automatically sets up a mail buffer with
  36901. +version information already added.  You just need to add a description
  36902. +of the problem, including a reproducable test case and send the
  36903. +message.
  36904. +
  36905. +Note that the details of configuring c++-mode have been moved to the
  36906. +accompanying texinfo manual (which is not yet completed -- volunteers
  36907. +are welcome).  Until then, please read the README file that came with
  36908. +the cc-mode distribution.
  36909. +
  36910. +The hook variable `objc-mode-hook' is run with no args, if that value
  36911. +is bound and has a non-nil value.  Also the common hook
  36912. +c-mode-common-hook is run first, by this defun, `c-mode', and `c++-mode'.
  36913. +
  36914. +Key bindings:
  36915. +\\{objc-mode-map}"
  36916. +  (interactive)
  36917. +  (kill-all-local-variables)
  36918. +  (set-syntax-table objc-mode-syntax-table)
  36919. +  (setq major-mode 'objc-mode
  36920. +    mode-name "ObjC"
  36921. +    local-abbrev-table objc-mode-abbrev-table
  36922. +    ;; should be set before c-common-init call
  36923. +    c-recognize-knr-p t)
  36924. +  (use-local-map objc-mode-map)
  36925. +  (c-common-init)
  36926. +  (setq comment-start "// "
  36927. +    comment-end   ""
  36928. +    c-conditional-key c-C-conditional-key
  36929. +    c-comment-start-regexp "//\\|/\\*"
  36930. +     c-class-key c-ObjC-class-key
  36931. +    c-access-key c-ObjC-access-key)
  36932. +  (run-hooks 'objc-mode-hook))
  36933. +
  36934. +(defun c-common-init ()
  36935. +  ;; Common initializations for c++-mode and c-mode.
  36936. +  ;; make local variables
  36937. +  (make-local-variable 'paragraph-start)
  36938. +  (make-local-variable 'paragraph-separate)
  36939. +  (make-local-variable 'paragraph-ignore-fill-prefix)
  36940. +  (make-local-variable 'require-final-newline)
  36941. +  (make-local-variable 'parse-sexp-ignore-comments)
  36942. +  (make-local-variable 'indent-line-function)
  36943. +  (make-local-variable 'indent-region-function)
  36944. +  (make-local-variable 'comment-start)
  36945. +  (make-local-variable 'comment-end)
  36946. +  (make-local-variable 'comment-column)
  36947. +  (make-local-variable 'comment-start-skip)
  36948. +  ;; now set their values
  36949. +  (setq paragraph-start (concat "^$\\|" page-delimiter)
  36950. +    paragraph-separate paragraph-start
  36951. +    paragraph-ignore-fill-prefix t
  36952. +    require-final-newline t
  36953. +    parse-sexp-ignore-comments t
  36954. +    indent-line-function 'c-indent-line
  36955. +    indent-region-function 'c-indent-region
  36956. +    comment-column 32
  36957. +    comment-start-skip "/\\*+ *\\|// *")
  36958. +  ;; setup the comment indent variable in a Emacs version portable way
  36959. +  ;; ignore any byte compiler warnings you might get here
  36960. +  (if (boundp 'comment-indent-function)
  36961. +      (progn
  36962. +       (make-local-variable 'comment-indent-function)
  36963. +       (setq comment-indent-function 'c-comment-indent))
  36964. +    (make-local-variable 'comment-indent-hook)
  36965. +    (setq comment-indent-hook 'c-comment-indent))
  36966. +  ;; put C menu into menubar and on popup menu for XEmacs (formerly
  36967. +  ;; Lucid) 19. I think this happens automatically for FSF Emacs 19.
  36968. +  (if (and (boundp 'current-menubar)
  36969. +       current-menubar
  36970. +       (not (assoc mode-name current-menubar)))
  36971. +      (progn
  36972. +    (set-buffer-menubar (copy-sequence current-menubar))
  36973. +    (add-menu nil mode-name c-mode-menu)))
  36974. +  (if (boundp 'mode-popup-menu)
  36975. +      (setq mode-popup-menu
  36976. +        (cons (concat mode-name " Mode Commands") c-mode-menu)))
  36977. +  ;; put auto-hungry designators onto minor-mode-alist, but only once
  36978. +  (or (assq 'c-auto-hungry-string minor-mode-alist)
  36979. +      (setq minor-mode-alist
  36980. +        (cons '(c-auto-hungry-string c-auto-hungry-string)
  36981. +          minor-mode-alist)))
  36982. +  (run-hooks 'c-mode-common-hook))
  36983. +
  36984. +
  36985. +;; macros must be defined before first use
  36986. +(defmacro c-point (position)
  36987. +  ;; Returns the value of point at certain commonly referenced POSITIONs.
  36988. +  ;; POSITION can be one of the following symbols:
  36989. +  ;; 
  36990. +  ;; bol  -- beginning of line
  36991. +  ;; eol  -- end of line
  36992. +  ;; bod  -- beginning of defun
  36993. +  ;; boi  -- back to indentation
  36994. +  ;; ionl -- indentation of next line
  36995. +  ;; iopl -- indentation of previous line
  36996. +  ;; bonl -- beginning of next line
  36997. +  ;; bopl -- beginning of previous line
  36998. +  ;; 
  36999. +  ;; This function does not modify point or mark.
  37000. +  (or (and (eq 'quote (car-safe position))
  37001. +       (null (cdr (cdr position))))
  37002. +      (error "bad buffer position requested: %s" position))
  37003. +  (setq position (nth 1 position))
  37004. +  (` (let ((here (point)))
  37005. +       (,@ (cond
  37006. +        ((eq position 'bol)  '((beginning-of-line)))
  37007. +        ((eq position 'eol)  '((end-of-line)))
  37008. +        ((eq position 'bod)
  37009. +         '((beginning-of-defun)
  37010. +           ;; if defun-prompt-regexp is non-nil, b-o-d won't leave
  37011. +           ;; us at the open brace.
  37012. +           (and (boundp 'defun-prompt-regexp)
  37013. +            defun-prompt-regexp
  37014. +            (looking-at defun-prompt-regexp)
  37015. +            (goto-char (match-end 0)))
  37016. +           ))
  37017. +        ((eq position 'boi)  '((back-to-indentation)))
  37018. +        ((eq position 'bonl) '((forward-line 1)))
  37019. +        ((eq position 'bopl) '((forward-line -1)))
  37020. +        ((eq position 'iopl)
  37021. +         '((forward-line -1)
  37022. +           (back-to-indentation)))
  37023. +        ((eq position 'ionl)
  37024. +         '((forward-line 1)
  37025. +           (back-to-indentation)))
  37026. +        (t (error "unknown buffer position requested: %s" position))
  37027. +        ))
  37028. +       (prog1
  37029. +       (point)
  37030. +     (goto-char here))
  37031. +       ;; workaround for an Emacs18 bug -- blech! Well, at least it
  37032. +       ;; doesn't hurt for v19
  37033. +       (,@ nil)
  37034. +       )))
  37035. +
  37036. +(defmacro c-auto-newline ()
  37037. +  ;; if auto-newline feature is turned on, insert a newline character
  37038. +  ;; and return t, otherwise return nil.
  37039. +  (` (and c-auto-newline
  37040. +      (not (c-in-literal))
  37041. +      (not (newline)))))
  37042. +
  37043. +(defmacro c-safe (&rest body)
  37044. +  ;; safely execute BODY, return nil if an error occurred
  37045. +  (` (condition-case nil
  37046. +     (progn (,@ body))
  37047. +       (error nil))))
  37048. +
  37049. +(defun c-insert-special-chars (arg)
  37050. +  ;; simply call self-insert-command in Emacs 19
  37051. +  (self-insert-command (prefix-numeric-value arg)))
  37052. +
  37053. +
  37054. +;; This is used by indent-for-comment to decide how much to indent a
  37055. +;; comment in C code based on its context.
  37056. +(defun c-comment-indent ()
  37057. +  (if (looking-at (concat "^\\(" c-comment-start-regexp "\\)"))
  37058. +      0                ;Existing comment at bol stays there.
  37059. +    (let ((opoint (point))
  37060. +      placeholder)
  37061. +      (save-excursion
  37062. +    (beginning-of-line)
  37063. +    (cond
  37064. +     ;; CASE 1: A comment following a solitary close-brace should
  37065. +     ;; have only one space.
  37066. +     ((looking-at (concat "[ \t]*}[ \t]*\\($\\|"
  37067. +                  c-comment-start-regexp
  37068. +                  "\\)"))
  37069. +      (search-forward "}")
  37070. +      (1+ (current-column)))
  37071. +     ;; CASE 2: 2 spaces after #endif
  37072. +     ((or (looking-at "^#[ \t]*endif[ \t]*")
  37073. +          (looking-at "^#[ \t]*else[ \t]*"))
  37074. +      7)
  37075. +     ;; CASE 3: use comment-column if previous line is a
  37076. +     ;; comment-only line indented to the left of comment-column
  37077. +     ((save-excursion
  37078. +        (beginning-of-line)
  37079. +        (and (not (bobp))
  37080. +         (forward-line -1))
  37081. +        (skip-chars-forward " \t")
  37082. +        (prog1
  37083. +        (looking-at c-comment-start-regexp)
  37084. +          (setq placeholder (point))))
  37085. +      (goto-char placeholder)
  37086. +      (if (< (current-column) comment-column)
  37087. +          comment-column
  37088. +        (current-column)))
  37089. +     ;; CASE 4: If comment-column is 0, and nothing but space
  37090. +     ;; before the comment, align it at 0 rather than 1.
  37091. +     ((progn
  37092. +        (goto-char opoint)
  37093. +        (skip-chars-backward " \t")
  37094. +        (and (= comment-column 0) (bolp)))
  37095. +      0)
  37096. +     ;; CASE 5: indent at comment column except leave at least one
  37097. +     ;; space.
  37098. +     (t (max (1+ (current-column))
  37099. +         comment-column))
  37100. +     )))))
  37101. +
  37102. +
  37103. +;; active regions, and auto-newline/hungry delete key
  37104. +(defun c-keep-region-active ()
  37105. +  ;; do whatever is necessary to keep the region active in Xemacs
  37106. +  ;; (formerly Lucid). ignore byte-compiler warnings you might see
  37107. +  (and (boundp 'zmacs-region-stays)
  37108. +       (setq zmacs-region-stays t)))
  37109. +
  37110. +(defun c-update-modeline ()
  37111. +  ;; set the c-auto-hungry-string for the correct designation on the modeline
  37112. +  (setq c-auto-hungry-string
  37113. +    (if c-auto-newline
  37114. +        (if c-hungry-delete-key "/ah" "/a")
  37115. +      (if c-hungry-delete-key "/h" nil)))
  37116. +  ;; updates the modeline for all Emacsen
  37117. +  (if (memq 'v19 c-emacs-features)
  37118. +      (force-mode-line-update)
  37119. +    (set-buffer-modified-p (buffer-modified-p))))
  37120. +
  37121. +(defun c-calculate-state (arg prevstate)
  37122. +  ;; Calculate the new state of PREVSTATE, t or nil, based on arg. If
  37123. +  ;; arg is nil or zero, toggle the state. If arg is negative, turn
  37124. +  ;; the state off, and if arg is positive, turn the state on
  37125. +  (if (or (not arg)
  37126. +      (zerop (setq arg (prefix-numeric-value arg))))
  37127. +      (not prevstate)
  37128. +    (> arg 0)))
  37129. +
  37130. +(defun c-toggle-auto-state (arg)
  37131. +  "Toggle auto-newline feature.
  37132. +Optional numeric ARG, if supplied turns on auto-newline when positive,
  37133. +turns it off when negative, and just toggles it when zero.
  37134. +
  37135. +When the auto-newline feature is enabled (as evidenced by the `/a' or
  37136. +`/ah' on the modeline after the mode name) newlines are automatically
  37137. +inserted after special characters such as brace, comma, semi-colon,
  37138. +and colon."
  37139. +  (interactive "P")
  37140. +  (setq c-auto-newline (c-calculate-state arg c-auto-newline))
  37141. +  (c-update-modeline)
  37142. +  (c-keep-region-active))
  37143. +
  37144. +(defun c-toggle-hungry-state (arg)
  37145. +  "Toggle hungry-delete-key feature.
  37146. +Optional numeric ARG, if supplied turns on hungry-delete when positive,
  37147. +turns it off when negative, and just toggles it when zero.
  37148. +
  37149. +When the hungry-delete-key feature is enabled (as evidenced by the
  37150. +`/h' or `/ah' on the modeline after the mode name) the delete key
  37151. +gobbles all preceding whitespace in one fell swoop."
  37152. +  (interactive "P")
  37153. +  (setq c-hungry-delete-key (c-calculate-state arg c-hungry-delete-key))
  37154. +  (c-update-modeline)
  37155. +  (c-keep-region-active))
  37156. +
  37157. +(defun c-toggle-auto-hungry-state (arg)
  37158. +  "Toggle auto-newline and hungry-delete-key features.
  37159. +Optional numeric ARG, if supplied turns on auto-newline and
  37160. +hungry-delete when positive, turns them off when negative, and just
  37161. +toggles them when zero.
  37162. +
  37163. +See `c-toggle-auto-state' and `c-toggle-hungry-state' for details."
  37164. +  (interactive "P")
  37165. +  (setq c-auto-newline (c-calculate-state arg c-auto-newline))
  37166. +  (setq c-hungry-delete-key (c-calculate-state arg c-hungry-delete-key))
  37167. +  (c-update-modeline)
  37168. +  (c-keep-region-active))
  37169. +
  37170. +
  37171. +;; COMMANDS
  37172. +(defun c-electric-delete (arg)
  37173. +  "Deletes preceding character or whitespace.
  37174. +If `c-hungry-delete-key' is non-nil, as evidenced by the \"/h\" or
  37175. +\"/ah\" string on the mode line, then all preceding whitespace is
  37176. +consumed.  If however an ARG is supplied, or `c-hungry-delete-key' is
  37177. +nil, or point is inside a literal then the function in the variable
  37178. +`c-delete-function' is called."
  37179. +  (interactive "P")
  37180. +  (if (or (not c-hungry-delete-key)
  37181. +      arg
  37182. +      (c-in-literal))
  37183. +      (funcall c-delete-function (prefix-numeric-value arg))
  37184. +    (let ((here (point)))
  37185. +      (skip-chars-backward " \t\n")
  37186. +      (if (/= (point) here)
  37187. +      (delete-region (point) here)
  37188. +    (funcall c-delete-function 1)
  37189. +    ))))
  37190. +
  37191. +(defun c-electric-pound (arg)
  37192. +  "Electric pound (`#') insertion.
  37193. +Inserts a `#' character specially depending on the variable
  37194. +`c-electric-pound-behavior'.  If a numeric ARG is supplied, or if
  37195. +point is inside a literal, nothing special happens."
  37196. +  (interactive "P")
  37197. +  (if (or (c-in-literal)
  37198. +      arg
  37199. +      (not (memq 'alignleft c-electric-pound-behavior)))
  37200. +      ;; do nothing special
  37201. +      (self-insert-command (prefix-numeric-value arg))
  37202. +    ;; place the pound character at the left edge
  37203. +    (let ((pos (- (point-max) (point)))
  37204. +      (bolp (bolp)))
  37205. +      (beginning-of-line)
  37206. +      (delete-horizontal-space)
  37207. +      (insert-char last-command-char 1)
  37208. +      (and (not bolp)
  37209. +       (goto-char (- (point-max) pos)))
  37210. +      )))
  37211. +
  37212. +(defun c-electric-brace (arg)
  37213. +  "Insert a brace.
  37214. +
  37215. +If the auto-newline feature is turned on, as evidenced by the \"/a\"
  37216. +or \"/ah\" string on the mode line, newlines are inserted before and
  37217. +after braces based on the value of `c-hanging-braces-alist'.
  37218. +
  37219. +Also, the line is re-indented unless a numeric ARG is supplied, there
  37220. +are non-whitespace characters present on the line after the brace, or
  37221. +the brace is inserted inside a literal."
  37222. +  (interactive "P")
  37223. +  (let* ((bod (c-point 'bod))
  37224. +     (literal (c-in-literal bod))
  37225. +     ;; we want to inhibit blinking the paren since this will be
  37226. +     ;; most disruptive. we'll blink it ourselves later on
  37227. +     (old-blink-paren (if (boundp 'blink-paren-function)
  37228. +                  blink-paren-function
  37229. +                blink-paren-hook))
  37230. +     blink-paren-function        ; emacs19
  37231. +     blink-paren-hook        ; emacs18
  37232. +     syntax newlines
  37233. +     delete-temp-newline
  37234. +     ;; shut this up
  37235. +     (c-echo-syntactic-information-p nil))
  37236. +    (if (or literal
  37237. +        arg
  37238. +        (not (looking-at "[ \t]*$")))
  37239. +    (c-insert-special-chars arg)
  37240. +      (setq syntax (progn
  37241. +             ;; only insert a newline if there is
  37242. +             ;; non-whitespace behind us
  37243. +             (if (save-excursion
  37244. +               (skip-chars-backward " \t")
  37245. +               (not (bolp)))
  37246. +             (progn (newline)
  37247. +                (setq delete-temp-newline t)))
  37248. +             (self-insert-command (prefix-numeric-value arg))
  37249. +             (c-guess-basic-syntax))
  37250. +        newlines (and
  37251. +              c-auto-newline
  37252. +              (or (assq (car (or (assq 'defun-open syntax)
  37253. +                     (assq 'defun-close syntax)
  37254. +                     (assq 'class-open syntax)
  37255. +                     (assq 'class-close syntax)
  37256. +                     (assq 'inline-open syntax)
  37257. +                     (assq 'inline-close syntax)
  37258. +                     (assq 'brace-list-open syntax)
  37259. +                     (assq 'brace-list-close syntax)
  37260. +                     (assq 'brace-list-intro syntax)
  37261. +                     (assq 'brace-list-entry syntax)
  37262. +                     (assq 'block-open syntax)
  37263. +                     (assq 'block-close syntax)
  37264. +                     (assq 'substatement-open syntax)
  37265. +                     (assq 'statement-case-open syntax)
  37266. +                     ))
  37267. +                c-hanging-braces-alist)
  37268. +              '(ignore before after))))
  37269. +      ;; does a newline go before the open brace?
  37270. +      (if (memq 'before newlines)
  37271. +      ;; we leave the newline we've put in there before,
  37272. +      ;; but we need to re-indent the line above
  37273. +      (let ((pos (- (point-max) (point)))
  37274. +        (here (point)))
  37275. +        (forward-line -1)
  37276. +        (c-indent-line)
  37277. +        (goto-char (- (point-max) pos))
  37278. +        ;; if the buffer has changed due to the indentation, we
  37279. +        ;; need to recalculate syntax for the current line
  37280. +        (if (/= (point) here)
  37281. +        (setq syntax (c-guess-basic-syntax))))
  37282. +    ;; must remove the newline we just stuck in (if we really did it)
  37283. +    (and delete-temp-newline
  37284. +         (delete-region (- (point) 2) (1- (point))))
  37285. +    ;; since we're hanging the brace, we need to recalculate
  37286. +    ;; syntax
  37287. +    (setq syntax (c-guess-basic-syntax)))
  37288. +      ;; now adjust the line's indentation
  37289. +      (c-indent-line syntax)
  37290. +      ;; Do all appropriate clean ups
  37291. +      (let ((here (point))
  37292. +        (pos (- (point-max) (point)))
  37293. +        mbeg mend)
  37294. +    ;; clean up empty defun braces
  37295. +    (if (and c-auto-newline
  37296. +         (memq 'empty-defun-braces c-cleanup-list)
  37297. +         (= last-command-char ?\})
  37298. +         (or (assq 'defun-close syntax)
  37299. +             (assq 'class-close syntax)
  37300. +             (assq 'inline-close syntax))
  37301. +         (progn
  37302. +           (forward-char -1)
  37303. +           (skip-chars-backward " \t\n")
  37304. +           (= (preceding-char) ?\{))
  37305. +         ;; make sure matching open brace isn't in a comment
  37306. +         (not (c-in-literal)))
  37307. +        (delete-region (point) (1- here)))
  37308. +    ;; clean up brace-else-brace
  37309. +    (if (and c-auto-newline
  37310. +         (memq 'brace-else-brace c-cleanup-list)
  37311. +         (= last-command-char ?\{)
  37312. +         (re-search-backward "}[ \t\n]*else[ \t\n]*{" nil t)
  37313. +         (progn
  37314. +           (setq mbeg (match-beginning 0)
  37315. +             mend (match-end 0))
  37316. +           (= mend here))
  37317. +         (not (c-in-literal)))
  37318. +        (progn
  37319. +          (delete-region mbeg mend)
  37320. +          (insert "} else {")))
  37321. +    (goto-char (- (point-max) pos))
  37322. +    )
  37323. +      ;; does a newline go after the brace?
  37324. +      (if (memq 'after (cdr-safe newlines))
  37325. +      (progn
  37326. +        (newline)
  37327. +        (c-indent-line)))
  37328. +      ;; blink the paren
  37329. +      (and (= last-command-char ?\})
  37330. +       old-blink-paren
  37331. +       (save-excursion
  37332. +         (c-backward-syntactic-ws bod)
  37333. +         (if (boundp 'blink-paren-function)
  37334. +         (funcall old-blink-paren)
  37335. +           (run-hooks old-blink-paren))))
  37336. +      )))
  37337. +      
  37338. +(defun c-electric-slash (arg)
  37339. +  "Insert a slash character.
  37340. +If slash is second of a double-slash C++ style comment introducing
  37341. +construct, and we are on a comment-only-line, indent line as comment.
  37342. +If numeric ARG is supplied or point is inside a literal, indentation
  37343. +is inhibited."
  37344. +  (interactive "P")
  37345. +  (let ((indentp (and (memq major-mode '(c++-mode objc-mode))
  37346. +              (not arg)
  37347. +              (= (preceding-char) ?/)
  37348. +              (= last-command-char ?/)
  37349. +              (not (c-in-literal))))
  37350. +    ;; shut this up
  37351. +    (c-echo-syntactic-information-p nil))
  37352. +    (self-insert-command (prefix-numeric-value arg))
  37353. +    (if indentp
  37354. +    (c-indent-line))))
  37355. +
  37356. +(defun c-electric-star (arg)
  37357. +  "Insert a star character.
  37358. +If the star is the second character of a C style comment introducing
  37359. +construct, and we are on a comment-only-line, indent line as comment.
  37360. +If numeric ARG is supplied or point is inside a literal, indentation
  37361. +is inhibited."
  37362. +  (interactive "P")
  37363. +  (self-insert-command (prefix-numeric-value arg))
  37364. +  ;; if we are in a literal, or if arg is given do not re-indent the
  37365. +  ;; current line, unless this star introduces a comment-only line.
  37366. +  (if (and (not arg)
  37367. +       (memq (c-in-literal) '(c))
  37368. +       (= (preceding-char) ?*)
  37369. +       (save-excursion
  37370. +         (forward-char -1)
  37371. +         (skip-chars-backward "*")
  37372. +         (if (= (preceding-char) ?/)
  37373. +         (forward-char -1))
  37374. +         (skip-chars-backward " \t")
  37375. +         (bolp)))
  37376. +      ;; shut this up
  37377. +      (let (c-echo-syntactic-information-p)
  37378. +    (c-indent-line))
  37379. +    ))
  37380. +
  37381. +(defun c-electric-semi&comma (arg)
  37382. +  "Insert a comma or semicolon.
  37383. +When the auto-newline feature is turned on, as evidenced by the \"/a\"
  37384. +or \"/ah\" string on the mode line, a newline is inserted after
  37385. +semicolons, but not commas.
  37386. +
  37387. +When semicolon is inserted, the line is re-indented unless a numeric
  37388. +arg is supplied, point is inside a literal, or there are
  37389. +non-whitespace characters on the line following the semicolon."
  37390. +  (interactive "P")
  37391. +  (let* ((bod (c-point 'bod))
  37392. +     (literal (c-in-literal bod))
  37393. +     (here (point))
  37394. +     ;; shut this up
  37395. +     (c-echo-syntactic-information-p nil))
  37396. +    (if (or literal
  37397. +        arg
  37398. +        (not (looking-at "[ \t]*$")))
  37399. +    (c-insert-special-chars arg)
  37400. +      ;; do some special stuff with the character
  37401. +      (self-insert-command (prefix-numeric-value arg))
  37402. +      ;; do all cleanups, reindentations, and newline insertions, but
  37403. +      ;; only if c-auto-newline is turned on
  37404. +      (if (not c-auto-newline) nil
  37405. +    ;; clean ups
  37406. +    (let ((pos (- (point-max) (point))))
  37407. +      (if (and (or (and
  37408. +            (= last-command-char ?,)
  37409. +            (memq 'list-close-comma c-cleanup-list))
  37410. +               (and
  37411. +            (= last-command-char ?\;)
  37412. +            (memq 'defun-close-semi c-cleanup-list)))
  37413. +           (progn
  37414. +             (forward-char -1)
  37415. +             (skip-chars-backward " \t\n")
  37416. +             (= (preceding-char) ?}))
  37417. +           ;; make sure matching open brace isn't in a comment
  37418. +           (not (c-in-literal)))
  37419. +          (delete-region (point) here))
  37420. +      (goto-char (- (point-max) pos)))
  37421. +    ;; re-indent line
  37422. +    (c-indent-line)
  37423. +    ;; newline only after semicolon, but only if that semicolon is
  37424. +    ;; not inside a parenthesis list (e.g. a for loop statement)
  37425. +    (and (= last-command-char ?\;)
  37426. +         (condition-case nil
  37427. +         (save-excursion
  37428. +           (up-list -1)
  37429. +           (/= (following-char) ?\())
  37430. +           (error t))
  37431. +         (progn (newline) t)
  37432. +         (c-indent-line))
  37433. +    ))))
  37434. +
  37435. +(defun c-electric-colon (arg)
  37436. +  "Insert a colon.
  37437. +
  37438. +If the auto-newline feature is turned on, as evidenced by the \"/a\"
  37439. +or \"/ah\" string on the mode line, newlines are inserted before and
  37440. +after colons based on the value of `c-hanging-colons-alist'.
  37441. +
  37442. +Also, the line is re-indented unless a numeric ARG is supplied, there
  37443. +are non-whitespace characters present on the line after the colon, or
  37444. +the colon is inserted inside a literal.
  37445. +
  37446. +This function cleans up double colon scope operators based on the
  37447. +value of `c-cleanup-list'."
  37448. +  (interactive "P")
  37449. +  (let* ((bod (c-point 'bod))
  37450. +     (literal (c-in-literal bod))
  37451. +     syntax newlines
  37452. +     ;; shut this up
  37453. +     (c-echo-syntactic-information-p nil))
  37454. +    (if (or literal
  37455. +        arg
  37456. +        (not (looking-at "[ \t]*$")))
  37457. +    (c-insert-special-chars arg)
  37458. +      ;; insert the colon, then do any specified cleanups
  37459. +      (self-insert-command (prefix-numeric-value arg))
  37460. +      (let ((pos (- (point-max) (point)))
  37461. +        (here (point)))
  37462. +    (if (and c-auto-newline
  37463. +         (memq 'scope-operator c-cleanup-list)
  37464. +         (= (preceding-char) ?:)
  37465. +         (progn
  37466. +           (forward-char -1)
  37467. +           (skip-chars-backward " \t\n")
  37468. +           (= (preceding-char) ?:))
  37469. +         (not (c-in-literal))
  37470. +         (not (= (char-after (- (point) 2)) ?:)))
  37471. +        (delete-region (point) (1- here)))
  37472. +    (goto-char (- (point-max) pos)))
  37473. +      ;; lets do some special stuff with the colon character
  37474. +      (setq syntax (c-guess-basic-syntax)
  37475. +        ;; some language elements can only be determined by
  37476. +        ;; checking the following line.  Lets first look for ones
  37477. +        ;; that can be found when looking on the line with the
  37478. +        ;; colon
  37479. +        newlines
  37480. +        (and c-auto-newline
  37481. +         (or
  37482. +          (let ((langelem (or (assq 'case-label syntax)
  37483. +                      (assq 'label syntax)
  37484. +                      (assq 'access-label syntax))))
  37485. +            (and langelem
  37486. +             (assq (car langelem) c-hanging-colons-alist)))
  37487. +          (prog2
  37488. +              (insert "\n")
  37489. +              (let* ((syntax (c-guess-basic-syntax))
  37490. +                 (langelem
  37491. +                  (or (assq 'member-init-intro syntax)
  37492. +                  (assq 'inher-intro syntax))))
  37493. +            (and langelem
  37494. +                 (assq (car langelem) c-hanging-colons-alist)))
  37495. +            (delete-char -1))
  37496. +          )))
  37497. +      ;; indent the current line
  37498. +      (c-indent-line syntax)
  37499. +      ;; does a newline go before the colon?
  37500. +      (if (memq 'before newlines)
  37501. +      (let ((pos (- (point-max) (point))))
  37502. +        (forward-char -1)
  37503. +        (newline)
  37504. +        (c-indent-line)
  37505. +        (goto-char (- (point-max) pos))))
  37506. +      ;; does a newline go after the colon?
  37507. +      (if (memq 'after (cdr-safe newlines))
  37508. +      (progn
  37509. +        (newline)
  37510. +        (c-indent-line)))
  37511. +      )))
  37512. +
  37513. +(defun c-read-offset (langelem)
  37514. +  ;; read new offset value for LANGELEM from minibuffer. return a
  37515. +  ;; legal value only
  37516. +  (let ((oldoff (format "%s" (cdr-safe (assq langelem c-offsets-alist))))
  37517. +    (errmsg "Offset must be int, func, var, or one of +, -, ++, --: ")
  37518. +    (prompt "Offset: ")
  37519. +    offset input interned)
  37520. +    (while (not offset)
  37521. +      (setq input (read-string prompt oldoff)
  37522. +        offset (cond ((string-equal "+" input) '+)
  37523. +             ((string-equal "-" input) '-)
  37524. +             ((string-equal "++" input) '++)
  37525. +             ((string-equal "--" input) '--)
  37526. +             ((string-match "^-?[0-9]+$" input)
  37527. +              (string-to-int input))
  37528. +             ((fboundp (setq interned (intern input)))
  37529. +              interned)
  37530. +             ((boundp interned) interned)
  37531. +             ;; error, but don't signal one, keep trying
  37532. +             ;; to read an input value
  37533. +             (t (ding)
  37534. +                (setq prompt errmsg)
  37535. +                nil))))
  37536. +    offset))
  37537. +
  37538. +(defun c-set-offset (symbol offset &optional add-p)
  37539. +  "Change the value of a syntactic element symbol in `c-offsets-alist'.
  37540. +SYMBOL is the syntactic element symbol to change and OFFSET is the new
  37541. +offset for that syntactic element.  Optional ADD says to add SYMBOL to
  37542. +`c-offsets-alist' if it doesn't already appear there."
  37543. +  (interactive
  37544. +   (let* ((langelem
  37545. +       (intern (completing-read
  37546. +            (concat "Syntactic symbol to change"
  37547. +                (if current-prefix-arg " or add" "")
  37548. +                ": ")
  37549. +            (mapcar
  37550. +             (function
  37551. +              (lambda (langelem)
  37552. +            (cons (format "%s" (car langelem)) nil)))
  37553. +             c-offsets-alist)
  37554. +            nil (not current-prefix-arg)
  37555. +            ;; initial contents tries to be the last element
  37556. +            ;; on the syntactic analysis list for the current
  37557. +            ;; line
  37558. +            (let* ((syntax (c-guess-basic-syntax))
  37559. +               (len (length syntax))
  37560. +               (ic (format "%s" (car (nth (1- len) syntax)))))
  37561. +              (if (memq 'v19 c-emacs-features)
  37562. +              (cons ic 0)
  37563. +            ic))
  37564. +            )))
  37565. +      (offset (c-read-offset langelem)))
  37566. +     (list langelem offset current-prefix-arg)))
  37567. +  ;; sanity check offset
  37568. +  (or (eq offset '+)
  37569. +      (eq offset '-)
  37570. +      (eq offset '++)
  37571. +      (eq offset '--)
  37572. +      (integerp offset)
  37573. +      (fboundp offset)
  37574. +      (boundp offset)
  37575. +      (error "Offset must be int, func, var, or one of +, -, ++, --: %s"
  37576. +         offset))
  37577. +  (let ((entry (assq symbol c-offsets-alist)))
  37578. +    (if entry
  37579. +    (setcdr entry offset)
  37580. +      (if add-p
  37581. +      (setq c-offsets-alist (cons (cons symbol offset) c-offsets-alist))
  37582. +    (error "%s is not a valid syntactic symbol." symbol))))
  37583. +  (c-keep-region-active))
  37584. +
  37585. +(defun c-set-style (style &optional local)
  37586. +  "Set cc-mode variables to use one of several different indentation styles.
  37587. +STYLE is a string representing the desired style and optional LOCAL is
  37588. +a flag which, if non-nil, means to make the style variables being
  37589. +changed buffer local, instead of the default, which is to set the
  37590. +global variables.  Interactively, the flag comes from the prefix
  37591. +argument.  The styles are chosen from the `c-style-alist' variable."
  37592. +  (interactive (list (completing-read "Use which C indentation style? "
  37593. +                                      c-style-alist nil t)
  37594. +             current-prefix-arg))
  37595. +  (let ((vars (cdr (assoc style c-style-alist))))
  37596. +    (or vars
  37597. +    (error "Invalid C indentation style `%s'" style))
  37598. +    ;; set all the variables
  37599. +    (mapcar
  37600. +     (function
  37601. +      (lambda (varentry)
  37602. +    (let ((var (car varentry))
  37603. +          (val (cdr varentry)))
  37604. +      (and local
  37605. +           (make-local-variable var))
  37606. +      ;; special case for c-offsets-alist
  37607. +      (if (not (eq var 'c-offsets-alist))
  37608. +          (set var val)
  37609. +        ;; reset c-offsets-alist to the default value first
  37610. +        (setq c-offsets-alist (copy-alist c-offsets-alist-default))
  37611. +        ;; now set the langelems that are different
  37612. +        (mapcar
  37613. +         (function
  37614. +          (lambda (langentry)
  37615. +        (let ((langelem (car langentry))
  37616. +              (offset (cdr langentry)))
  37617. +          (c-set-offset langelem offset)
  37618. +          )))
  37619. +         val))
  37620. +      )))
  37621. +     vars))
  37622. +  (c-keep-region-active))
  37623. +
  37624. +(defun c-fill-paragraph (&optional arg)
  37625. +  "Like \\[fill-paragraph] but handles C and C++ style comments.
  37626. +If any of the current line is a comment or within a comment,
  37627. +fill the comment or the paragraph of it that point is in,
  37628. +preserving the comment indentation or line-starting decorations."
  37629. +  (interactive "P")
  37630. +  (let* (comment-start-place
  37631. +     (first-line
  37632. +      ;; Check for obvious entry to comment.
  37633. +      (save-excursion
  37634. +        (beginning-of-line)
  37635. +        (skip-chars-forward " \t\n")
  37636. +        (and (looking-at comment-start-skip)
  37637. +         (setq comment-start-place (point))))))
  37638. +    (if (and (memq major-mode '(c++-mode objc-mode))
  37639. +         (save-excursion
  37640. +           (beginning-of-line)
  37641. +           (looking-at ".*//")))
  37642. +    (let (fill-prefix
  37643. +          (paragraph-start
  37644. +           ;; Lines containing just a comment start or just an end
  37645. +           ;; should not be filled into paragraphs they are next to.
  37646. +           (concat 
  37647. +        paragraph-start
  37648. +        "\\|^[ \t]*/\\*[ \t]*$\\|^[ \t]*\\*/[ \t]*$\\|^[ \t/*]*$"))
  37649. +          (paragraph-separate
  37650. +           (concat
  37651. +        paragraph-separate
  37652. +        "\\|^[ \t]*/\\*[ \t]*$\\|^[ \t]*\\*/[ \t]*$\\|^[ \t/*]*$")))
  37653. +      (save-excursion
  37654. +        (beginning-of-line)
  37655. +        ;; Move up to first line of this comment.
  37656. +        (while (and (not (bobp))
  37657. +            (looking-at "[ \t]*//"))
  37658. +          (forward-line -1))
  37659. +        (if (not (looking-at ".*//"))
  37660. +        (forward-line 1))
  37661. +        ;; Find the comment start in this line.
  37662. +        (re-search-forward "[ \t]*//[ \t]*")
  37663. +        ;; Set the fill-prefix to be what all lines except the first
  37664. +        ;; should start with.
  37665. +        (setq fill-prefix (buffer-substring (match-beginning 0)
  37666. +                        (match-end 0)))
  37667. +        (save-restriction
  37668. +          ;; Narrow down to just the lines of this comment.
  37669. +          (narrow-to-region (c-point 'bol)
  37670. +                (save-excursion
  37671. +                  (forward-line 1)
  37672. +                  (while (looking-at fill-prefix)
  37673. +                    (forward-line 1))
  37674. +                  (point)))
  37675. +          (fill-paragraph arg)
  37676. +          )))
  37677. +      ;; else C style comments
  37678. +      (if (or first-line
  37679. +          ;; t if we enter a comment between start of function and
  37680. +          ;; this line.
  37681. +          (eq (c-in-literal) 'c)
  37682. +          ;; t if this line contains a comment starter.
  37683. +          (setq first-line
  37684. +            (save-excursion
  37685. +              (beginning-of-line)
  37686. +              (prog1
  37687. +              (re-search-forward comment-start-skip
  37688. +                         (save-excursion (end-of-line)
  37689. +                                 (point))
  37690. +                         t)
  37691. +            (setq comment-start-place (point))))))
  37692. +      ;; Inside a comment: fill one comment paragraph.
  37693. +      (let ((fill-prefix
  37694. +         ;; The prefix for each line of this paragraph
  37695. +         ;; is the appropriate part of the start of this line,
  37696. +         ;; up to the column at which text should be indented.
  37697. +         (save-excursion
  37698. +           (beginning-of-line)
  37699. +           (if (looking-at "[ \t]*/\\*.*\\*/")
  37700. +               (progn (re-search-forward comment-start-skip)
  37701. +                  (make-string (current-column) ?\ ))
  37702. +             (if first-line (forward-line 1))
  37703. +
  37704. +             (let ((line-width (progn (end-of-line) (current-column))))
  37705. +               (beginning-of-line)
  37706. +               (prog1
  37707. +               (buffer-substring
  37708. +                (point)
  37709. +
  37710. +                ;; How shall we decide where the end of the
  37711. +                ;; fill-prefix is?
  37712. +                (progn
  37713. +                  (beginning-of-line)
  37714. +                  (skip-chars-forward " \t*" (c-point 'eol))
  37715. +                  (point)))
  37716. +
  37717. +             ;; If the comment is only one line followed
  37718. +             ;; by a blank line, calling move-to-column
  37719. +             ;; above may have added some spaces and tabs
  37720. +             ;; to the end of the line; the fill-paragraph
  37721. +             ;; function will then delete it and the
  37722. +             ;; newline following it, so we'll lose a
  37723. +             ;; blank line when we shouldn't.  So delete
  37724. +             ;; anything move-to-column added to the end
  37725. +             ;; of the line.  We record the line width
  37726. +             ;; instead of the position of the old line
  37727. +             ;; end because move-to-column might break a
  37728. +             ;; tab into spaces, and the new characters
  37729. +             ;; introduced there shouldn't be deleted.
  37730. +
  37731. +             ;; If you can see a better way to do this,
  37732. +             ;; please make the change.  This seems very
  37733. +             ;; messy to me.
  37734. +             (delete-region (progn (move-to-column line-width)
  37735. +                           (point))
  37736. +                    (progn (end-of-line) (point))))))))
  37737. +
  37738. +        (paragraph-start
  37739. +         ;; Lines containing just a comment start or just an end
  37740. +         ;; should not be filled into paragraphs they are next to.
  37741. +         (concat 
  37742. +          paragraph-start
  37743. +          "\\|^[ \t]*/\\*[ \t]*$\\|^[ \t]*\\*/[ \t]*$\\|^[ \t/*]*$"))
  37744. +        (paragraph-separate
  37745. +         (concat
  37746. +          paragraph-separate
  37747. +          "\\|^[ \t]*/\\*[ \t]*$\\|^[ \t]*\\*/[ \t]*$\\|^[ \t/*]*$"))
  37748. +        (chars-to-delete 0))
  37749. +        (save-restriction
  37750. +          ;; Don't fill the comment together with the code
  37751. +          ;; following it.  So temporarily exclude everything
  37752. +          ;; before the comment start, and everything after the
  37753. +          ;; line where the comment ends.  If comment-start-place
  37754. +          ;; is non-nil, the comment starter is there.  Otherwise,
  37755. +          ;; point is inside the comment.
  37756. +          (narrow-to-region (save-excursion
  37757. +                  (if comment-start-place
  37758. +                      (goto-char comment-start-place)
  37759. +                    (search-backward "/*"))
  37760. +                  ;; Protect text before the comment
  37761. +                  ;; start by excluding it.  Add
  37762. +                  ;; spaces to bring back proper
  37763. +                  ;; indentation of that point.
  37764. +                  (let ((column (current-column)))
  37765. +                    (prog1 (point)
  37766. +                      (setq chars-to-delete column)
  37767. +                      (insert-char ?\  column))))
  37768. +                (save-excursion
  37769. +                  (if comment-start-place
  37770. +                      (goto-char (+ comment-start-place 2)))
  37771. +                  (search-forward "*/" nil 'move)
  37772. +                  (forward-line 1)
  37773. +                  (point)))
  37774. +          (fill-paragraph arg)
  37775. +          (save-excursion
  37776. +        ;; Delete the chars we inserted to avoid clobbering
  37777. +        ;; the stuff before the comment start.
  37778. +        (goto-char (point-min))
  37779. +        (if (> chars-to-delete 0)
  37780. +            (delete-region (point) (+ (point) chars-to-delete)))
  37781. +        ;; Find the comment ender (should be on last line of
  37782. +        ;; buffer, given the narrowing) and don't leave it on
  37783. +        ;; its own line, unless that's the style that's desired.
  37784. +        (goto-char (point-max))
  37785. +        (forward-line -1)
  37786. +        (search-forward "*/" nil 'move)
  37787. +        (beginning-of-line)
  37788. +        (if (and c-hanging-comment-ender-p
  37789. +             (looking-at "[ \t]*\\*/"))
  37790. +            ;(delete-indentation)))))
  37791. +            (let ((fill-column (+ fill-column 9999)))
  37792. +              (forward-line -1)
  37793. +              (fill-region-as-paragraph (point) (point-max)))))))
  37794. +    ;; Outside of comments: do ordinary filling.
  37795. +    (fill-paragraph arg)))))
  37796. +
  37797. +;; better movement routines for ThisStyleOfVariablesCommonInCPlusPlus
  37798. +;; originally contributed by Terry_Glanfield.Southern@rxuk.xerox.com
  37799. +(defun c-forward-into-nomenclature (&optional arg)
  37800. +  "Move forward to end of a nomenclature section or word.
  37801. +With arg, to it arg times."
  37802. +  (interactive "p")
  37803. +  (let ((case-fold-search nil))
  37804. +    (if (> arg 0)
  37805. +    (re-search-forward "\\W*\\([A-Z]*[a-z0-9]*\\)" (point-max) t arg)
  37806. +      (while (and (< arg 0)
  37807. +          (re-search-backward
  37808. +           "\\(\\(\\W\\|[a-z0-9]\\)[A-Z]+\\|\\W\\w+\\)"
  37809. +           (point-min) 0))
  37810. +    (forward-char 1)
  37811. +    (setq arg (1+ arg)))))
  37812. +  (c-keep-region-active))
  37813. +
  37814. +(defun c-backward-into-nomenclature (&optional arg)
  37815. +  "Move backward to beginning of a nomenclature section or word.
  37816. +With optional ARG, move that many times.  If ARG is negative, move
  37817. +forward."
  37818. +  (interactive "p")
  37819. +  (c-forward-into-nomenclature (- arg))
  37820. +  (c-keep-region-active))
  37821. +
  37822. +(defun c-scope-operator ()
  37823. +  "Insert a double colon scope operator at point.
  37824. +No indentation or other \"electric\" behavior is performed."
  37825. +  (interactive)
  37826. +  (insert "::"))
  37827. +
  37828. +;; TBD: These are from XEmacs (formerly Lucid) 19.9's version of c-mode.el
  37829. +;;(defun c-insert-brackets ()
  37830. +;;  (interactive)
  37831. +;;  (insert ?[)
  37832. +;;  (save-excursion
  37833. +;;    (insert ?])))
  37834. +
  37835. +;;(defun c-insert-braces ()
  37836. +;;  (interactive)
  37837. +;;  (setq last-command-char ?{)
  37838. +;;  (electric-c-brace 1)
  37839. +;;  (newline)
  37840. +;;  (c-indent-line)
  37841. +;;  (save-excursion
  37842. +;;    (newline)
  37843. +;;    (insert ?})
  37844. +;;    (c-indent-line)))
  37845. +
  37846. +
  37847. +(defun c-beginning-of-statement (&optional count lim)
  37848. +  "Go to the beginning of the innermost C statement.
  37849. +With prefix arg, go back N - 1 statements.  If already at the
  37850. +beginning of a statement then go to the beginning of the preceding
  37851. +one.  If within a string or comment, or next to a comment (only
  37852. +whitespace between), move by sentences instead of statements.
  37853. +
  37854. +When called from a program, this function takes 2 optional args: the
  37855. +prefix arg, and a buffer position limit which is the farthest back to
  37856. +search."
  37857. +  (interactive "p")
  37858. +  (let ((here (point))
  37859. +    (count (or count 1))
  37860. +    (lim (or lim (c-point 'bod)))
  37861. +    state)
  37862. +    (save-excursion
  37863. +      (goto-char lim)
  37864. +      (setq state (parse-partial-sexp (point) here nil nil)))
  37865. +    (if (and (interactive-p)
  37866. +         (or (nth 3 state)
  37867. +         (nth 4 state)
  37868. +         (looking-at (concat "[ \t]*" comment-start-skip))
  37869. +         (save-excursion
  37870. +           (skip-chars-backward " \t")
  37871. +           (goto-char (- (point) 2))
  37872. +           (looking-at "\\*/"))))
  37873. +    (forward-sentence (- count))
  37874. +      (while (> count 0)
  37875. +    (c-beginning-of-statement-1)
  37876. +    (setq count (1- count)))
  37877. +      (while (< count 0)
  37878. +    (c-end-of-statement-1)
  37879. +    (setq count (1+ count))))
  37880. +    ;; its possible we've been left up-buf of lim
  37881. +    (goto-char (max (point) lim))
  37882. +    )
  37883. +  (c-keep-region-active))
  37884. +
  37885. +(defun c-end-of-statement (&optional count lim)
  37886. +  "Go to the end of the innermost C statement.
  37887. +
  37888. +With prefix arg, go forward N - 1 statements.  Move forward to end of
  37889. +the next statement if already at end.  If within a string or comment,
  37890. +move by sentences instead of statements.
  37891. +
  37892. +When called from a program, this function takes 2 optional args: the
  37893. +prefix arg, and a buffer position limit which is the farthest back to
  37894. +search."
  37895. +  (interactive "p")
  37896. +  (c-beginning-of-statement (- (or count 1)) lim)
  37897. +  (c-keep-region-active))
  37898. +
  37899. +(defun c-beginning-of-statement-1 ()
  37900. +  ;; move to the start of the current statement, or the previous
  37901. +  ;; statement if already at the beginning of one.
  37902. +  (let ((firstp t)
  37903. +    donep c-in-literal-cache maybe-labelp
  37904. +    (last-begin (point)))
  37905. +    (while (not donep)
  37906. +      ;; stop at beginning of buffer
  37907. +      (if (bobp) (setq donep t)
  37908. +    ;; go backwards one balanced expression, but be careful of
  37909. +    ;; unbalanced paren being reached
  37910. +    (if (not (c-safe (progn (backward-sexp 1) t)))
  37911. +        (progn
  37912. +          (if firstp
  37913. +          (backward-up-list 1)
  37914. +        (goto-char last-begin))
  37915. +          ;; skip over any unary operators, or other special
  37916. +          ;; characters appearing at front of identifier
  37917. +          (save-excursion
  37918. +        (c-backward-syntactic-ws)
  37919. +        (skip-chars-backward "-+!*&:.~ \t\n")
  37920. +        (if (= (preceding-char) ?\()
  37921. +            (setq last-begin (point))))
  37922. +          (goto-char last-begin)
  37923. +          (setq last-begin (point)
  37924. +            donep t)))
  37925. +
  37926. +    (setq maybe-labelp nil)
  37927. +    ;; see if we're in a literal. if not, then this bufpos may be
  37928. +    ;; a candidate for stopping
  37929. +    (cond
  37930. +     ;; CASE 0: did we hit the error condition above?
  37931. +     (donep)
  37932. +     ;; CASE 1: are we in a literal?
  37933. +     ((eq (c-in-literal) 'pound)
  37934. +      (beginning-of-line))
  37935. +     ;; CASE 2: some other kind of literal?
  37936. +     ((c-in-literal))
  37937. +     ;; CASE 3: are we looking at a conditional keyword?
  37938. +     ((or (looking-at c-conditional-key)
  37939. +          (and (= (following-char) ?\()
  37940. +           (let ((here (point))
  37941. +             (foundp (progn
  37942. +                   (c-backward-syntactic-ws)
  37943. +                   (forward-word -1)
  37944. +                   (looking-at c-conditional-key))))
  37945. +             (if (not foundp)
  37946. +             (goto-char here))
  37947. +             foundp)))
  37948. +      ;; are we in the middle of an else-if clause?
  37949. +      (if (save-excursion
  37950. +        (c-safe (forward-sexp -1))
  37951. +        (looking-at "\\<else\\>[ \t]+\\<if\\>"))
  37952. +          (forward-sexp -1))
  37953. +      (setq last-begin (point)
  37954. +        donep t))
  37955. +     ;; CASE 4: is this the first time we're checking?
  37956. +     (firstp (setq firstp nil
  37957. +               last-begin (point)))
  37958. +     ;; CASE 5: have we crossed a statement barrier?
  37959. +     ((let ((lim (point))
  37960. +        crossedp)
  37961. +        (save-excursion
  37962. +          (while (and (not crossedp)
  37963. +              (< (point) last-begin))
  37964. +        (skip-chars-forward "^;{}:" last-begin)
  37965. +        (if (not (c-in-literal lim))
  37966. +            (if (memq (following-char) '(?\; ?{ ?}))
  37967. +            (setq crossedp t
  37968. +                  donep t)
  37969. +              (if (= (following-char) ?:)
  37970. +              (setq maybe-labelp t))
  37971. +              (forward-char 1))
  37972. +          (forward-char 1))))
  37973. +        crossedp))
  37974. +     ;; CASE 6: ignore labels
  37975. +     ((and maybe-labelp
  37976. +           (or (and c-access-key (looking-at c-access-key))
  37977. +           ;; with switch labels, we have to go back further
  37978. +           ;; to try to pick up the case or default
  37979. +           ;; keyword. Potential bogosity alert: we assume
  37980. +           ;; `case' or `default' is first thing on line
  37981. +           (let ((here (point)))
  37982. +             (beginning-of-line)
  37983. +             (c-forward-syntactic-ws)
  37984. +             (if (looking-at c-switch-label-key)
  37985. +             t
  37986. +               (goto-char here)
  37987. +               nil))
  37988. +           (looking-at c-label-key))))
  37989. +     ;; CASE 7: ObjC method def
  37990. +     ((and (eq major-mode 'objc-mode)
  37991. +           (c-in-objc-method-def-p))
  37992. +      (setq last-begin (point)
  37993. +        donep t))
  37994. +     ;; CASE 8: nothing special
  37995. +     (t (setq last-begin (point)))
  37996. +     )))
  37997. +    (goto-char last-begin)
  37998. +    ;; we always do want to skip over non-whitespace modifier
  37999. +    ;; characters that didn't get skipped above
  38000. +    (skip-chars-backward "-+!*&:.~" (c-point 'boi))))
  38001. +
  38002. +(defun c-end-of-statement-1 ()
  38003. +  (condition-case ()
  38004. +      (progn
  38005. +    (while (and (not (eobp))
  38006. +            (let ((beg (point)))
  38007. +              (forward-sexp 1)
  38008. +              (let ((end (point)))
  38009. +            (save-excursion
  38010. +              (goto-char beg)
  38011. +              (not (re-search-forward "[;{}]" end t)))))))
  38012. +    (re-search-backward "[;}]")
  38013. +    (forward-char 1))
  38014. +    (error 
  38015. +     (let ((beg (point)))
  38016. +       (backward-up-list -1)
  38017. +       (let ((end (point)))
  38018. +     (goto-char beg)
  38019. +     (search-forward ";" end 'move))))))
  38020. +
  38021. +
  38022. +;;(defun c-beginning-of-defun (count)
  38023. +;;  "Move the the COUNTth `real' beginning-of-defun.
  38024. +;;This is defined as the first declaration line of the most enclosing
  38025. +;;top level construct; i.e. class/struct, function, enum, etc.  With
  38026. +;;negative COUNT, go forward."
  38027. +;;  (interactive "p")
  38028. +;;  )
  38029. +;;
  38030. +;;(defun c-beginning-of-defun-1 ()
  38031. +;;  ;; move to the real beginning of defun. `Real' being defined as the
  38032. +;;  ;; first C/C++ declaration line of the most enclosing top level construct.
  38033. +;;  (let* ((state (c-parse-state))
  38034. +;;     (search-start (car state)))
  38035. +;;    ;; if the last thing is a cons then start searching from the end
  38036. +;;    ;; of the previous balanced sexp
  38037. +;;    (goto-char (or (car-safe search-start)
  38038. +;;           (and (numberp search-start)
  38039. +;;            search-start)
  38040. +;;           (point)))
  38041. +;;    (c-beginning-of-statement)
  38042. +;;    (if (bobp)
  38043. +;;    (c-forward-syntactic-ws))
  38044. +;;    ))
  38045. +;;
  38046. +;;(defun c-end-of-defun-1 ()
  38047. +;;  ;; move to the end of the defun.
  38048. +;;  (let* ((state (c-parse-state))
  38049. +;;     (search-start (car state))
  38050. +;;     )))
  38051. +;;
  38052. +
  38053. +(defun c-up-conditional (count)
  38054. +  "Move back to the containing preprocessor conditional, leaving mark behind.
  38055. +A prefix argument acts as a repeat count.  With a negative argument,
  38056. +move forward to the end of the containing preprocessor conditional.
  38057. +When going backwards, `#elif' is treated like `#else' followed by
  38058. +`#if'.  When going forwards, `#elif' is ignored."
  38059. +  (interactive "p")
  38060. +  (c-forward-conditional (- count) t)
  38061. +  (c-keep-region-active))
  38062. +
  38063. +(defun c-backward-conditional (count &optional up-flag)
  38064. +  "Move back across a preprocessor conditional, leaving mark behind.
  38065. +A prefix argument acts as a repeat count.  With a negative argument,
  38066. +move forward across a preprocessor conditional."
  38067. +  (interactive "p")
  38068. +  (c-forward-conditional (- count) up-flag)
  38069. +  (c-keep-region-active))
  38070. +
  38071. +(defun c-forward-conditional (count &optional up-flag)
  38072. +  "Move forward across a preprocessor conditional, leaving mark behind.
  38073. +A prefix argument acts as a repeat count.  With a negative argument,
  38074. +move backward across a preprocessor conditional."
  38075. +  (interactive "p")
  38076. +  (let* ((forward (> count 0))
  38077. +     (increment (if forward -1 1))
  38078. +     (search-function (if forward 're-search-forward 're-search-backward))
  38079. +     (new))
  38080. +    (save-excursion
  38081. +      (while (/= count 0)
  38082. +    (let ((depth (if up-flag 0 -1)) found)
  38083. +      (save-excursion
  38084. +        ;; Find the "next" significant line in the proper direction.
  38085. +        (while (and (not found)
  38086. +            ;; Rather than searching for a # sign that
  38087. +            ;; comes at the beginning of a line aside from
  38088. +            ;; whitespace, search first for a string
  38089. +            ;; starting with # sign.  Then verify what
  38090. +            ;; precedes it.  This is faster on account of
  38091. +            ;; the fastmap feature of the regexp matcher.
  38092. +            (funcall search-function
  38093. +                 "#[ \t]*\\(if\\|elif\\|endif\\)"
  38094. +                 nil t))
  38095. +          (beginning-of-line)
  38096. +          ;; Now verify it is really a preproc line.
  38097. +          (if (looking-at "^[ \t]*#[ \t]*\\(if\\|elif\\|endif\\)")
  38098. +          (let ((prev depth))
  38099. +            ;; Update depth according to what we found.
  38100. +            (beginning-of-line)
  38101. +            (cond ((looking-at "[ \t]*#[ \t]*endif")
  38102. +               (setq depth (+ depth increment)))
  38103. +              ((looking-at "[ \t]*#[ \t]*elif")
  38104. +               (if (and forward (= depth 0))
  38105. +                   (setq found (point))))
  38106. +              (t (setq depth (- depth increment))))
  38107. +            ;; If we are trying to move across, and we find an
  38108. +            ;; end before we find a beginning, get an error.
  38109. +            (if (and (< prev 0) (< depth prev))
  38110. +            (error (if forward
  38111. +                   "No following conditional at this level"
  38112. +                 "No previous conditional at this level")))
  38113. +            ;; When searching forward, start from next line so
  38114. +            ;; that we don't find the same line again.
  38115. +            (if forward (forward-line 1))
  38116. +            ;; If this line exits a level of conditional, exit
  38117. +            ;; inner loop.
  38118. +            (if (< depth 0)
  38119. +            (setq found (point))))
  38120. +        ;; else
  38121. +        (if forward (forward-line 1))
  38122. +        )))
  38123. +      (or found
  38124. +          (error "No containing preprocessor conditional"))
  38125. +      (goto-char (setq new found)))
  38126. +    (setq count (+ count increment))))
  38127. +    (push-mark)
  38128. +    (goto-char new))
  38129. +  (c-keep-region-active))
  38130. +
  38131. +
  38132. +;; commands to indent lines, regions, defuns, and expressions
  38133. +(defun c-indent-command (&optional whole-exp)
  38134. +  "Indent current line as C++ code, or in some cases insert a tab character.
  38135. +
  38136. +If `c-tab-always-indent' is t, always just indent the current line.
  38137. +If nil, indent the current line only if point is at the left margin or
  38138. +in the line's indentation; otherwise insert a tab.  If other than nil
  38139. +or t, then tab is inserted only within literals (comments and strings)
  38140. +and inside preprocessor directives, but line is always reindented.
  38141. +
  38142. +A numeric argument, regardless of its value, means indent rigidly all
  38143. +the lines of the expression starting after point so that this line
  38144. +becomes properly indented.  The relative indentation among the lines
  38145. +of the expression are preserved."
  38146. +  (interactive "P")
  38147. +  (let ((bod (c-point 'bod)))
  38148. +    (if whole-exp
  38149. +    ;; If arg, always indent this line as C
  38150. +    ;; and shift remaining lines of expression the same amount.
  38151. +    (let ((shift-amt (c-indent-line))
  38152. +          beg end)
  38153. +      (save-excursion
  38154. +        (if (eq c-tab-always-indent t)
  38155. +        (beginning-of-line))
  38156. +        (setq beg (point))
  38157. +        (forward-sexp 1)
  38158. +        (setq end (point))
  38159. +        (goto-char beg)
  38160. +        (forward-line 1)
  38161. +        (setq beg (point)))
  38162. +      (if (> end beg)
  38163. +          (indent-code-rigidly beg end (- shift-amt) "#")))
  38164. +      ;; No arg supplied, use c-tab-always-indent to determine
  38165. +      ;; behavior
  38166. +      (cond
  38167. +       ;; CASE 1: indent when at column zero or in lines indentation,
  38168. +       ;; otherwise insert a tab
  38169. +       ((not c-tab-always-indent)
  38170. +    (if (save-excursion
  38171. +          (skip-chars-backward " \t")
  38172. +          (not (bolp)))
  38173. +        (insert-tab)
  38174. +      (c-indent-line)))
  38175. +       ;; CASE 2: just indent the line
  38176. +       ((eq c-tab-always-indent t)
  38177. +    (c-indent-line))
  38178. +       ;; CASE 3: if in a literal, insert a tab, but always indent the
  38179. +       ;; line
  38180. +       (t
  38181. +    (if (c-in-literal bod)
  38182. +        (insert-tab))
  38183. +    (c-indent-line)
  38184. +    )))))
  38185. +
  38186. +(defun c-indent-exp (&optional shutup-p)
  38187. +  "Indent each line in balanced expression following point.
  38188. +Optional SHUTUP-P if non-nil, inhibits message printing and error checking."
  38189. +  (interactive "P")
  38190. +  (let ((here (point))
  38191. +    end)
  38192. +    (unwind-protect
  38193. +    (let ((c-echo-syntactic-information-p nil) ;keep quiet for speed
  38194. +          (start (progn
  38195. +               ;; try to be smarter about finding the range of
  38196. +               ;; lines to indent. skip all following
  38197. +               ;; whitespace. failing that, try to find any
  38198. +               ;; opening brace on the current line
  38199. +               (skip-chars-forward " \t\n")
  38200. +               (if (memq (following-char) '(?\( ?\[ ?\{))
  38201. +               (point)
  38202. +             (let ((state (parse-partial-sexp (point)
  38203. +                              (c-point 'eol))))
  38204. +               (and (nth 1 state)
  38205. +                (goto-char (nth 1 state))
  38206. +                (memq (following-char) '(?\( ?\[ ?\{))
  38207. +                (point)))))))
  38208. +      ;; find balanced expression end
  38209. +      (setq end (and (c-safe (progn (forward-sexp 1) t))
  38210. +             (point-marker)))
  38211. +      ;; sanity check
  38212. +      (and (not start)
  38213. +           (not shutup-p)
  38214. +           (error "Cannot find start of balanced expression to indent."))
  38215. +      (and (not end)
  38216. +           (not shutup-p)
  38217. +           (error "Cannot find end of balanced expression to
  38218. +           indent."))
  38219. +      (c-progress-init start end 'c-indent-exp)
  38220. +      (goto-char start)
  38221. +      (beginning-of-line)
  38222. +      (while (< (point) end)
  38223. +        (if (not (looking-at "[ \t]*$"))
  38224. +        (c-indent-line))
  38225. +        (c-progress-update)
  38226. +        (forward-line 1)))
  38227. +      ;; make sure marker is deleted
  38228. +      (and end
  38229. +       (set-marker end nil))
  38230. +      (c-progress-fini 'c-indent-exp)
  38231. +      (goto-char here))))
  38232. +
  38233. +(defun c-indent-defun ()
  38234. +  "Re-indents the current top-level function def, struct or class declaration."
  38235. +  (interactive)
  38236. +  (let ((here (point-marker))
  38237. +    (c-echo-syntactic-information-p nil)
  38238. +    (brace (c-least-enclosing-brace (c-parse-state))))
  38239. +    (if brace
  38240. +    (goto-char brace)
  38241. +      (beginning-of-defun))
  38242. +    ;; if defun-prompt-regexp is non-nil, b-o-d might not leave us at
  38243. +    ;; the open brace. I consider this an Emacs bug.
  38244. +    (and (boundp 'defun-prompt-regexp)
  38245. +     defun-prompt-regexp
  38246. +     (looking-at defun-prompt-regexp)
  38247. +     (goto-char (match-end 0)))
  38248. +    ;; catch all errors in c-indent-exp so we can 1. give more
  38249. +    ;; meaningful error message, and 2. restore point
  38250. +    (unwind-protect
  38251. +    (c-indent-exp)
  38252. +      (goto-char here)
  38253. +      (set-marker here nil))))
  38254. +
  38255. +(defun c-indent-region (start end)
  38256. +  ;; Indent every line whose first char is between START and END inclusive.
  38257. +  (save-excursion
  38258. +    (goto-char start)
  38259. +    ;; Advance to first nonblank line.
  38260. +    (skip-chars-forward " \t\n")
  38261. +    (beginning-of-line)
  38262. +    (let (endmark)
  38263. +      (unwind-protect
  38264. +      (let ((c-tab-always-indent t)
  38265. +        ;; shut up any echo msgs on indiv lines
  38266. +        (c-echo-syntactic-information-p nil))
  38267. +        (c-progress-init start end 'c-indent-region)
  38268. +        (setq endmark (copy-marker end))
  38269. +        (while (and (bolp)
  38270. +            (not (eobp))
  38271. +            (< (point) endmark))
  38272. +          ;; update progress
  38273. +          (c-progress-update)
  38274. +          ;; Indent one line as with TAB.
  38275. +          (let (nextline sexpend sexpbeg)
  38276. +        ;; skip blank lines
  38277. +        (skip-chars-forward " \t\n")
  38278. +        (beginning-of-line)
  38279. +        ;; indent the current line
  38280. +        (c-indent-line)
  38281. +        (if (save-excursion
  38282. +              (beginning-of-line)
  38283. +              (looking-at "[ \t]*#"))
  38284. +            (forward-line 1)
  38285. +          (save-excursion
  38286. +            ;; Find beginning of following line.
  38287. +            (setq nextline (c-point 'bonl))
  38288. +            ;; Find first beginning-of-sexp for sexp extending past
  38289. +            ;; this line.
  38290. +            (beginning-of-line)
  38291. +            (while (< (point) nextline)
  38292. +              (condition-case nil
  38293. +              (progn
  38294. +                (forward-sexp 1)
  38295. +                (setq sexpend (point)))
  38296. +            (error (setq sexpend nil)
  38297. +                   (goto-char nextline)))
  38298. +              (c-forward-syntactic-ws))
  38299. +            (if sexpend
  38300. +            (progn 
  38301. +              ;; make sure the sexp we found really starts on the
  38302. +              ;; current line and extends past it
  38303. +              (goto-char sexpend)
  38304. +              (setq sexpend (point-marker))
  38305. +              (backward-sexp 1)
  38306. +              (setq sexpbeg (point)))))
  38307. +          ;; check to see if the next line starts a
  38308. +          ;; comment-only line
  38309. +          (save-excursion
  38310. +            (forward-line 1)
  38311. +            (skip-chars-forward " \t")
  38312. +            (if (looking-at c-comment-start-regexp)
  38313. +            (setq sexpbeg (c-point 'bol))))
  38314. +          ;; If that sexp ends within the region, indent it all at
  38315. +          ;; once, fast.
  38316. +          (condition-case nil
  38317. +              (if (and sexpend
  38318. +                   (> sexpend nextline)
  38319. +                   (<= sexpend endmark))
  38320. +              (progn
  38321. +                (goto-char sexpbeg)
  38322. +                (c-indent-exp 'shutup)
  38323. +                (c-progress-update)
  38324. +                (goto-char sexpend)))
  38325. +            (error
  38326. +             (goto-char sexpbeg)
  38327. +             (c-indent-line)))
  38328. +          ;; Move to following line and try again.
  38329. +          (and sexpend
  38330. +               (markerp sexpend)
  38331. +               (set-marker sexpend nil))
  38332. +          (forward-line 1)))))
  38333. +    (set-marker endmark nil)
  38334. +    (c-progress-fini 'c-indent-region)
  38335. +    ))))
  38336. +
  38337. +(defun c-mark-function ()
  38338. +  "Put mark at end of a C, C++, or Objective-C defun, point at beginning."
  38339. +  (interactive)
  38340. +  (let ((here (point))
  38341. +    ;; there should be a c-point position for 'eod
  38342. +    (eod  (save-excursion (end-of-defun) (point)))
  38343. +    (state (c-parse-state))
  38344. +    brace)
  38345. +    (while state
  38346. +      (setq brace (car state))
  38347. +      (if (consp brace)
  38348. +      (goto-char (cdr brace))
  38349. +    (goto-char brace))
  38350. +      (setq state (cdr state)))
  38351. +    (if (= (following-char) ?{)
  38352. +    (progn
  38353. +      (forward-line -1)
  38354. +      (while (not (or (bobp)
  38355. +              (looking-at "[ \t]*$")))
  38356. +        (forward-line -1)))
  38357. +      (forward-line 1)
  38358. +      (skip-chars-forward " \t\n"))
  38359. +    (push-mark here)
  38360. +    (push-mark eod nil t)))
  38361. +
  38362. +
  38363. +;; for progress reporting
  38364. +(defvar c-progress-info nil)
  38365. +
  38366. +(defun c-progress-init (start end context)
  38367. +  ;; start the progress update messages.  if this emacs doesn't have a
  38368. +  ;; built-in timer, just be dumb about it
  38369. +  (if (not (fboundp 'current-time))
  38370. +      (message "indenting region... (this may take a while)")
  38371. +    ;; if progress has already been initialized, do nothing. otherwise
  38372. +    ;; initialize the counter with a vector of:
  38373. +    ;; [start end lastsec context]
  38374. +    (if c-progress-info
  38375. +    ()
  38376. +      (setq c-progress-info (vector start
  38377. +                    (save-excursion
  38378. +                      (goto-char end)
  38379. +                      (point-marker))
  38380. +                    (nth 1 (current-time))
  38381. +                    context))
  38382. +      (message "indenting region..."))))
  38383. +
  38384. +(defun c-progress-update ()
  38385. +  ;; update progress
  38386. +  (if (not (and c-progress-info c-progress-interval))
  38387. +      nil
  38388. +    (let ((now (nth 1 (current-time)))
  38389. +      (start (aref c-progress-info 0))
  38390. +      (end (aref c-progress-info 1))
  38391. +      (lastsecs (aref c-progress-info 2)))
  38392. +      ;; should we update?  currently, update happens every 2 seconds,
  38393. +      ;; what's the right value?
  38394. +      (if (< c-progress-interval (- now lastsecs))
  38395. +      (progn
  38396. +        (message "indenting region... (%d%% complete)"
  38397. +             (/ (* 100 (- (point) start)) (- end start)))
  38398. +        (aset c-progress-info 2 now)))
  38399. +      )))
  38400. +
  38401. +(defun c-progress-fini (context)
  38402. +  ;; finished
  38403. +  (if (or (eq context (aref c-progress-info 3))
  38404. +      (eq context t))
  38405. +      (progn
  38406. +    (set-marker (aref c-progress-info 1) nil)
  38407. +    (setq c-progress-info nil)
  38408. +    (message "indenting region... done."))))
  38409. +
  38410. +
  38411. +;; Skipping of "syntactic whitespace" for Emacs 19.  Syntactic
  38412. +;; whitespace is defined as lexical whitespace, C and C++ style
  38413. +;; comments, and preprocessor directives.  Search no farther back or
  38414. +;; forward than optional LIM.  If LIM is omitted, `beginning-of-defun'
  38415. +;; is used for backward skipping, point-max is used for forward
  38416. +;; skipping.  Note that Emacs 18 support has been moved to cc-mode-18.el.
  38417. +
  38418. +(defun c-forward-syntactic-ws (&optional lim)
  38419. +  ;; Forward skip of syntactic whitespace for Emacs 19.
  38420. +  (save-restriction
  38421. +    (let* ((lim (or lim (point-max)))
  38422. +       (here lim)
  38423. +       (hugenum (point-max)))
  38424. +      (narrow-to-region lim (point))
  38425. +      (while (/= here (point))
  38426. +    (setq here (point))
  38427. +    (forward-comment hugenum)
  38428. +    ;; skip preprocessor directives
  38429. +    (if (and (= (following-char) ?#)
  38430. +         (= (c-point 'boi) (point)))
  38431. +        (end-of-line)
  38432. +      )))))
  38433. +
  38434. +(defun c-backward-syntactic-ws (&optional lim)
  38435. +  ;; Backward skip over syntactic whitespace for Emacs 19.
  38436. +  (save-restriction
  38437. +    (let* ((lim (or lim (c-point 'bod)))
  38438. +       (here lim)
  38439. +       (hugenum (- (point-max))))
  38440. +      (if (< lim (point))
  38441. +      (progn
  38442. +        (narrow-to-region lim (point))
  38443. +        (while (/= here (point))
  38444. +          (setq here (point))
  38445. +          (forward-comment hugenum)
  38446. +          (if (eq (c-in-literal lim) 'pound)
  38447. +          (beginning-of-line))
  38448. +          )))
  38449. +      )))
  38450. +
  38451. +
  38452. +;; Return `c' if in a C-style comment, `c++' if in a C++ style
  38453. +;; comment, `string' if in a string literal, `pound' if on a
  38454. +;; preprocessor line, or nil if not in a comment at all.  Optional LIM
  38455. +;; is used as the backward limit of the search.  If omitted, or nil,
  38456. +;; `beginning-of-defun' is used."
  38457. +
  38458. +;; This is for all v19 Emacsen supporting either 1-bit or 8-bit syntax
  38459. +(defun c-in-literal (&optional lim)
  38460. +  ;; Determine if point is in a C++ literal. we cache the last point
  38461. +  ;; calculated if the cache is enabled
  38462. +  (if (and (boundp 'c-in-literal-cache)
  38463. +       c-in-literal-cache
  38464. +       (= (point) (aref c-in-literal-cache 0)))
  38465. +      (aref c-in-literal-cache 1)
  38466. +    (let ((rtn (save-excursion
  38467. +         (let* ((lim (or lim (c-point 'bod)))
  38468. +            (here (point))
  38469. +            (state (parse-partial-sexp lim (point))))
  38470. +           (cond
  38471. +            ((nth 3 state) 'string)
  38472. +            ((nth 4 state) (if (nth 7 state) 'c++ 'c))
  38473. +            ((progn
  38474. +               (goto-char here)
  38475. +               (beginning-of-line)
  38476. +               (looking-at "[ \t]*#"))
  38477. +             'pound)
  38478. +            (t nil))))))
  38479. +      ;; cache this result if the cache is enabled
  38480. +      (and (boundp 'c-in-literal-cache)
  38481. +       (setq c-in-literal-cache (vector (point) rtn)))
  38482. +      rtn)))
  38483. +
  38484. +
  38485. +;; utilities for moving and querying around syntactic elements
  38486. +(defun c-parse-state ()
  38487. +  ;; Finds and records all open parens between some important point
  38488. +  ;; earlier in the file and point.
  38489. +  (let* (at-bob placeholder
  38490. +     (pos (save-excursion
  38491. +        ;; go back 2 bods, but ignore any bogus positions
  38492. +        ;; returned by beginning-of-defun (i.e. open paren in
  38493. +        ;; column zero)
  38494. +        (let ((cnt 0))
  38495. +          (while (and (not at-bob) (< cnt 2))
  38496. +            (beginning-of-defun)
  38497. +            (if (= (following-char) ?\{)
  38498. +            (setq cnt (1+ cnt)))
  38499. +            (if (bobp)
  38500. +            (setq at-bob t))))
  38501. +        (point)))
  38502. +     (here (save-excursion
  38503. +         ;;(skip-chars-forward " \t}")
  38504. +         (point)))
  38505. +     (last-bod pos) (last-pos pos) state sexp-end)
  38506. +    ;; cache last bod position
  38507. +    (while (catch 'backup-bod
  38508. +         (setq state nil)
  38509. +         (while (and pos (< pos here))
  38510. +           (setq last-pos pos)
  38511. +           (if (and (setq pos (c-safe (scan-lists pos 1 -1)))
  38512. +            (<= pos here))
  38513. +           (progn
  38514. +             (setq sexp-end (c-safe (scan-sexps (1- pos) 1)))
  38515. +             (if (and sexp-end
  38516. +                  (<= sexp-end here))
  38517. +             ;; we want to record both the start and end
  38518. +             ;; of this sexp, but we only want to record
  38519. +             ;; the last-most of any of them before here
  38520. +             (progn
  38521. +               (if (= (char-after (1- pos)) ?\{)
  38522. +                   (setq state (cons (cons (1- pos) sexp-end)
  38523. +                         (if (consp (car state))
  38524. +                             (cdr state)
  38525. +                           state))))
  38526. +               (setq pos sexp-end))
  38527. +               ;; we're contained in this sexp so put pos on
  38528. +               ;; front of list
  38529. +               (setq state (cons (1- pos) state))))
  38530. +         ;; something bad happened. check to see if we crossed
  38531. +         ;; an unbalanced close brace. if so, we didn't really
  38532. +         ;; find the right `important bufpos' so lets back up
  38533. +         ;; and try again
  38534. +         (if (and (not pos) (not at-bob)
  38535. +              (setq placeholder (c-safe (scan-lists last-pos 1 1)))
  38536. +              ;;(char-after (1- placeholder))
  38537. +              (<= placeholder here)
  38538. +              (= (char-after (1- placeholder)) ?\}))
  38539. +             (while t
  38540. +               (setq last-bod (c-safe (scan-lists last-bod -1 1)))
  38541. +               (if (not last-bod)
  38542. +               (error "unbalanced close brace found at position %d"
  38543. +                  (1- placeholder))
  38544. +             (setq at-bob (= last-bod (point-min))
  38545. +                   pos last-bod)
  38546. +             (if (= (char-after last-bod) ?\{)
  38547. +                 (throw 'backup-bod t)))
  38548. +               ))        ;end-if
  38549. +         ))            ;end-while
  38550. +         nil))
  38551. +    state))
  38552. +
  38553. +(defun c-beginning-of-inheritance-list (&optional lim)
  38554. +  ;; Go to the first non-whitespace after the colon that starts a
  38555. +  ;; multiple inheritance introduction.  Optional LIM is the farthest
  38556. +  ;; back we should search.
  38557. +  (let ((lim (or lim (c-point 'bod)))
  38558. +    (placeholder (progn
  38559. +               (back-to-indentation)
  38560. +               (point))))
  38561. +    (c-backward-syntactic-ws lim)
  38562. +    (while (and (> (point) lim)
  38563. +        (memq (preceding-char) '(?, ?:))
  38564. +        (progn
  38565. +          (beginning-of-line)
  38566. +          (setq placeholder (point))
  38567. +          (skip-chars-forward " \t")
  38568. +          (not (looking-at c-class-key))
  38569. +          ))
  38570. +      (c-backward-syntactic-ws lim))
  38571. +    (goto-char placeholder)
  38572. +    (skip-chars-forward "^:" (c-point 'eol))))
  38573. +
  38574. +(defun c-beginning-of-macro (&optional lim)
  38575. +  ;; Go to the beginning of the macro. Right now we don't support
  38576. +  ;; multi-line macros too well
  38577. +  (back-to-indentation))
  38578. +
  38579. +(defun c-in-objc-method-def-p ()
  38580. +  ;; Return nil if we aren't in a method definition, otherwise the
  38581. +  ;; position of the initial [+-].
  38582. +  (save-excursion
  38583. +    (c-backward-syntactic-ws)
  38584. +    (if (or (= (preceding-char) ?-)
  38585. +        (= (preceding-char) ?+))
  38586. +    (let ((initial-pos (1- (point))))
  38587. +      (beginning-of-line)
  38588. +      (if (looking-at c-ObjC-method-key)
  38589. +          initial-pos))
  38590. +      nil)))
  38591. +
  38592. +(defun c-just-after-func-arglist-p (&optional containing)
  38593. +  ;; Return t if we are between a function's argument list closing
  38594. +  ;; paren and its opening brace.  Note that the list close brace
  38595. +  ;; could be followed by a "const" specifier or a member init hanging
  38596. +  ;; colon.  Optional CONTAINING is position of containing s-exp open
  38597. +  ;; brace.  If not supplied, point is used as search start.
  38598. +  (save-excursion
  38599. +    (c-backward-syntactic-ws)
  38600. +    (let ((checkpoint (or containing (point))))
  38601. +      (goto-char checkpoint)
  38602. +      ;; could be looking at const specifier
  38603. +      (if (and (= (preceding-char) ?t)
  38604. +           (forward-word -1)
  38605. +           (looking-at "\\<const\\>"))
  38606. +      (c-backward-syntactic-ws)
  38607. +    ;; otherwise, we could be looking at a hanging member init
  38608. +    ;; colon
  38609. +    (goto-char checkpoint)
  38610. +    (if (and (= (preceding-char) ?:)
  38611. +         (progn
  38612. +           (forward-char -1)
  38613. +           (c-backward-syntactic-ws)
  38614. +           (looking-at "[ \t\n]*:\\([^:]+\\|$\\)")))
  38615. +        nil
  38616. +      (goto-char checkpoint))
  38617. +    )
  38618. +      (and (= (preceding-char) ?\))
  38619. +       ;; check if we are looking at a method def
  38620. +       (or (not (eq major-mode 'objc-mode))
  38621. +           (progn
  38622. +         (forward-sexp -1)
  38623. +         (forward-char -1)
  38624. +         (c-backward-syntactic-ws)
  38625. +         (not (or (= (preceding-char) ?-)
  38626. +              (= (preceding-char) ?+)
  38627. +              ;; or a class category
  38628. +              (progn
  38629. +                (forward-sexp -2)
  38630. +                (looking-at c-class-key))
  38631. +              )))))
  38632. +      )))
  38633. +
  38634. +;; defuns to look backwards for things
  38635. +(defun c-backward-to-start-of-do (&optional lim)
  38636. +  ;; Move to the start of the last "unbalanced" do expression.
  38637. +  ;; Optional LIM is the farthest back to search.
  38638. +  (let ((do-level 1)
  38639. +    (case-fold-search nil)
  38640. +    (lim (or lim (c-point 'bod))))
  38641. +    (while (not (zerop do-level))
  38642. +      ;; we protect this call because trying to execute this when the
  38643. +      ;; while is not associated with a do will throw an error
  38644. +      (condition-case nil
  38645. +      (progn
  38646. +        (backward-sexp 1)
  38647. +        (cond
  38648. +         ((memq (c-in-literal lim) '(c c++)))
  38649. +         ((looking-at "while\\b[^_]")
  38650. +          (setq do-level (1+ do-level)))
  38651. +         ((looking-at "do\\b[^_]")
  38652. +          (setq do-level (1- do-level)))
  38653. +         ((< (point) lim)
  38654. +          (setq do-level 0)
  38655. +          (goto-char lim))))
  38656. +    (error
  38657. +     (goto-char lim)
  38658. +     (setq do-level 0))))))
  38659. +
  38660. +(defun c-backward-to-start-of-if (&optional lim)
  38661. +  ;; Move to the start of the last "unbalanced" if and return t.  If
  38662. +  ;; none is found, and we are looking at an if clause, nil is
  38663. +  ;; returned.  If none is found and we are looking at an else clause,
  38664. +  ;; an error is thrown.
  38665. +  (let ((if-level 1)
  38666. +    (case-fold-search nil)
  38667. +    (lim (or lim (c-point 'bod)))
  38668. +    (at-if (looking-at "if\\b[^_]")))
  38669. +    (catch 'orphan-if
  38670. +      (while (and (not (bobp))
  38671. +          (not (zerop if-level)))
  38672. +    (c-backward-syntactic-ws)
  38673. +    (condition-case nil
  38674. +        (backward-sexp 1)
  38675. +      (error
  38676. +       (if at-if
  38677. +           (throw 'orphan-if nil)
  38678. +         (error "Orphaned `else' clause encountered."))))
  38679. +    (cond
  38680. +     ((looking-at "else\\b[^_]")
  38681. +      (setq if-level (1+ if-level)))
  38682. +     ((looking-at "if\\b[^_]")
  38683. +      ;; check for else if... skip over
  38684. +      (let ((here (point)))
  38685. +        (c-safe (forward-sexp -1))
  38686. +        (if (looking-at "\\<else\\>[ \t]+\\<if\\>")
  38687. +        nil
  38688. +          (setq if-level (1- if-level))
  38689. +          (goto-char here))))
  38690. +     ((< (point) lim)
  38691. +      (setq if-level 0)
  38692. +      (goto-char lim))
  38693. +     ))
  38694. +      t)))
  38695. +
  38696. +(defun c-skip-conditional ()
  38697. +  ;; skip forward over conditional at point, including any predicate
  38698. +  ;; statements in parentheses. No error checking is performed.
  38699. +  (forward-sexp
  38700. +   ;; else if()
  38701. +   (if (looking-at "\\<else\\>[ \t]+\\<if\\>")
  38702. +       3
  38703. +     ;; do and else aren't followed by parens
  38704. +     (if (looking-at "\\<\\(do\\|else\\)\\>")
  38705. +     1 2))))
  38706. +
  38707. +(defun c-skip-case-statement-forward (&optional lim)
  38708. +  ;; skip forward over case/default bodies, with optional maximal
  38709. +  ;; limit. if no next case body is found, nil is returned and point
  38710. +  ;; is not moved
  38711. +  (let ((lim (or lim (point-max)))
  38712. +    (here (point))
  38713. +    donep foundp)
  38714. +    (while (and (< (point) lim)
  38715. +        (not donep))
  38716. +      (if (and (re-search-forward c-switch-label-key lim 'move)
  38717. +           (save-match-data
  38718. +         (not (c-in-literal)))
  38719. +           (/= (match-beginning 0) here))
  38720. +      (progn
  38721. +        (goto-char (match-beginning 0))
  38722. +        (setq donep t
  38723. +          foundp t))))
  38724. +    (if (not foundp)
  38725. +    (goto-char here))
  38726. +    foundp))
  38727. +
  38728. +(defun c-search-uplist-for-classkey (brace-state)
  38729. +  ;; search for the containing class, returning a 2 element vector if
  38730. +  ;; found. aref 0 contains the bufpos of the class key, and aref 1
  38731. +  ;; contains the bufpos of the open brace.
  38732. +  (if (null brace-state)
  38733. +      ;; no brace-state means we cannot be inside a class
  38734. +      nil
  38735. +    (let ((carcache (car brace-state))
  38736. +      search-start search-end)
  38737. +      (if (consp carcache)
  38738. +      ;; a cons cell in the first element means that there is some
  38739. +      ;; balanced sexp before the current bufpos. this we can
  38740. +      ;; ignore. the nth 1 and nth 2 elements define for us the
  38741. +      ;; search boundaries
  38742. +      (setq search-start (nth 2 brace-state)
  38743. +        search-end (nth 1 brace-state))
  38744. +    ;; if the car was not a cons cell then nth 0 and nth 1 define
  38745. +    ;; for us the search boundaries
  38746. +    (setq search-start (nth 1 brace-state)
  38747. +          search-end (nth 0 brace-state)))
  38748. +      ;; search-end cannot be a cons cell
  38749. +      (and (consp search-end)
  38750. +       (error "consp search-end: %s" search-end))
  38751. +      ;; if search-end is nil, or if the search-end character isn't an
  38752. +      ;; open brace, we are definitely not in a class
  38753. +      (if (or (not search-end)
  38754. +          (/= (char-after search-end) ?{))
  38755. +      nil
  38756. +    ;; now, we need to look more closely at search-start.  if
  38757. +    ;; search-start is nil, then our start boundary is really
  38758. +    ;; point-min.
  38759. +    (if (not search-start)
  38760. +        (setq search-start (point-min))
  38761. +      ;; if search-start is a cons cell, then we can start
  38762. +      ;; searching from the end of the balanced sexp just ahead of
  38763. +      ;; us
  38764. +      (if (consp search-start)
  38765. +          (setq search-start (cdr search-start))))
  38766. +    ;; now we can do a quick regexp search from search-start to
  38767. +    ;; search-end and see if we can find a class key.  watch for
  38768. +    ;; class like strings in literals
  38769. +    (save-excursion
  38770. +      (save-restriction
  38771. +        (goto-char search-start)
  38772. +        (let (foundp class)
  38773. +          (while (and (not foundp)
  38774. +              (progn
  38775. +                (c-forward-syntactic-ws)
  38776. +                (> search-end (point)))
  38777. +              (re-search-forward c-class-key search-end t))
  38778. +        (setq class (match-beginning 0))
  38779. +        (if (c-in-literal search-start)
  38780. +            nil            ; its in a comment or string, ignore
  38781. +          (goto-char class)
  38782. +          (skip-chars-forward " \t\n")
  38783. +          (setq foundp (vector (c-point 'boi) search-end))
  38784. +          ;; make sure we're really looking at the start of
  38785. +          ;; a class definition, and not a forward decl,
  38786. +          ;; return arg, template arg list, or an ObjC method.
  38787. +          (if (eq major-mode 'objc-mode)
  38788. +              (if (re-search-forward c-ObjC-method-key search-end t)
  38789. +              (setq foundp nil))
  38790. +            ;; Its impossible to define a regexp for this, and
  38791. +            ;; nearly so to do it programmatically.
  38792. +            ;;
  38793. +            ;; ; picks up forward decls
  38794. +            ;; = picks up init lists
  38795. +            ;; ) picks up return types
  38796. +            ;; > picks up templates, but remember that we can
  38797. +            ;;   inherit from templates!
  38798. +            (let ((skipchars "^;=)"))
  38799. +              ;; try to see if we found the `class' keyword
  38800. +              ;; inside a template arg list
  38801. +              (save-excursion
  38802. +            (skip-chars-backward "^<" search-start)
  38803. +            (if (= (preceding-char) ?<)
  38804. +                (setq skipchars (concat skipchars ">"))))
  38805. +              (skip-chars-forward skipchars search-end)
  38806. +              (if (/= (point) search-end)
  38807. +              (setq foundp nil))
  38808. +              ))))
  38809. +          foundp))
  38810. +      )))))
  38811. +
  38812. +(defun c-inside-bracelist-p (containing-sexp brace-state)
  38813. +  ;; return the buffer position of the beginning of the brace list
  38814. +  ;; statement if we're inside a brace list, otherwise return nil.
  38815. +  ;; CONTAINING-SEXP is the buffer pos of the innermost containing
  38816. +  ;; paren. BRACE-STATE is the remainder of the state of enclosing braces
  38817. +  (or
  38818. +   ;; this will pick up enum lists
  38819. +   (save-excursion
  38820. +     (goto-char containing-sexp)
  38821. +     (c-beginning-of-statement)
  38822. +     ;; c-b-o-s could have left us at point-min
  38823. +     (and (bobp)
  38824. +      (c-forward-syntactic-ws))
  38825. +     (if (and (< (point) containing-sexp)
  38826. +          (looking-at "\\(typedef[ \t]+\\)?enum[ \t\n]+")
  38827. +          (save-excursion
  38828. +        (skip-chars-forward "^;(" containing-sexp)
  38829. +        (= (point) containing-sexp)))
  38830. +     (point)))
  38831. +   ;; this will pick up array/aggregate init lists, even if they are nested.
  38832. +   (save-excursion
  38833. +     (let (bufpos)
  38834. +       (while (and (not bufpos)
  38835. +           containing-sexp)
  38836. +     (if (consp containing-sexp)
  38837. +         (setq containing-sexp (car brace-state)
  38838. +           brace-state (cdr brace-state))
  38839. +       (goto-char containing-sexp)
  38840. +       (c-backward-syntactic-ws)
  38841. +       (if (/= (preceding-char) ?=)
  38842. +           ;; lets see if we're nested. find the most nested
  38843. +           ;; containing brace
  38844. +           (setq containing-sexp (car brace-state)
  38845. +             brace-state (cdr brace-state))
  38846. +         ;; we've hit the beginning of the aggregate list
  38847. +         (c-beginning-of-statement)
  38848. +         (setq bufpos (point)))
  38849. +       ))
  38850. +       bufpos))
  38851. +   ))
  38852. +
  38853. +
  38854. +;; defuns for calculating the syntactic state and indenting a single
  38855. +;; line of C/C++/ObjC code
  38856. +(defmacro c-add-syntax (symbol &optional relpos)
  38857. +  ;; a simple macro to append the syntax in symbol to the syntax list.
  38858. +  ;; try to increase performance by using this macro
  38859. +  (` (setq syntax (cons (cons (, symbol) (, relpos)) syntax))))
  38860. +
  38861. +(defun c-most-enclosing-brace (state)
  38862. +  ;; return the bufpos of the most enclosing brace that hasn't been
  38863. +  ;; narrowed out by any enclosing class, or nil if none was found
  38864. +  (let (enclosingp)
  38865. +    (while (and state (not enclosingp))
  38866. +      (setq enclosingp (car state)
  38867. +        state (cdr state))
  38868. +      (if (consp enclosingp)
  38869. +      (setq enclosingp nil)
  38870. +    (if (> (point-min) enclosingp)
  38871. +        (setq enclosingp nil))
  38872. +    (setq state nil)))
  38873. +    enclosingp))
  38874. +
  38875. +(defun c-least-enclosing-brace (state)
  38876. +  ;; return the bufpos of the least (highest) enclosing brace that
  38877. +  ;; hasn't been narrowed out by any enclosing class, or nil if none
  38878. +  ;; was found.
  38879. +  (c-most-enclosing-brace (nreverse state)))
  38880. +
  38881. +(defun c-narrow-out-enclosing-class (state lim)
  38882. +  ;; narrow the buffer so that the enclosing class is hidden
  38883. +  (let (inclass-p)
  38884. +    (and state
  38885. +     (setq inclass-p (c-search-uplist-for-classkey state))
  38886. +     (narrow-to-region
  38887. +      (progn
  38888. +        (goto-char (1+ (aref inclass-p 1)))
  38889. +        (skip-chars-forward " \t\n" lim)
  38890. +        ;; if point is now left of the class opening brace, we're
  38891. +        ;; hosed, so try a different tact
  38892. +        (if (<= (c-point 'bol) (aref inclass-p 1))
  38893. +        (progn
  38894. +          (goto-char (1+ (aref inclass-p 1)))
  38895. +          (c-forward-syntactic-ws lim)))
  38896. +        (c-point 'bol))
  38897. +      ;; end point is the end of the current line
  38898. +      (progn
  38899. +        (goto-char lim)
  38900. +        (c-point 'eol))))
  38901. +    ;; return the class vector
  38902. +    inclass-p))
  38903. +
  38904. +(defun c-guess-basic-syntax ()
  38905. +  ;; guess the syntactic description of the current line of C++ code.
  38906. +  (save-excursion
  38907. +    (save-restriction
  38908. +      (beginning-of-line)
  38909. +      (let* ((indent-point (point))
  38910. +         (case-fold-search nil)
  38911. +         (state (c-parse-state))
  38912. +         (in-method-intro-p (and (eq major-mode 'objc-mode)
  38913. +                     (looking-at c-ObjC-method-key)))
  38914. +         literal containing-sexp char-before-ip char-after-ip lim
  38915. +         syntax placeholder c-in-literal-cache
  38916. +         ;; narrow out any enclosing class
  38917. +         (inclass-p (c-narrow-out-enclosing-class state indent-point))
  38918. +         )
  38919. +
  38920. +    ;; get the buffer position of the most nested opening brace,
  38921. +    ;; if there is one, and it hasn't been narrowed out
  38922. +    (save-excursion
  38923. +      (goto-char indent-point)
  38924. +      (skip-chars-forward " \t}")
  38925. +      (skip-chars-backward " \t")
  38926. +      (while (and state
  38927. +              (not in-method-intro-p)
  38928. +              (not containing-sexp))
  38929. +        (setq containing-sexp (car state)
  38930. +          state (cdr state))
  38931. +        (if (consp containing-sexp)
  38932. +        ;; if cdr == point, then containing sexp is the brace
  38933. +        ;; that opens the sexp we close
  38934. +        (if (= (cdr containing-sexp) (point))
  38935. +            (setq containing-sexp (car containing-sexp))
  38936. +          ;; otherwise, ignore this element
  38937. +          (setq containing-sexp nil))
  38938. +          ;; ignore the bufpos if its been narrowed out by the
  38939. +          ;; containing class
  38940. +          (if (<= containing-sexp (point-min))
  38941. +          (setq containing-sexp nil)))))
  38942. +
  38943. +    ;; set the limit on the farthest back we need to search
  38944. +    (setq lim (or containing-sexp (point-min)))
  38945. +
  38946. +    ;; cache char before and after indent point, and move point to
  38947. +    ;; the most likely position to perform the majority of tests
  38948. +    (goto-char indent-point)
  38949. +    (skip-chars-forward " \t")
  38950. +    (setq char-after-ip (following-char))
  38951. +    (c-backward-syntactic-ws lim)
  38952. +    (setq char-before-ip (preceding-char))
  38953. +    (goto-char indent-point)
  38954. +    (skip-chars-forward " \t")
  38955. +
  38956. +    ;; are we in a literal?
  38957. +    (setq literal (c-in-literal lim))
  38958. +
  38959. +    ;; now figure out syntactic qualities of the current line
  38960. +    (cond
  38961. +     ;; CASE 1: in a string.
  38962. +     ((memq literal '(string))
  38963. +      (c-add-syntax 'string (c-point 'bopl)))
  38964. +     ;; CASE 2: in a C or C++ style comment.
  38965. +     ((memq literal '(c c++))
  38966. +      ;; we need to catch multi-paragraph C comments
  38967. +      (while (and (zerop (forward-line -1))
  38968. +              (looking-at "^[ \t]*$")))
  38969. +      (c-add-syntax literal (c-point 'bol)))
  38970. +     ;; CASE 3: in a cpp preprocessor
  38971. +     ((eq literal 'pound)
  38972. +      (c-beginning-of-macro lim)
  38973. +      (c-add-syntax 'cpp-macro (c-point 'boi)))
  38974. +     ;; CASE 4: in an objective-c method intro
  38975. +     (in-method-intro-p
  38976. +      (c-add-syntax 'objc-method-intro (c-point 'boi)))
  38977. +     ;; CASE 5: Line is at top level.
  38978. +     ((null containing-sexp)
  38979. +      (cond
  38980. +       ;; CASE 5A: we are looking at a defun, class, or
  38981. +       ;; inline-inclass method opening brace
  38982. +       ((= char-after-ip ?{)
  38983. +        (cond
  38984. +         ;; CASE 5A.1: we are looking at a class opening brace
  38985. +         ((save-excursion
  38986. +        (goto-char indent-point)
  38987. +        (skip-chars-forward " \t{")
  38988. +        (let ((decl (c-search-uplist-for-classkey (c-parse-state))))
  38989. +          (and decl
  38990. +               (setq placeholder (aref decl 0)))
  38991. +          ))
  38992. +          (c-add-syntax 'class-open placeholder))
  38993. +         ;; CASE 5A.2: brace list open
  38994. +         ((save-excursion
  38995. +        (c-beginning-of-statement nil lim)
  38996. +        ;; c-b-o-s could have left us at point-min
  38997. +        (and (bobp)
  38998. +             (c-forward-syntactic-ws indent-point))
  38999. +        (setq placeholder (point))
  39000. +        (and (or (looking-at "enum[ \t\n]+")
  39001. +             (= char-before-ip ?=))
  39002. +             (save-excursion
  39003. +               (skip-chars-forward "^;" indent-point)
  39004. +               (/= (following-char) ?\;))))
  39005. +          (c-add-syntax 'brace-list-open placeholder))
  39006. +         ;; CASE 5A.3: inline defun open
  39007. +         (inclass-p
  39008. +          (c-add-syntax 'inline-open (aref inclass-p 0)))
  39009. +         ;; CASE 5A.4: ordinary defun open
  39010. +         (t
  39011. +          (goto-char placeholder)
  39012. +          (c-add-syntax 'defun-open (c-point 'bol))
  39013. +          )))
  39014. +       ;; CASE 5B: first K&R arg decl or member init
  39015. +       ((c-just-after-func-arglist-p)
  39016. +        (cond
  39017. +         ;; CASE 5B.1: a member init
  39018. +         ((or (= char-before-ip ?:)
  39019. +          (= char-after-ip ?:))
  39020. +          ;; this line should be indented relative to the beginning
  39021. +          ;; of indentation for the topmost-intro line that contains
  39022. +          ;; the prototype's open paren
  39023. +          ;; TBD: is the following redundant?
  39024. +          (if (= char-before-ip ?:)
  39025. +          (forward-char -1))
  39026. +          (c-backward-syntactic-ws lim)
  39027. +          ;; TBD: is the preceding redundant?
  39028. +          (if (= (preceding-char) ?:)
  39029. +          (progn (forward-char -1)
  39030. +             (c-backward-syntactic-ws lim)))
  39031. +          (if (= (preceding-char) ?\))
  39032. +          (backward-sexp 1))
  39033. +          (c-add-syntax 'member-init-intro (c-point 'boi))
  39034. +          ;; we don't need to add any class offset since this
  39035. +          ;; should be relative to the ctor's indentation
  39036. +          )
  39037. +         ;; CASE 5B.2: K&R arg decl intro
  39038. +         (c-recognize-knr-p
  39039. +          (c-add-syntax 'knr-argdecl-intro (c-point 'boi))
  39040. +          (and inclass-p (c-add-syntax 'inclass (aref inclass-p 0))))
  39041. +         ;; CASE 5B.3: nether region after a C++ func decl
  39042. +         (t
  39043. +          (c-add-syntax 'ansi-funcdecl-cont (c-point 'boi))
  39044. +          (and inclass-p (c-add-syntax 'inclass (aref inclass-p 0))))
  39045. +         ))
  39046. +       ;; CASE 5C: inheritance line. could be first inheritance
  39047. +       ;; line, or continuation of a multiple inheritance
  39048. +       ((looking-at c-baseclass-key)
  39049. +        (cond
  39050. +         ;; CASE 5C.1: non-hanging colon on an inher intro
  39051. +         ((= char-after-ip ?:)
  39052. +          (c-backward-syntactic-ws lim)
  39053. +          (c-add-syntax 'inher-intro (c-point 'boi))
  39054. +          ;; don't add inclass symbol since relative point already
  39055. +          ;; contains any class offset
  39056. +          )
  39057. +         ;; CASE 5C.2: hanging colon on an inher intro
  39058. +         ((= char-before-ip ?:)
  39059. +          (c-add-syntax 'inher-intro (c-point 'boi))
  39060. +          (and inclass-p (c-add-syntax 'inclass (aref inclass-p 0))))
  39061. +         ;; CASE 5C.3: a continued inheritance line
  39062. +         (t
  39063. +          (c-beginning-of-inheritance-list lim)
  39064. +          (c-add-syntax 'inher-cont (point))
  39065. +          ;; don't add inclass symbol since relative point already
  39066. +          ;; contains any class offset
  39067. +          )))
  39068. +       ;; CASE 5D: this could be a top-level compound statement or a
  39069. +       ;; member init list continuation
  39070. +       ((= char-before-ip ?,)
  39071. +        (goto-char indent-point)
  39072. +        (c-backward-syntactic-ws lim)
  39073. +        (while (and (< lim (point))
  39074. +            (= (preceding-char) ?,))
  39075. +          ;; this will catch member inits with multiple
  39076. +          ;; line arglists
  39077. +          (forward-char -1)
  39078. +          (c-backward-syntactic-ws (c-point 'bol))
  39079. +          (if (= (preceding-char) ?\))
  39080. +          (backward-sexp 1))
  39081. +          ;; now continue checking
  39082. +          (beginning-of-line)
  39083. +          (c-backward-syntactic-ws lim))
  39084. +        (cond
  39085. +         ;; CASE 5D.1: hanging member init colon
  39086. +         ((= (preceding-char) ?:)
  39087. +          (goto-char indent-point)
  39088. +          (c-backward-syntactic-ws lim)
  39089. +          (c-safe (backward-sexp 1))
  39090. +          (c-add-syntax 'member-init-cont (c-point 'boi))
  39091. +          ;; we do not need to add class offset since relative
  39092. +          ;; point is the member init above us
  39093. +          )
  39094. +         ;; CASE 5D.2: non-hanging member init colon
  39095. +         ((progn
  39096. +        (c-forward-syntactic-ws indent-point)
  39097. +        (= (following-char) ?:))
  39098. +          (skip-chars-forward " \t:")
  39099. +          (c-add-syntax 'member-init-cont (point)))
  39100. +         ;; CASE 5D.3: perhaps a multiple inheritance line?
  39101. +         ((looking-at c-inher-key)
  39102. +          (c-add-syntax 'inher-cont-1 (c-point 'boi)))
  39103. +         ;; CASE 5D.4: perhaps a template list continuation?
  39104. +         ((save-excursion
  39105. +        (skip-chars-backward "^<" lim)
  39106. +        (= (preceding-char) ?<))
  39107. +          ;; we can probably indent it just like and arglist-cont
  39108. +          (c-add-syntax 'arglist-cont (point)))
  39109. +         ;; CASE 5D.5: perhaps a top-level statement-cont
  39110. +         (t
  39111. +          (c-beginning-of-statement nil lim)
  39112. +          (c-add-syntax 'statement-cont (c-point 'boi)))
  39113. +         ))
  39114. +       ;; CASE 5E: we are looking at a access specifier
  39115. +       ((and inclass-p
  39116. +         c-access-key
  39117. +         (looking-at c-access-key))
  39118. +        (c-add-syntax 'access-label (c-point 'bonl))
  39119. +        (c-add-syntax 'inclass (aref inclass-p 0)))
  39120. +       ;; CASE 5F: we are looking at the brace which closes the
  39121. +       ;; enclosing nested class decl
  39122. +       ((and inclass-p
  39123. +         (= char-after-ip ?})
  39124. +         (save-excursion
  39125. +           (save-restriction
  39126. +             (widen)
  39127. +             (forward-char 1)
  39128. +             (and
  39129. +              (condition-case nil
  39130. +              (progn (backward-sexp 1) t)
  39131. +            (error nil))
  39132. +              (= (point) (aref inclass-p 1))
  39133. +              ))))
  39134. +        (save-restriction
  39135. +          (widen)
  39136. +          (goto-char (aref inclass-p 0))
  39137. +          (c-add-syntax 'class-close (c-point 'boi))))
  39138. +       ;; CASE 5G: we could be looking at subsequent knr-argdecls
  39139. +       ((and c-recognize-knr-p
  39140. +         (save-excursion
  39141. +           (c-backward-syntactic-ws lim)
  39142. +           (while (memq (preceding-char) '(?\; ?,))
  39143. +             (beginning-of-line)
  39144. +             (setq placeholder (point))
  39145. +             (c-backward-syntactic-ws lim))
  39146. +           (and (= (preceding-char) ?\))
  39147. +            (or (not (eq major-mode 'objc-mode))
  39148. +                (progn
  39149. +                  (forward-sexp -1)
  39150. +                  (backward-char)
  39151. +                  (c-backward-syntactic-ws)
  39152. +                  (not (or (= (preceding-char) ?-)
  39153. +                       (= (preceding-char) ?+)
  39154. +                       ;; or a class category
  39155. +                       (progn
  39156. +                     (forward-sexp -2)
  39157. +                     (looking-at c-class-key))
  39158. +                       )))))
  39159. +           )
  39160. +         (save-excursion
  39161. +           (c-beginning-of-statement)
  39162. +           (not (looking-at "typedef[ \t\n]+"))))
  39163. +        (goto-char placeholder)
  39164. +        (c-add-syntax 'knr-argdecl (c-point 'boi)))
  39165. +       ;; CASE 5H: we are at the topmost level, make sure we skip
  39166. +       ;; back past any access specifiers
  39167. +       ((progn
  39168. +          (c-backward-syntactic-ws lim)
  39169. +          (while (and inclass-p
  39170. +              c-access-key
  39171. +              (= (preceding-char) ?:)
  39172. +              (not (and (eq major-mode 'objc-mode)
  39173. +                    (bobp)))
  39174. +              (save-excursion
  39175. +                (backward-sexp 1)
  39176. +                (looking-at c-access-key)))
  39177. +        (backward-sexp 1)
  39178. +        (c-backward-syntactic-ws lim))
  39179. +          (or (bobp)
  39180. +          (memq (preceding-char) '(?\; ?\}))))
  39181. +        (c-add-syntax 'topmost-intro (c-point 'bol))
  39182. +        (and inclass-p (c-add-syntax 'inclass (aref inclass-p 0))))
  39183. +       ;; CASE 5I: we are at a method definition continuation line
  39184. +       ((and (eq major-mode 'objc-mode)
  39185. +         (progn
  39186. +           (c-beginning-of-statement 1 lim)
  39187. +           (beginning-of-line)
  39188. +           (looking-at c-ObjC-method-key)))
  39189. +        (c-add-syntax 'objc-method-args-cont (point)))
  39190. +       ;; CASE 5J: we are at a topmost continuation line
  39191. +       (t
  39192. +        (c-beginning-of-statement 1 lim)
  39193. +        (c-add-syntax 'topmost-intro-cont (c-point 'boi)))
  39194. +       ))                ; end CASE 5
  39195. +     ;; CASE 6: line is an expression, not a statement.  Most
  39196. +     ;; likely we are either in a function prototype or a function
  39197. +     ;; call argument list
  39198. +     ((/= (char-after containing-sexp) ?{)
  39199. +      (c-backward-syntactic-ws containing-sexp)
  39200. +      (cond
  39201. +       ;; CASE 6A: we are looking at the arglist closing paren
  39202. +       ((and (/= char-before-ip ?,)
  39203. +         (memq char-after-ip '(?\) ?\])))
  39204. +        (goto-char containing-sexp)
  39205. +        (c-add-syntax 'arglist-close (c-point 'boi)))
  39206. +       ;; CASE 6B: we are looking at the first argument in an empty
  39207. +       ;; argument list. Use arglist-close if we're actually
  39208. +       ;; looking at a close paren or bracket.
  39209. +       ((memq char-before-ip '(?\( ?\[))
  39210. +        (goto-char containing-sexp)
  39211. +        (c-add-syntax 'arglist-intro (c-point 'boi)))
  39212. +       ;; CASE 6C: we are inside a conditional test clause. treat
  39213. +       ;; these things as statements
  39214. +       ((save-excursion
  39215. +         (goto-char containing-sexp)
  39216. +         (and (c-safe (progn (forward-sexp -1) t))
  39217. +          (looking-at "\\<for\\>")))
  39218. +        (c-beginning-of-statement 1 containing-sexp)
  39219. +        (if (= char-before-ip ?\;)
  39220. +        (c-add-syntax 'statement (point))
  39221. +          (c-add-syntax 'statement-cont (point))
  39222. +          ))
  39223. +       ;; CASE 6D: maybe a continued method call. This is the case
  39224. +       ;; when we are inside a [] bracketed exp, and what precede
  39225. +       ;; the opening bracket is not an identifier.
  39226. +       ((and (eq major-mode 'objc-mode)
  39227. +         (= (char-after containing-sexp) ?\[)
  39228. +         (save-excursion
  39229. +           (goto-char (1- containing-sexp))
  39230. +           (c-backward-syntactic-ws (c-point 'bod))
  39231. +           (if (not (looking-at c-symbol-key))
  39232. +               (c-add-syntax 'objc-method-call-cont containing-sexp))
  39233. +           )))
  39234. +       ;; CASE 6E: we are looking at an arglist continuation line,
  39235. +       ;; but the preceding argument is on the same line as the
  39236. +       ;; opening paren.  This case includes multi-line
  39237. +       ;; mathematical paren groupings, but we could be on a
  39238. +       ;; for-list continuation line
  39239. +       ((and (save-excursion
  39240. +           (goto-char (1+ containing-sexp))
  39241. +           (skip-chars-forward " \t")
  39242. +           (not (eolp)))
  39243. +         (save-excursion
  39244. +           (c-beginning-of-statement)
  39245. +           (skip-chars-backward " \t([")
  39246. +           (<= (point) containing-sexp)))
  39247. +        (goto-char containing-sexp)
  39248. +        (c-add-syntax 'arglist-cont-nonempty (c-point 'boi)))
  39249. +       ;; CASE 6F: we are looking at just a normal arglist
  39250. +       ;; continuation line
  39251. +       (t (c-beginning-of-statement 1 containing-sexp)
  39252. +          (forward-char 1)
  39253. +          (c-forward-syntactic-ws indent-point)
  39254. +          (c-add-syntax 'arglist-cont (c-point 'boi)))
  39255. +       ))
  39256. +     ;; CASE 7: func-local multi-inheritance line
  39257. +     ((save-excursion
  39258. +        (goto-char indent-point)
  39259. +        (skip-chars-forward " \t")
  39260. +        (looking-at c-baseclass-key))
  39261. +      (goto-char indent-point)
  39262. +      (skip-chars-forward " \t")
  39263. +      (cond
  39264. +       ;; CASE 7A: non-hanging colon on an inher intro
  39265. +       ((= char-after-ip ?:)
  39266. +        (c-backward-syntactic-ws lim)
  39267. +        (c-add-syntax 'inher-intro (c-point 'boi)))
  39268. +       ;; CASE 7B: hanging colon on an inher intro
  39269. +       ((= char-before-ip ?:)
  39270. +        (c-add-syntax 'inher-intro (c-point 'boi)))
  39271. +       ;; CASE 7C: a continued inheritance line
  39272. +       (t
  39273. +        (c-beginning-of-inheritance-list lim)
  39274. +        (c-add-syntax 'inher-cont (point))
  39275. +        )))
  39276. +     ;; CASE 8: we are inside a brace-list
  39277. +     ((setq placeholder (c-inside-bracelist-p containing-sexp state))
  39278. +      (cond
  39279. +       ;; CASE 8A: brace-list-close brace
  39280. +       ((and (= char-after-ip ?})
  39281. +         (c-safe (progn (forward-char 1)
  39282. +                (backward-sexp 1)
  39283. +                t))
  39284. +         (= (point) containing-sexp))
  39285. +        (c-add-syntax 'brace-list-close (c-point 'boi)))
  39286. +       ;; CASE 8B: we're looking at the first line in a brace-list
  39287. +       ((save-excursion
  39288. +          (goto-char indent-point)
  39289. +          (c-backward-syntactic-ws containing-sexp)
  39290. +          (= (point) (1+ containing-sexp)))
  39291. +        (goto-char containing-sexp)
  39292. +        ;;(if (= char-after-ip ?{)
  39293. +        ;;(c-add-syntax 'brace-list-open (c-point 'boi))
  39294. +        (c-add-syntax 'brace-list-intro (c-point 'boi))
  39295. +        )
  39296. +        ;;))            ; end CASE 8B
  39297. +       ;; CASE 8C: this is just a later brace-list-entry
  39298. +       (t (goto-char (1+ containing-sexp))
  39299. +          (c-forward-syntactic-ws indent-point)
  39300. +          (if (= char-after-ip ?{)
  39301. +          (c-add-syntax 'brace-list-open (point))
  39302. +        (c-add-syntax 'brace-list-entry (point))
  39303. +        ))            ; end CASE 8C
  39304. +       ))                ; end CASE 8
  39305. +     ;; CASE 9: A continued statement
  39306. +     ((and (not (memq char-before-ip '(?\; ?} ?:)))
  39307. +           (> (point)
  39308. +          (save-excursion
  39309. +            (c-beginning-of-statement 1 containing-sexp)
  39310. +            (setq placeholder (point))))
  39311. +           (/= placeholder containing-sexp))
  39312. +      (goto-char indent-point)
  39313. +      (skip-chars-forward " \t")
  39314. +      (let ((after-cond-placeholder
  39315. +         (save-excursion
  39316. +           (goto-char placeholder)
  39317. +           (if (looking-at c-conditional-key)
  39318. +               (progn
  39319. +             (c-safe (c-skip-conditional))
  39320. +             (c-forward-syntactic-ws)
  39321. +             (if (memq (following-char) '(?\;))
  39322. +                 (progn
  39323. +                   (forward-char 1)
  39324. +                   (c-forward-syntactic-ws)))
  39325. +             (point))
  39326. +             nil))))
  39327. +        (cond
  39328. +         ;; CASE 9A: substatement
  39329. +         ((and after-cond-placeholder
  39330. +           (>= after-cond-placeholder indent-point))
  39331. +          (goto-char placeholder)
  39332. +          (if (= char-after-ip ?{)
  39333. +          (c-add-syntax 'substatement-open (c-point 'boi))
  39334. +        (c-add-syntax 'substatement (c-point 'boi))))
  39335. +         ;; CASE 9B: open braces for class or brace-lists
  39336. +         ((= char-after-ip ?{)
  39337. +          (cond
  39338. +           ;; CASE 9B.1: class-open
  39339. +           ((save-excursion
  39340. +          (goto-char indent-point)
  39341. +          (skip-chars-forward " \t{")
  39342. +          (let ((decl (c-search-uplist-for-classkey (c-parse-state))))
  39343. +            (and decl
  39344. +             (setq placeholder (aref decl 0)))
  39345. +            ))
  39346. +        (c-add-syntax 'class-open placeholder))
  39347. +           ;; CASE 9B.2: brace-list-open
  39348. +           ((or (save-excursion
  39349. +              (goto-char placeholder)
  39350. +              (looking-at "\\<enum\\>"))
  39351. +            (= char-before-ip ?=))
  39352. +        (c-add-syntax 'brace-list-open placeholder))
  39353. +           ;; CASE 9B.3: catch-all for unknown construct.
  39354. +           (t
  39355. +        ;; Even though this isn't right, it's the best I'm
  39356. +        ;; going to do for now. Exceptions probably fall
  39357. +        ;; through to here, but aren't supported yet.  Also,
  39358. +        ;; after the next release, I may call a recognition
  39359. +        ;; hook like so: (run-hooks 'c-recognize-hook), but I
  39360. +        ;; dunno.
  39361. +        (c-add-syntax 'statement-cont placeholder)
  39362. +        (c-add-syntax 'block-open))
  39363. +           ))
  39364. +         ;; CASE 9C: iostream insertion or extraction operator
  39365. +         ((looking-at "<<\\|>>")
  39366. +          (goto-char placeholder)
  39367. +          (and after-cond-placeholder
  39368. +           (goto-char after-cond-placeholder))
  39369. +          (while (and (re-search-forward "<<\\|>>" indent-point 'move)
  39370. +              (c-in-literal placeholder)))
  39371. +          ;; if we ended up at indent-point, then the first
  39372. +          ;; streamop is on a separate line. Indent the line like
  39373. +          ;; a statement-cont instead
  39374. +          (if (/= (point) indent-point)
  39375. +          (c-add-syntax 'stream-op (c-point 'boi))
  39376. +        (c-backward-syntactic-ws lim)
  39377. +        (c-add-syntax 'statement-cont (c-point 'boi))))
  39378. +         ;; CASE 9D: continued statement. find the accurate
  39379. +         ;; beginning of statement or substatement
  39380. +         (t
  39381. +          (c-beginning-of-statement nil after-cond-placeholder)
  39382. +          (c-add-syntax 'statement-cont (point)))
  39383. +         )))
  39384. +     ;; CASE 10: an else clause?
  39385. +     ((looking-at "\\<else\\>")
  39386. +      (c-backward-to-start-of-if containing-sexp)
  39387. +      (c-add-syntax 'else-clause (c-point 'boi)))
  39388. +     ;; CASE 11: Statement. But what kind?  Lets see if its a
  39389. +     ;; while closure of a do/while construct
  39390. +     ((progn
  39391. +        (goto-char indent-point)
  39392. +        (skip-chars-forward " \t")
  39393. +        (and (looking-at "while\\b[^_]")
  39394. +         (save-excursion
  39395. +           (c-backward-to-start-of-do containing-sexp)
  39396. +           (setq placeholder (point))
  39397. +           (looking-at "do\\b[^_]"))
  39398. +         ))
  39399. +      (c-add-syntax 'do-while-closure placeholder))
  39400. +     ;; CASE 12: A case or default label
  39401. +     ((looking-at c-switch-label-key)
  39402. +      (goto-char containing-sexp)
  39403. +      ;; for a case label, we set relpos the first non-whitespace
  39404. +      ;; char on the line containing the switch opening brace. this
  39405. +      ;; should handle hanging switch opening braces correctly.
  39406. +      (c-add-syntax 'case-label (c-point 'boi)))
  39407. +     ;; CASE 13: any other label
  39408. +     ((looking-at c-label-key)
  39409. +      (goto-char containing-sexp)
  39410. +      (c-add-syntax 'label (c-point 'boi)))
  39411. +     ;; CASE 14: block close brace, possibly closing the defun or
  39412. +     ;; the class
  39413. +     ((= char-after-ip ?})
  39414. +      (let ((relpos (save-excursion
  39415. +              (goto-char containing-sexp)
  39416. +              (if (/= (point) (c-point 'boi))
  39417. +                  (c-beginning-of-statement))
  39418. +              (c-point 'boi))))
  39419. +        (cond
  39420. +         ;; CASE 14A: does this close an inline?
  39421. +         ((progn
  39422. +        (goto-char containing-sexp)
  39423. +        (c-search-uplist-for-classkey state))
  39424. +          (c-add-syntax 'inline-close relpos))
  39425. +         ;; CASE 14B: if there an enclosing brace that hasn't
  39426. +         ;; been narrowed out by a class, then this is a
  39427. +         ;; block-close
  39428. +         ((c-most-enclosing-brace state)
  39429. +          (c-add-syntax 'block-close relpos))
  39430. +         ;; CASE 14C: find out whether we're closing a top-level
  39431. +         ;; class or a defun
  39432. +         (t
  39433. +          (save-restriction
  39434. +        (narrow-to-region (point-min) indent-point)
  39435. +        (let ((decl (c-search-uplist-for-classkey (c-parse-state))))
  39436. +          (if decl
  39437. +              (c-add-syntax 'class-close (aref decl 0))
  39438. +            (c-add-syntax 'defun-close relpos)))))
  39439. +         )))
  39440. +     ;; CASE 15: statement catchall
  39441. +     (t
  39442. +      ;; we know its a statement, but we need to find out if it is
  39443. +      ;; the first statement in a block
  39444. +      (goto-char containing-sexp)
  39445. +      (forward-char 1)
  39446. +      (c-forward-syntactic-ws indent-point)
  39447. +      ;; we want to ignore labels when skipping forward
  39448. +      (let ((ignore-re (concat c-switch-label-key "\\|" c-label-key))
  39449. +        inswitch-p)
  39450. +        (while (looking-at ignore-re)
  39451. +          (if (looking-at c-switch-label-key)
  39452. +          (progn
  39453. +            (setq inswitch-p t)
  39454. +            ;; we also want to skip over the body of the
  39455. +            ;; case/switch statement if that doesn't put us at
  39456. +            ;; after the indent-point
  39457. +            (while (c-skip-case-statement-forward indent-point))))
  39458. +          (forward-line 1)
  39459. +          (c-forward-syntactic-ws indent-point))
  39460. +        (cond
  39461. +         ;; CASE 15A: we saw a case/default statement so we must be
  39462. +         ;; in a switch statement.  find out if we are at the
  39463. +         ;; statement just after a case or default label
  39464. +         ((and inswitch-p
  39465. +           (save-excursion
  39466. +             (goto-char indent-point)
  39467. +             (c-backward-syntactic-ws containing-sexp)
  39468. +             (back-to-indentation)
  39469. +             (setq placeholder (point))
  39470. +             (looking-at c-switch-label-key)))
  39471. +          (goto-char indent-point)
  39472. +          (skip-chars-forward " \t")
  39473. +          (if (= (following-char) ?{)
  39474. +          (c-add-syntax 'statement-case-open placeholder)
  39475. +        (c-add-syntax 'statement-case-intro placeholder)))
  39476. +         ;; CASE 15B: continued statement
  39477. +         ((= char-before-ip ?,)
  39478. +          (c-add-syntax 'statement-cont (c-point 'boi)))
  39479. +         ;; CASE 15C: a question/colon construct?  But make sure
  39480. +         ;; what came before was not a label, and what comes after
  39481. +         ;; is not a globally scoped function call!
  39482. +         ((or (and (memq char-before-ip '(?: ??))
  39483. +               (save-excursion
  39484. +             (goto-char indent-point)
  39485. +             (c-backward-syntactic-ws lim)
  39486. +             (back-to-indentation)
  39487. +             (not (looking-at c-label-key))))
  39488. +          (and (memq char-after-ip '(?: ??))
  39489. +               (save-excursion
  39490. +             (goto-char indent-point)
  39491. +             (skip-chars-forward " \t")
  39492. +             ;; watch out for scope operator
  39493. +             (not (looking-at "::")))))
  39494. +          (c-add-syntax 'statement-cont (c-point 'boi)))
  39495. +         ;; CASE 15D: any old statement
  39496. +         ((< (point) indent-point)
  39497. +          (c-add-syntax 'statement (c-point 'boi))
  39498. +          (if (= char-after-ip ?{)
  39499. +          (c-add-syntax 'block-open)))
  39500. +         ;; CASE 15E: first statement in an inline, or first
  39501. +         ;; statement in a top-level defun. we can tell this is it
  39502. +         ;; if there are no enclosing braces that haven't been
  39503. +         ;; narrowed out by a class (i.e. don't use bod here!)
  39504. +         ((save-excursion
  39505. +        (save-restriction
  39506. +          (widen)
  39507. +          (goto-char containing-sexp)
  39508. +          (c-narrow-out-enclosing-class state containing-sexp)
  39509. +          (not (c-most-enclosing-brace state))))
  39510. +          (goto-char containing-sexp)
  39511. +          ;; if not at boi, then defun-opening braces are hung on
  39512. +          ;; right side, so we need a different relpos
  39513. +          (if (/= (point) (c-point 'boi))
  39514. +          (progn
  39515. +            (c-backward-syntactic-ws)
  39516. +            (c-safe (forward-sexp (if (= (preceding-char) ?\))
  39517. +                          -1 -2)))
  39518. +            ))
  39519. +          (c-add-syntax 'defun-block-intro (c-point 'boi)))
  39520. +         ;; CASE 15F: first statement in a block
  39521. +         (t (goto-char containing-sexp)
  39522. +        (if (/= (point) (c-point 'boi))
  39523. +            (c-beginning-of-statement))
  39524. +        (c-add-syntax 'statement-block-intro (c-point 'boi))
  39525. +        (if (= char-after-ip ?{)
  39526. +            (c-add-syntax 'block-open)))
  39527. +         )))
  39528. +     )
  39529. +
  39530. +    ;; now we need to look at any modifiers
  39531. +    (goto-char indent-point)
  39532. +    (skip-chars-forward " \t")
  39533. +    (if (looking-at c-comment-start-regexp)
  39534. +        ;; we are looking at a comment. if the comment is at or to
  39535. +        ;; the right of comment-column, then all we want on the
  39536. +        ;; syntax list is comment-intro, otherwise, the
  39537. +        ;; indentation of the comment is relative to where a
  39538. +        ;; normal statement would indent
  39539. +        (if (< (current-column) comment-column)
  39540. +        (c-add-syntax 'comment-intro)
  39541. +          ;; reset syntax kludge
  39542. +          (setq syntax nil)
  39543. +          (c-add-syntax 'comment-intro)))
  39544. +    ;; we might want to give additional offset to friends (in C++)
  39545. +    (if (and (eq major-mode 'c++-mode)
  39546. +         (looking-at "friend[ \t]+"))
  39547. +        (c-add-syntax 'friend))
  39548. +    ;; return the syntax
  39549. +    syntax))))
  39550. +
  39551. +
  39552. +;; indent via syntactic language elements
  39553. +(defun c-get-offset (langelem)
  39554. +  ;; Get offset from LANGELEM which is a cons cell of the form:
  39555. +  ;; (SYMBOL . RELPOS).  The symbol is matched against
  39556. +  ;; c-offsets-alist and the offset found there is either returned,
  39557. +  ;; or added to the indentation at RELPOS.  If RELPOS is nil, then
  39558. +  ;; the offset is simply returned.
  39559. +  (let* ((symbol (car langelem))
  39560. +     (relpos (cdr langelem))
  39561. +     (match  (assq symbol c-offsets-alist))
  39562. +     (offset (cdr-safe match)))
  39563. +    ;; offset can be a number, a function, a variable, or one of the
  39564. +    ;; symbols + or -
  39565. +    (cond
  39566. +     ((not match)
  39567. +      (if c-strict-syntax-p
  39568. +      (error "don't know how to indent a %s" symbol)
  39569. +    (setq offset 0
  39570. +          relpos 0)))
  39571. +     ((eq offset '+)  (setq offset c-basic-offset))
  39572. +     ((eq offset '-)  (setq offset (- c-basic-offset)))
  39573. +     ((eq offset '++) (setq offset (* 2 c-basic-offset)))
  39574. +     ((eq offset '--) (setq offset (* 2 (- c-basic-offset))))
  39575. +     ((and (not (numberp offset))
  39576. +       (fboundp offset))
  39577. +      (setq offset (funcall offset langelem)))
  39578. +     ((not (numberp offset))
  39579. +      (setq offset (eval offset)))
  39580. +     )
  39581. +    (+ (if (and relpos
  39582. +        (< relpos (c-point 'bol)))
  39583. +       (save-excursion
  39584. +         (goto-char relpos)
  39585. +         (current-column))
  39586. +     0)
  39587. +       offset)))
  39588. +
  39589. +(defun c-indent-line (&optional syntax)
  39590. +  ;; indent the current line as C/C++/ObjC code. Optional SYNTAX is the
  39591. +  ;; syntactic information for the current line. Returns the amount of
  39592. +  ;; indentation change
  39593. +  (let* ((c-syntactic-context (or syntax (c-guess-basic-syntax)))
  39594. +     (pos (- (point-max) (point)))
  39595. +     (indent (apply '+ (mapcar 'c-get-offset c-syntactic-context)))
  39596. +     (shift-amt  (- (current-indentation) indent)))
  39597. +    (and c-echo-syntactic-information-p
  39598. +     (message "syntax: %s, indent= %d" c-syntactic-context indent))
  39599. +    (if (zerop shift-amt)
  39600. +    nil
  39601. +      (delete-region (c-point 'bol) (c-point 'boi))
  39602. +      (beginning-of-line)
  39603. +      (indent-to indent))
  39604. +    (if (< (point) (c-point 'boi))
  39605. +    (back-to-indentation)
  39606. +      ;; If initial point was within line's indentation, position after
  39607. +      ;; the indentation.  Else stay at same point in text.
  39608. +      (if (> (- (point-max) pos) (point))
  39609. +      (goto-char (- (point-max) pos)))
  39610. +      )
  39611. +    (run-hooks 'c-special-indent-hook)
  39612. +    shift-amt))
  39613. +
  39614. +(defun c-show-syntactic-information ()
  39615. +  "Show syntactic information for current line."
  39616. +  (interactive)
  39617. +  (message "syntactic analysis: %s" (c-guess-basic-syntax))
  39618. +  (c-keep-region-active))
  39619. +
  39620. +
  39621. +;; Standard indentation line-ups
  39622. +(defun c-lineup-arglist (langelem)
  39623. +  ;; lineup the current arglist line with the arglist appearing just
  39624. +  ;; after the containing paren which starts the arglist.
  39625. +  (save-excursion
  39626. +    (let* ((containing-sexp
  39627. +        (save-excursion
  39628. +          ;; arglist-cont-nonempty gives relpos ==
  39629. +          ;; to boi of containing-sexp paren. This
  39630. +          ;; is good when offset is +, but bad
  39631. +          ;; when it is c-lineup-arglist, so we
  39632. +          ;; have to special case a kludge here.
  39633. +          (if (memq (car langelem) '(arglist-intro arglist-cont-nonempty))
  39634. +          (progn
  39635. +            (beginning-of-line)
  39636. +            (backward-up-list 1)
  39637. +            (skip-chars-forward " \t" (c-point 'eol)))
  39638. +        (goto-char (cdr langelem)))
  39639. +          (point)))
  39640. +       (cs-curcol (save-excursion
  39641. +            (goto-char (cdr langelem))
  39642. +            (current-column))))
  39643. +      (if (save-excursion
  39644. +        (beginning-of-line)
  39645. +        (looking-at "[ \t]*)"))
  39646. +      (progn (goto-char (match-end 0))
  39647. +         (forward-sexp -1)
  39648. +         (forward-char 1)
  39649. +         (c-forward-syntactic-ws)
  39650. +         (- (current-column) cs-curcol))
  39651. +    (goto-char containing-sexp)
  39652. +    (or (eolp)
  39653. +        (let ((eol (c-point 'eol))
  39654. +          (here (progn
  39655. +              (forward-char 1)
  39656. +              (skip-chars-forward " \t")
  39657. +              (point))))
  39658. +          (c-forward-syntactic-ws)
  39659. +          (if (< (point) eol)
  39660. +          (goto-char here))))
  39661. +    (- (current-column) cs-curcol)
  39662. +    ))))
  39663. +
  39664. +(defun c-lineup-arglist-intro-after-paren (langelem)
  39665. +  ;; lineup an arglist-intro line to just after the open paren
  39666. +  (save-excursion
  39667. +    (let ((cs-curcol (save-excursion
  39668. +               (goto-char (cdr langelem))
  39669. +               (current-column)))
  39670. +      (ce-curcol (save-excursion
  39671. +               (beginning-of-line)
  39672. +               (backward-up-list 1)
  39673. +               (skip-chars-forward " \t" (c-point 'eol))
  39674. +               (current-column))))
  39675. +      (- ce-curcol cs-curcol -1))))
  39676. +
  39677. +(defun c-lineup-streamop (langelem)
  39678. +  ;; lineup stream operators
  39679. +  (save-excursion
  39680. +    (let* ((relpos (cdr langelem))
  39681. +       (curcol (progn (goto-char relpos)
  39682. +              (current-column))))
  39683. +      (re-search-forward "<<\\|>>" (c-point 'eol) 'move)
  39684. +      (goto-char (match-beginning 0))
  39685. +      (- (current-column) curcol))))
  39686. +
  39687. +(defun c-lineup-multi-inher (langelem)
  39688. +  ;; line up multiple inheritance lines
  39689. +  (save-excursion
  39690. +    (let (cs-curcol
  39691. +      (eol (c-point 'eol))
  39692. +      (here (point)))
  39693. +      (goto-char (cdr langelem))
  39694. +      (setq cs-curcol (current-column))
  39695. +      (skip-chars-forward "^:" eol)
  39696. +      (skip-chars-forward " \t:" eol)
  39697. +      (if (or (eolp)
  39698. +          (looking-at c-comment-start-regexp))
  39699. +      (c-forward-syntactic-ws here))
  39700. +      (- (current-column) cs-curcol)
  39701. +      )))
  39702. +
  39703. +(defun c-lineup-C-comments (langelem)
  39704. +  ;; line up C block comment continuation lines
  39705. +  (save-excursion
  39706. +    (let ((stars (progn
  39707. +           (beginning-of-line)
  39708. +           (skip-chars-forward " \t")
  39709. +           (if (looking-at "\\*\\*?")
  39710. +               (- (match-end 0) (match-beginning 0))
  39711. +             0)))
  39712. +      (cs-curcol (progn (goto-char (cdr langelem))
  39713. +                (current-column))))
  39714. +      (back-to-indentation)
  39715. +      (if (re-search-forward "/\\*[ \t]*" (c-point 'eol) t)
  39716. +      (goto-char (+ (match-beginning 0)
  39717. +            (cond
  39718. +             (c-block-comments-indent-p 0)
  39719. +             ((= stars 1) 1)
  39720. +             ((= stars 2) 0)
  39721. +             (t (- (match-end 0) (match-beginning 0)))))))
  39722. +      (- (current-column) cs-curcol))))
  39723. +
  39724. +(defun c-lineup-comment (langelem)
  39725. +  ;; support old behavior for comment indentation. we look at
  39726. +  ;; c-comment-only-line-offset to decide how to indent comment
  39727. +  ;; only-lines
  39728. +  (save-excursion
  39729. +    (back-to-indentation)
  39730. +    ;; at or to the right of comment-column
  39731. +    (if (>= (current-column) comment-column)
  39732. +    (c-comment-indent)
  39733. +      ;; otherwise, indent as specified by c-comment-only-line-offset
  39734. +      (if (not (bolp))
  39735. +      (or (car-safe c-comment-only-line-offset)
  39736. +          c-comment-only-line-offset)
  39737. +    (or (cdr-safe c-comment-only-line-offset)
  39738. +        (car-safe c-comment-only-line-offset)
  39739. +        -1000            ;jam it against the left side
  39740. +        )))))
  39741. +
  39742. +(defun c-lineup-runin-statements (langelem)
  39743. +  ;; line up statements in coding standards which place the first
  39744. +  ;; statement on the same line as the block opening brace.
  39745. +  (if (= (char-after (cdr langelem)) ?{)
  39746. +      (save-excursion
  39747. +    (let ((curcol (progn
  39748. +            (goto-char (cdr langelem))
  39749. +            (current-column))))
  39750. +      (forward-char 1)
  39751. +      (skip-chars-forward " \t")
  39752. +      (- (current-column) curcol)))
  39753. +    0))
  39754. +
  39755. +(defun c-lineup-math (langelem)
  39756. +  ;; line up math statement-cont after the equals
  39757. +  (save-excursion
  39758. +    (let* ((relpos (cdr langelem))
  39759. +       (equalp (save-excursion
  39760. +             (goto-char (c-point 'boi))
  39761. +             (skip-chars-forward "^=" (c-point 'eol))
  39762. +             (and (= (following-char) ?=)
  39763. +              (- (point) (c-point 'boi)))))
  39764. +       (curcol (progn
  39765. +             (goto-char relpos)
  39766. +             (current-column)))
  39767. +       donep)
  39768. +      (while (and (not donep)
  39769. +          (< (point) (c-point 'eol)))
  39770. +    (skip-chars-forward "^=" (c-point 'eol))
  39771. +    (if (c-in-literal (cdr langelem))
  39772. +        (forward-char 1)
  39773. +      (setq donep t)))
  39774. +      (if (/= (following-char) ?=)
  39775. +      ;; there's no equal sign on the line
  39776. +      c-basic-offset
  39777. +    ;; calculate indentation column after equals and ws, unless
  39778. +    ;; our line contains an equals sign
  39779. +    (if (not equalp)
  39780. +        (progn
  39781. +          (forward-char 1)
  39782. +          (skip-chars-forward " \t")
  39783. +          (setq equalp 0)))
  39784. +    (- (current-column) equalp curcol))
  39785. +      )))
  39786. +
  39787. +(defun c-lineup-objc-method-call (langelem)
  39788. +  ;; Line up methods args as elisp-mode does with function args
  39789. +  (save-excursion
  39790. +    (let* ((relpos (cdr langelem))
  39791. +       (curcol (progn (goto-char relpos)
  39792. +              (current-column))))
  39793. +      ;; We are now on the opening square bracket
  39794. +      (forward-char)           
  39795. +      (forward-sexp)
  39796. +      (- (1+ (current-column)) curcol))))
  39797. +
  39798. +(defun c-lineup-objc-method-args (langelem)
  39799. +  ;; Line up the colons that separate args. This is done trying to
  39800. +  ;; align colons vertically.
  39801. +  (save-excursion
  39802. +    (let* ((here (c-point 'boi))
  39803. +       (curcol (progn (goto-char here) (current-column)))
  39804. +       (eol (c-point 'eol))
  39805. +       (relpos (cdr langelem))
  39806. +       (first-col-column (progn
  39807. +                   (goto-char relpos)
  39808. +                   (skip-chars-forward "^:" eol)
  39809. +                   (and (= (following-char) ?:)
  39810. +                    (current-column)))))
  39811. +      (if (not first-col-column)
  39812. +      c-basic-offset
  39813. +    (goto-char here)
  39814. +    (skip-chars-forward "^:" eol)
  39815. +    (if (= (following-char) ?:)
  39816. +        (+ curcol (- first-col-column (current-column)))
  39817. +      c-basic-offset)))))
  39818. +
  39819. +(defun c-lineup-objc-method-args-2 (langelem)
  39820. +  ;; Line up the colons that separate args. This is done trying to
  39821. +  ;; align the colon on the current line with the previous one.
  39822. +  (save-excursion
  39823. +    (let* ((here (c-point 'boi))
  39824. +       (curcol (progn (goto-char here) (current-column)))
  39825. +       (eol (c-point 'eol))
  39826. +       (relpos (cdr langelem))
  39827. +       (prev-col-column (progn
  39828. +                  (skip-chars-backward "^:" relpos)
  39829. +                  (and (= (preceding-char) ?:)
  39830. +                   (- (current-column) 1)))))
  39831. +      (if (not prev-col-column)
  39832. +      c-basic-offset
  39833. +    (goto-char here)
  39834. +    (skip-chars-forward "^:" eol)
  39835. +    (if (= (following-char) ?:)
  39836. +        (+ curcol (- prev-col-column (current-column)))
  39837. +      c-basic-offset)))))
  39838. +
  39839. +
  39840. +;; commands for "macroizations" -- making C++ parameterized types via
  39841. +;; macros. Also commands for commentifying regions
  39842. +
  39843. +(defun c-backslashify-current-line (doit)
  39844. +  ;; Backslashifies current line if DOIT is non-nil, otherwise
  39845. +  ;; unbackslashifies the current line.
  39846. +  (end-of-line)
  39847. +  (if doit
  39848. +      ;; Note that "\\\\" is needed to get one backslash.
  39849. +      (if (not (save-excursion
  39850. +         (forward-char -1)
  39851. +         (looking-at "\\\\")))
  39852. +      (progn
  39853. +        (if (>= (current-column) c-backslash-column)
  39854. +        (insert " \\")
  39855. +          (while (<= (current-column) c-backslash-column)
  39856. +        (insert "\t")
  39857. +        (end-of-line))
  39858. +          (delete-char -1)
  39859. +          (while (< (current-column) c-backslash-column)
  39860. +        (insert " ")
  39861. +        (end-of-line))
  39862. +          (insert "\\"))))
  39863. +    (if (not (bolp))
  39864. +    (progn
  39865. +      (forward-char -1)
  39866. +      (if (looking-at "\\\\")
  39867. +          (progn
  39868. +        (skip-chars-backward " \t")
  39869. +        (delete-region (point) (c-point 'eol))))
  39870. +      ))))
  39871. +
  39872. +(defun c-backslash-region (beg end arg)
  39873. +  "Insert backslashes at end of every line in region.
  39874. +Useful for defining cpp macros.  If called with a prefix argument,
  39875. +it trailing backslashes are removed."
  39876. +  (interactive "r\nP")
  39877. +  (save-excursion
  39878. +    (let ((do-lastline-p (progn (goto-char end) (not (bolp)))))
  39879. +      (save-restriction
  39880. +    (narrow-to-region beg end)
  39881. +    (goto-char (point-min))
  39882. +    (while (not (save-excursion
  39883. +              (forward-line 1)
  39884. +              (eobp)))
  39885. +      (c-backslashify-current-line (null arg))
  39886. +      (forward-line 1)))
  39887. +      (and do-lastline-p
  39888. +       (progn (goto-char end)
  39889. +          (c-backslashify-current-line (null arg))))
  39890. +      )))
  39891. +
  39892. +;;(defun comment-region (beg end &optional arg)
  39893. +;;  "Comment or uncomment each line in the region.
  39894. +;;With just C-u prefix arg, uncomment each line in region.
  39895. +;;Numeric prefix arg ARG means use ARG comment characters.
  39896. +;;If ARG is negative, delete that many comment characters instead.
  39897. +;;Comments are terminated on each line, even for syntax in which newline does
  39898. +;;not end the comment.  Blank lines do not get comments."
  39899. +;;  ;; if someone wants it to only put a comment-start at the beginning and
  39900. +;;  ;; comment-end at the end then typing it, C-x C-x, closing it, C-x C-x
  39901. +;;  ;; is easy enough.  No option is made here for other than commenting
  39902. +;;  ;; every line.
  39903. +;;  (interactive "r\nP")
  39904. +;;  (or comment-start (error "No comment syntax is defined"))
  39905. +;;  (if (> beg end) (let (mid) (setq mid beg beg end end mid)))
  39906. +;;  (save-excursion
  39907. +;;    (save-restriction
  39908. +;;      (let ((cs comment-start) (ce comment-end)
  39909. +;;        numarg)
  39910. +;;        (if (consp arg) (setq numarg t)
  39911. +;;      (setq numarg (prefix-numeric-value arg))
  39912. +;;      ;; For positive arg > 1, replicate the comment delims now,
  39913. +;;      ;; then insert the replicated strings just once.
  39914. +;;      (while (> numarg 1)
  39915. +;;        (setq cs (concat cs comment-start)
  39916. +;;          ce (concat ce comment-end))
  39917. +;;        (setq numarg (1- numarg))))
  39918. +;;    ;; Loop over all lines from BEG to END.
  39919. +;;        (narrow-to-region beg end)
  39920. +;;        (goto-char beg)
  39921. +;;        (while (not (eobp))
  39922. +;;          (if (or (eq numarg t) (< numarg 0))
  39923. +;;          (progn
  39924. +;;        ;; Delete comment start from beginning of line.
  39925. +;;        (if (eq numarg t)
  39926. +;;            (while (looking-at (regexp-quote cs))
  39927. +;;              (delete-char (length cs)))
  39928. +;;          (let ((count numarg))
  39929. +;;            (while (and (> 1 (setq count (1+ count)))
  39930. +;;                (looking-at (regexp-quote cs)))
  39931. +;;              (delete-char (length cs)))))
  39932. +;;        ;; Delete comment end from end of line.
  39933. +;;                (if (string= "" ce)
  39934. +;;            nil
  39935. +;;          (if (eq numarg t)
  39936. +;;              (progn
  39937. +;;            (end-of-line)
  39938. +;;            ;; This is questionable if comment-end ends in
  39939. +;;            ;; whitespace.  That is pretty brain-damaged,
  39940. +;;            ;; though.
  39941. +;;            (skip-chars-backward " \t")
  39942. +;;            (if (and (>= (- (point) (point-min)) (length ce))
  39943. +;;                 (save-excursion
  39944. +;;                   (backward-char (length ce))
  39945. +;;                   (looking-at (regexp-quote ce))))
  39946. +;;                (delete-char (- (length ce)))))
  39947. +;;            (setq count numarg)
  39948. +;;            (while (> 1 (setq count (1+ count)))
  39949. +;;              (end-of-line)
  39950. +;;              ;; this is questionable if comment-end ends in whitespace
  39951. +;;              ;; that is pretty brain-damaged though
  39952. +;;              (skip-chars-backward " \t")
  39953. +;;              (save-excursion
  39954. +;;            (backward-char (length ce))
  39955. +;;            (if (looking-at (regexp-quote ce))
  39956. +;;                (delete-char (length ce)))))))
  39957. +;;        (forward-line 1))
  39958. +;;        ;; Insert at beginning and at end.
  39959. +;;            (if (looking-at "[ \t]*$") ()
  39960. +;;              (insert cs)
  39961. +;;              (if (string= "" ce) ()
  39962. +;;                (end-of-line)
  39963. +;;                (insert ce)))
  39964. +;;            (search-forward "\n" nil 'move)))))))
  39965. +
  39966. +
  39967. +;; defuns for submitting bug reports
  39968. +
  39969. +(defconst c-version "4.85"
  39970. +  "cc-mode version number.")
  39971. +(defconst c-mode-help-address "cc-mode-help@anthem.nlm.nih.gov"
  39972. +  "Address accepting submission of bug reports.")
  39973. +
  39974. +(defun c-version ()
  39975. +  "Echo the current version of cc-mode in the minibuffer."
  39976. +  (interactive)
  39977. +  (message "Using cc-mode version %s" c-version)
  39978. +  (c-keep-region-active))
  39979. +
  39980. +;; get reporter-submit-bug-report when byte-compiling
  39981. +(and (fboundp 'eval-when-compile)
  39982. +     (eval-when-compile
  39983. +      (require 'reporter)))
  39984. +
  39985. +(defun c-submit-bug-report ()
  39986. +  "Submit via mail a bug report on cc-mode."
  39987. +  (interactive)
  39988. +  ;; load in reporter
  39989. +  (let ((reporter-prompt-for-summary-p t))
  39990. +    (and
  39991. +     (y-or-n-p "Do you want to submit a report on cc-mode? ")
  39992. +     (require 'reporter)
  39993. +     (reporter-submit-bug-report
  39994. +      c-mode-help-address
  39995. +      (concat "cc-mode " c-version " ("
  39996. +          (cond ((eq major-mode 'c++-mode)  "C++")
  39997. +            ((eq major-mode 'c-mode)    "C")
  39998. +            ((eq major-mode 'objc-mode) "ObjC"))
  39999. +          ")")
  40000. +      (let ((vars (list
  40001. +           ;; report only the vars that affect indentation
  40002. +           'c-basic-offset
  40003. +           'c-offsets-alist
  40004. +           'c-block-comments-indent-p
  40005. +           'c-cleanup-list
  40006. +           'c-comment-only-line-offset
  40007. +           'c-backslash-column
  40008. +           'c-delete-function
  40009. +           'c-electric-pound-behavior
  40010. +           'c-hanging-braces-alist
  40011. +           'c-hanging-colons-alist
  40012. +           'c-hanging-comment-ender-p
  40013. +           'c-tab-always-indent
  40014. +           'c-recognize-knr-p
  40015. +           'defun-prompt-regexp
  40016. +           'tab-width
  40017. +           )))
  40018. +    (if (not (boundp 'defun-prompt-regexp))
  40019. +        (delq 'defun-prompt-regexp vars)
  40020. +      vars))
  40021. +      (function
  40022. +       (lambda ()
  40023. +     (insert
  40024. +      (if c-special-indent-hook
  40025. +          (concat "\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"
  40026. +              "c-special-indent-hook is set to '"
  40027. +              (format "%s" c-special-indent-hook)
  40028. +              ".\nPerhaps this is your problem?\n"
  40029. +              "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n\n")
  40030. +        "\n")
  40031. +      (format "c-emacs-features: %s\n" c-emacs-features)
  40032. +      )))
  40033. +      nil
  40034. +      "Dear Barry,"
  40035. +      ))))
  40036. +
  40037. +
  40038. +;; menus for XEmacs (formerly Lucid)
  40039. +(defun c-popup-menu (e)
  40040. +  "Pops up the C/C++/ObjC menu."
  40041. +  (interactive "@e")
  40042. +  (popup-menu (cons (concat mode-name " Mode Commands") c-mode-menu))
  40043. +  (c-keep-region-active))
  40044. +    
  40045. +
  40046. +;; fsets for compatibility with BOCM
  40047. +(fset 'electric-c-brace      'c-electric-brace)
  40048. +(fset 'electric-c-semi       'c-electric-semi&comma)
  40049. +(fset 'electric-c-sharp-sign 'c-electric-pound)
  40050. +;; there is no cc-mode equivalent for electric-c-terminator
  40051. +(fset 'mark-c-function       'c-mark-function)
  40052. +(fset 'indent-c-exp          'c-indent-exp)
  40053. +(fset 'set-c-style           'c-set-style)
  40054. +;; lemacs 19.9 + font-lock + cc-mode - c++-mode lossage
  40055. +(fset 'c++-beginning-of-defun 'beginning-of-defun)
  40056. +(fset 'c++-end-of-defun 'end-of-defun)
  40057. +
  40058. +;; set up bc warnings for obsolete variables, but for now lets not
  40059. +;; worry about obsolete functions.  maybe later some will be important
  40060. +;; to flag
  40061. +(and (memq 'v19 c-emacs-features)
  40062. +     (let* ((na "Nothing appropriate.")
  40063. +        (vars
  40064. +         (list
  40065. +          (cons 'c++-c-mode-syntax-table 'c-mode-syntaxt-table)
  40066. +          (cons 'c++-tab-always-indent 'c-tab-always-indent)
  40067. +          (cons 'c++-always-arglist-indent-p na)
  40068. +          (cons 'c++-block-close-brace-offset 'c-offsets-alist)
  40069. +          (cons 'c++-paren-as-block-close-p na)
  40070. +          (cons 'c++-continued-member-init-offset 'c-offsets-alist)
  40071. +          (cons 'c++-member-init-indent 'c-offsets-alist)
  40072. +          (cons 'c++-friend-offset na)
  40073. +          (cons 'c++-access-specifier-offset 'c-offsets-alist)
  40074. +          (cons 'c++-empty-arglist-indent 'c-offsets-alist)
  40075. +          (cons 'c++-comment-only-line-offset 'c-comment-only-line-offset)
  40076. +          (cons 'c++-C-block-comments-indent-p 'c-block-comments-indent-p)
  40077. +          (cons 'c++-cleanup-list 'c-cleanup-list)
  40078. +          (cons 'c++-hanging-braces 'c-hanging-braces-alist)
  40079. +          (cons 'c++-hanging-member-init-colon 'c-hanging-colons-alist)
  40080. +          (cons 'c++-auto-hungry-initial-state
  40081. +            "Use `c-auto-newline' and `c-hungry-delete-key' instead.")
  40082. +          (cons 'c++-auto-hungry-toggle na)
  40083. +          (cons 'c++-relative-offset-p na)
  40084. +          (cons 'c++-special-indent-hook 'c-special-indent-hook)
  40085. +          (cons 'c++-delete-function 'c-delete-function)
  40086. +          (cons 'c++-electric-pound-behavior 'c-electric-pound-behavior)
  40087. +          (cons 'c++-hungry-delete-key 'c-hungry-delete-key)
  40088. +          (cons 'c++-auto-newline 'c-auto-newline)
  40089. +          (cons 'c++-match-header-strongly na)
  40090. +          (cons 'c++-defun-header-strong-struct-equivs na)
  40091. +          (cons 'c++-version 'c-version)
  40092. +          (cons 'c++-mode-help-address 'c-mode-help-address)
  40093. +          (cons 'c-indent-level 'c-basic-offset)
  40094. +          (cons 'c-brace-imaginary-offset na)
  40095. +          (cons 'c-brace-offset 'c-offsets-alist)
  40096. +          (cons 'c-argdecl-indent 'c-offsets-alist)
  40097. +          (cons 'c-label-offset 'c-offsets-alist)
  40098. +          (cons 'c-continued-statement-offset 'c-offsets-alist)
  40099. +          (cons 'c-continued-brace-offset 'c-offsets-alist)
  40100. +          (cons 'c-default-macroize-column 'c-backslash-column)
  40101. +          (cons 'c++-default-macroize-column 'c-backslash-column)
  40102. +          )))
  40103. +       (mapcar
  40104. +    (function
  40105. +     (lambda (elt)
  40106. +       (make-obsolete-variable (car elt) (cdr elt))))
  40107. +    vars)))
  40108. +
  40109. +(provide 'cc-mode)
  40110. +;;; cc-mode.el ends here
  40111. Binary files baseline/fsf/emacs/site-lisp/reporter.elc and amiga/fsf/emacs/site-lisp/reporter.elc differ
  40112. Binary files baseline/fsf/emacs/site-lisp/tapestry.elc and amiga/fsf/emacs/site-lisp/tapestry.elc differ
  40113. Binary files baseline/fsf/emacs/site-lisp/timezone.elc and amiga/fsf/emacs/site-lisp/timezone.elc differ
  40114. diff -ru --new-file baseline/fsf/emacs/site-lisp/vm-auto-archive.el amiga/fsf/emacs/site-lisp/vm-auto-archive.el
  40115. --- baseline/fsf/emacs/site-lisp/vm-auto-archive.el    Wed Dec 31 17:00:00 1969
  40116. +++ amiga/fsf/emacs/site-lisp/vm-auto-archive.el    Sun Oct 15 17:07:36 1995
  40117. @@ -0,0 +1,372 @@
  40118. +;;
  40119. +;; LCD Archive Entry:
  40120. +;; vm-auto-archive|Neal Young|ney@research.att.com|
  40121. +;; Two ways to automatically archive outgoing mail into appropriate VM folders.  Supersedes vm-auto-fcc.el|
  40122. +;; 20-Oct-1994|version 5.72a|~/misc/vm-auto-archive.el|
  40123. +;;
  40124. +;; PURPOSE: Automatically archive outgoing mail into appropriate VM folders.
  40125. +;;
  40126. +;;   This works with vm 5.72.
  40127. +;;
  40128. +;; USAGE: 
  40129. +;;   This package provides two methods for automatically archiving outgoing
  40130. +;;   mail messages using the VM mailer.  [Also it provides a utility function
  40131. +;;   "return-match" which is useful in vm-auto-folder-alist -- e.g.,
  40132. +;;   after matching the regexp "a\(.*\)b" to "axb", (return-match "\\1 \\1") 
  40133. +;;   will return "x x".]
  40134. +;;
  40135. +;;   The first method is implemented by an interactive function vm-auto-fcc.
  40136. +;;   This function, invoked by "" when composing a message, prompts for a
  40137. +;;   folder name and inserts an "FCC: <folder-name>" field into the msg.  When
  40138. +;;   prompting for the folder name, the function provides a default determined
  40139. +;;   by pattern-matching the contents of the current message, similarly to VM's
  40140. +;;   use of vm-auto-folder-alist, as described below.  When the message is
  40141. +;;   sent, the "FCC:" field causes a copy to be appended to the chosen folder.
  40142. +;;
  40143. +;;   The second method is implemented by a function vm-auto-archive.  This
  40144. +;;   function, invoked by "" when composing a message, prompts for a
  40145. +;;   folder name and inserts two fields into the message.  When prompting for
  40146. +;;   the folder name, the function provides a default determined as in the
  40147. +;;   first method.  The first field is a "BCC: " field with your
  40148. +;;   user-login-name.  The second field is a "X-VM-folder: " field with the
  40149. +;;   chosen folder name.  When the message is sent, the "BCC:" field causes a
  40150. +;;   copy to be mailed to you.  This file modifies VM (using "advice") so that
  40151. +;;   when you save a message that appears to be from you and has an
  40152. +;;   "X-VM-folder:" field, that folder will be offered as the default folder
  40153. +;;   for saving.
  40154. +;;
  40155. +;;   The second method has the advantage that all of the fields added to the
  40156. +;;   message by send-mail are present in the archived message too.  It has
  40157. +;;   the disadvantages that the mail is not immediately archived and a
  40158. +;;   malicious mail sender could screw it up.
  40159. +;;
  40160. +;;   In each case, the default folder is determined by pattern-matching the
  40161. +;;   contents of the message being composed to the variable
  40162. +;;   vm-auto-archive-alist.  This variable has the same format and semantics
  40163. +;;   as vm-auto-folder-alist, except that it is used to classify a message
  40164. +;;   that is being composed for sending, rather than one in a VM folder.
  40165. +;;
  40166. +;;   (VM is an alternative to rmail.  It has some nice features like using the
  40167. +;;    standard mailbox format, automatically filing mail messages by pattern
  40168. +;;    matching, easily customized summary buffer display, threads...
  40169. +;;    If you don't have VM, try /ftp.uu.net:networking/mail/vm.
  40170. +;;
  40171. +;; INSTALLATION:
  40172. +;;    Probably best not to compile this file, but if you do, recompile it
  40173. +;;    whenever you install a new version of vm.
  40174. +;;
  40175. +;;    PUT this file in a directory on your e-lisp search path
  40176. +;;    under the name "vm-auto-archive.el".
  40177. +;;
  40178. +;;    ADD these lines to your .vm (or .emacs) file:
  40179. +
  40180. +(defvar vm-auto-archive-alist nil "\
  40181. +Like vm-auto-folder-alist, but used by vm-auto-fcc and vm-auto-archive
  40182. +to categorize a message being composed for sending.")
  40183. +
  40184. +(defvar vm-auto-archive-sender-regexp nil "\
  40185. +Regexp.  If the sender of a mail message matches this, and the message
  40186. + has an X-VM-folder field, then vm-auto-select-folder will return the folder
  40187. + named in the field.  Defaults to vm-reply-ignored-addresses.")
  40188. +
  40189. +(autoload (quote vm-auto-fcc) "vm-auto-archive" "\
  40190. +Add a new FCC field, with file name guessed by vm-auto-archive-alist.
  40191. +Return file name." t nil)
  40192. +
  40193. +(autoload (quote vm-auto-archive) "vm-auto-archive" "\
  40194. +Add BCC and X-VM-folder fields to message being composed,
  40195. + guessing folder name based on vm-auto-archive-alist.  Return file name." t nil)
  40196. +
  40197. +(autoload (quote vm-auto-archive-enable) "vm-auto-archive" "\
  40198. +Enable vm-auto-archive." t nil)
  40199. +
  40200. +(autoload (quote vm-auto-archive-disable) "vm-auto-archive" "\
  40201. +Disable vm-auto-archive." t nil)
  40202. +
  40203. +(autoload (quote return-match) "vm-auto-archive" "\
  40204. +Like replace-match except return the string that would be
  40205. +substituted for the match, instead of replacing the match with it." nil nil)
  40206. +
  40207. +(add-hook 'mail-setup-hook 
  40208. +         '(lambda () 
  40209. +        (local-set-key "" 'vm-auto-fcc)
  40210. +        (local-set-key "" 'vm-auto-archive)
  40211. +        ))
  40212. +
  40213. +(vm-auto-archive-enable)
  40214. +
  40215. +;;    (continued...)
  40216. +;;
  40217. +;;    SET variable vm-auto-archive-alist (in your .vm (or .emacs) file)
  40218. +;;     as you would set vm-auto-folder-alist, 
  40219. +;;     except set it to recognize fields of outgoing messages.
  40220. +;;      You probably want to reverse the sense of "from" and "to" headers,
  40221. +;;    but you could just (setq vm-auto-archive-alist vm-auto-folder-alist).
  40222. +;;      
  40223. +;; BUGS:
  40224. +;;    The method is a hack.  It advises vm-get-header-contents to work in
  40225. +;;    arbitrary buffers, so that vm-auto-select-folder can too.  It also
  40226. +;;    advises vm-auto-select-folder to catch the "X-VM-folder:" field if
  40227. +;;    appropriate.  If vm-auto-select-folder or vm-get-header-contents is
  40228. +;;    changed, it might cease to work.
  40229. +;;
  40230. +;;    For these reasons, I added commands to disable/enable vm-auto-archive
  40231. +;;    at will.
  40232. +;;
  40233. +;; Copyright (C) 1993,1994  Neal Young
  40234. +;;
  40235. +;;    "X-VM-folder:" field functionality based on code
  40236. +;;    provided by gec@Mti.Sgi.Com (Gardner Cohen).
  40237. +;; 
  40238. +;;    This program is free software; you can redistribute it and/or modify
  40239. +;;    it under the terms of the GNU General Public License as published by
  40240. +;;    the Free Software Foundation; either version 2 of the License, or
  40241. +;;    (at your option) any later version.
  40242. +;; 
  40243. +;;    This program is distributed in the hope that it will be useful,
  40244. +;;    but WITHOUT ANY WARRANTY; without even the implied warranty of
  40245. +;;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  40246. +;;    GNU General Public License for more details.
  40247. +;; 
  40248. +
  40249. +(require 'advice)
  40250. +
  40251. +(defvar vm-auto-archive-enabled nil "vm-auto-archive private variable")
  40252. +
  40253. +;;;###autoload
  40254. +(defvar vm-auto-archive-alist nil 
  40255. +  "Like vm-auto-folder-alist, but used by vm-auto-fcc and vm-auto-archive
  40256. +to categorize a message being composed for sending.")
  40257. +
  40258. +(defvar vm-auto-archive-alist nil "\
  40259. +Like vm-auto-folder-alist, but used by vm-auto-fcc and vm-auto-archive
  40260. +to categorize a message being composed for sending.")
  40261. +
  40262. +(defvar vm-auto-archive-alist nil "\
  40263. +Like vm-auto-folder-alist, but used by vm-auto-fcc and vm-auto-archive
  40264. +to categorize a message being composed for sending.")
  40265. +
  40266. +;;;###autoload
  40267. +(defvar vm-auto-archive-sender-regexp nil
  40268. +  "Regexp.  If the sender of a mail message matches this, and the message
  40269. + has an X-VM-folder field, then vm-auto-select-folder will return the folder
  40270. + named in the field.  Defaults to vm-reply-ignored-addresses.")
  40271. +
  40272. +(defvar vm-auto-archive-sender-regexp nil "\
  40273. +Regexp.  If the sender of a mail message matches this, and the message
  40274. + has an X-VM-folder field, then vm-auto-select-folder will return the folder
  40275. + named in the field.  Defaults to vm-reply-ignored-addresses.")
  40276. +
  40277. +(defvar vm-auto-archive-sender-regexp nil "\
  40278. +Regexp.  If the sender of a mail message matches this, and the message
  40279. + has an X-VM-folder field, then vm-auto-select-folder will return the folder
  40280. + named in the field.  Defaults to vm-reply-ignored-addresses.")
  40281. +
  40282. +;;;###autoload
  40283. +(defun vm-auto-fcc (&optional dont-ask-if-default-available)
  40284. +  "Add a new FCC field, with file name guessed by vm-auto-archive-alist.
  40285. +Return file name."
  40286. +  (interactive)
  40287. +  (if (not vm-auto-archive-enabled)
  40288. +      (message "execute vm-auto-archive-enable first!")
  40289. +    (let (file-name)
  40290. +      (save-excursion
  40291. +    (expand-abbrev)
  40292. +    (or (mail-position-on-field "fcc" t) ;Put new field after existing FCC.
  40293. +        (mail-position-on-field "to"))
  40294. +    (let ((default (vm-auto-select-folder-for-buffer 
  40295. +            vm-auto-archive-alist)))
  40296. +      (if (or (not (stringp default)) (equal default ""))
  40297. +          (setq default vm-last-save-folder))
  40298. +      (setq file-name
  40299. +        (if (or (not (stringp default)) (equal default ""))
  40300. +            (read-file-name "FCC: " vm-folder-directory)
  40301. +          (if (not (file-name-absolute-p default))
  40302. +              (setq default (concat vm-folder-directory default)))
  40303. +          (if dont-ask-if-default-available
  40304. +              default
  40305. +            (read-file-name (concat "FCC: (default " default ") ")
  40306. +                    vm-folder-directory
  40307. +                    default)))))
  40308. +    (insert "\nFCC: " file-name))
  40309. +      file-name)))
  40310. +
  40311. +;;;###autoload
  40312. +(defun vm-auto-archive (&optional dont-ask-if-default-available)
  40313. +  "Add BCC and X-VM-folder fields to message being composed,
  40314. + guessing folder name based on vm-auto-archive-alist.  Return file name."
  40315. +  (interactive)
  40316. +  (if (not vm-auto-archive-enabled)
  40317. +      (message "execute vm-auto-archive-enable first!")
  40318. +    (save-excursion
  40319. +      (expand-abbrev)
  40320. +      (or (mail-position-on-field "bcc" t) ;Put new field after existing BCC.
  40321. +      (mail-position-on-field "to"))
  40322. +      (insert "\nbcc: " (user-login-name))
  40323. +      (let ((default (vm-auto-select-folder-for-buffer vm-auto-archive-alist)))
  40324. +    (if (or (not (stringp default)) (equal default ""))
  40325. +        (setq default vm-last-save-folder))
  40326. +    (let ((file-name
  40327. +           (if (or (not (stringp default)) (equal default ""))
  40328. +           (read-file-name "folder: " vm-folder-directory)
  40329. +         (if (not (file-name-absolute-p default))
  40330. +             (setq default (concat vm-folder-directory default)))
  40331. +         (if dont-ask-if-default-available
  40332. +             default
  40333. +           (read-file-name (concat "folder: (default " default ") ")
  40334. +                   vm-folder-directory
  40335. +                   default)))))
  40336. +      (insert "\nX-VM-folder: " file-name)
  40337. +      file-name)))))
  40338. +
  40339. +(defun vm-auto-select-folder-for-buffer (auto-folder-alist)
  40340. +  (vm-auto-select-folder '(CURRENT-BUFFER) auto-folder-alist))
  40341. +
  40342. +;;
  40343. +(defadvice vm-get-header-contents;; args: message header-name-regexp
  40344. +  (around vm-auto-archive-get-header-contents disable)
  40345. +  "Advised so as to work in current buffer (instead of vm msg)
  40346. +   when (eq MESSAGE 'CURRENT-BUFFER).  For vm-5.65."
  40347. +  (if (not (eq message 'CURRENT-BUFFER))
  40348. +      ad-do-it
  40349. +    (vm-get-header-contents-current-buffer header-name-regexp)))
  40350. +
  40351. +;; logic to use X-VM-folder field to set the default when saving message.
  40352. +(defadvice vm-auto-select-folder
  40353. +  (around vm-auto-archive-auto-select (MP AUTO-FOLDER-ALIST) disable)
  40354. +  "If you sent the message, use the `X-VM-folder' field, if any."
  40355. +  (let ((header-folder (vm-get-header-contents (car MP) "x-vm-folder"))
  40356. +    (sender-regexp (or vm-auto-archive-sender-regexp
  40357. +               (if vm-reply-ignored-addresses
  40358. +                   (mapconcat 'identity
  40359. +                      vm-reply-ignored-addresses
  40360. +                      "\\|"))
  40361. +               (user-login-name)))
  40362. +    (sender (vm-get-header-contents (car MP) "from:")))
  40363. +    (or
  40364. +     (and sender 
  40365. +      (string-match sender-regexp sender)
  40366. +      (setq ad-return-value header-folder))
  40367. +     ad-do-it)))
  40368. +
  40369. +(defun vm-get-header-contents-current-buffer (header-name-regexp)
  40370. +  "like vm-get-header-contents but within a buffer holding text of message"
  40371. +  (condition-case nil
  40372. +      (let ((contents nil) 
  40373. +        (regexp (concat "^\\(" header-name-regexp "\\)")))
  40374. +    (save-excursion
  40375. +      (save-restriction
  40376. +        (let ((end
  40377. +           (progn (goto-char (point-min))
  40378. +              (re-search-forward "\n\n\\|\\'")
  40379. +              (point))))
  40380. +          (goto-char (point-min))
  40381. +          (let ((case-fold-search t))
  40382. +        (while (and (re-search-forward regexp end t)
  40383. +                (save-excursion (goto-char (match-beginning 0))
  40384. +                        (vm-match-header)))
  40385. +          (if contents
  40386. +              (setq contents
  40387. +                (concat contents ", " (vm-matched-header-contents)))
  40388. +            (setq contents (vm-matched-header-contents)))))))
  40389. +      (setq ad-return-value contents)))
  40390. +    (error
  40391. +     (error 
  40392. +      "vm-auto-archive incompatible with vm version or needs recompilation"
  40393. +      ))))
  40394. +
  40395. +;;; use the next two functions to enable/disable vm-auto-archive once loaded
  40396. +
  40397. +;;;###autoload
  40398. +(defun vm-auto-archive-enable ()
  40399. +  "Enable vm-auto-archive."
  40400. +  (interactive)
  40401. +  (if vm-auto-archive-enabled
  40402. +      nil
  40403. +    (setq ad-activate-on-definition t)
  40404. +    (ad-start-advice)
  40405. +    (ad-enable-advice 'vm-get-header-contents 'around
  40406. +             'vm-auto-archive-get-header-contents)
  40407. +    (ad-activate 'vm-get-header-contents)
  40408. +    (ad-enable-advice 'vm-auto-select-folder 'around 
  40409. +              'vm-auto-archive-auto-select)
  40410. +    (ad-activate 'vm-auto-select-folder)
  40411. +    (setq vm-auto-archive-enabled t)
  40412. +    ))
  40413. +
  40414. +;;;###autoload
  40415. +(defun vm-auto-archive-disable ()
  40416. +  "Disable vm-auto-archive."
  40417. +  (interactive)
  40418. +  (if (not vm-auto-archive-enabled)
  40419. +      nil
  40420. +    (ad-disable-advice 'vm-get-header-contents 'around
  40421. +               'vm-auto-archive-get-header-contents)
  40422. +    (ad-activate 'vm-get-header-contents)
  40423. +    (ad-disable-advice 'vm-auto-select-folder 'around 
  40424. +               'vm-auto-archive-auto-select)
  40425. +    (ad-activate 'vm-auto-select-folder)
  40426. +    (setq vm-auto-archive-enabled nil)
  40427. +    ))
  40428. +
  40429. +;; the following function is useful in vm-auto-folder-alist,
  40430. +;; e.g. after matching the regular expression "\(.*\)aa" to "bbaa"
  40431. +;; (return-match "\\1 x \\1") yields "bb x bb".  So, for instance, 
  40432. +;; the following would return the username of the first person in the
  40433. +;; from, to, sender, or cc fields, whichever comes first.
  40434. +;; (setq 
  40435. +;;      vm-auto-folder-alist
  40436. +;;      '(
  40437. +;;    ("From\\|To\\|Sender\\|CC"
  40438. +;;      ("^\\(.*<\\)?\\([^@%>     
  40439. +;; ]+\\)" . (return-match "\\2"))
  40440. +;;      )
  40441. +;;     )
  40442. +
  40443. +;;;###autoload
  40444. +(defun return-match (new-text &optional fixed-case &optional literal)
  40445. +  "Like replace-match except return the string that would be
  40446. +substituted for the match, instead of replacing the match with it."
  40447. +  (let* ((maxi (- (length new-text) 1))
  40448. +     (submatches (make-vector 10 ""))
  40449. +     (substrings nil)
  40450. +     (this (substring new-text 0 1))
  40451. +     (next (if (<= 1 maxi)
  40452. +           (substring new-text 1 2)
  40453. +         (char-to-string 0)))
  40454. +     (i 0))
  40455. +
  40456. +    (while (< i 10)
  40457. +      (if (match-beginning i)
  40458. +      (aset submatches i
  40459. +        (buffer-substring (match-beginning i) (match-end i))))
  40460. +      (setq i (+ 1 i)))
  40461. +
  40462. +    (setq i 0)
  40463. +    (while (<= i maxi)
  40464. +      (setq substrings 
  40465. +        (cons 
  40466. +         (if (string= this "\\")
  40467. +         (progn 
  40468. +           (setq i (+ 1 i))
  40469. +           (setq this next)
  40470. +           (setq next (if (< i maxi)
  40471. +                  (substring new-text (+ 1 i) (+ 2 i))
  40472. +                (char-to-string 0)))
  40473. +           (cond
  40474. +            ((string= this "&") (aref submatches 0))
  40475. +            ((and (string< "0" this)
  40476. +              (or (string= this "9")
  40477. +                  (string< this "9")))
  40478. +             (aref submatches (string-to-int this)))
  40479. +            (t this)))
  40480. +           this)
  40481. +         substrings))
  40482. +      (setq i (+ 1 i))
  40483. +      (setq this next)
  40484. +      (setq next (if (< i maxi)
  40485. +             (substring new-text (+ 1 i) (+ 2 i))
  40486. +           (char-to-string 0))))
  40487. +    (apply 'concat (nreverse substrings))))
  40488. +
  40489. +(provide 'vm-auto-archive)
  40490. Binary files baseline/fsf/emacs/site-lisp/vm-delete.elc and amiga/fsf/emacs/site-lisp/vm-delete.elc differ
  40491. Binary files baseline/fsf/emacs/site-lisp/vm-digest.elc and amiga/fsf/emacs/site-lisp/vm-digest.elc differ
  40492. Binary files baseline/fsf/emacs/site-lisp/vm-edit.elc and amiga/fsf/emacs/site-lisp/vm-edit.elc differ
  40493. Binary files baseline/fsf/emacs/site-lisp/vm-folder.elc and amiga/fsf/emacs/site-lisp/vm-folder.elc differ
  40494. Binary files baseline/fsf/emacs/site-lisp/vm-license.elc and amiga/fsf/emacs/site-lisp/vm-license.elc differ
  40495. Binary files baseline/fsf/emacs/site-lisp/vm-mark.elc and amiga/fsf/emacs/site-lisp/vm-mark.elc differ
  40496. Binary files baseline/fsf/emacs/site-lisp/vm-message.elc and amiga/fsf/emacs/site-lisp/vm-message.elc differ
  40497. Binary files baseline/fsf/emacs/site-lisp/vm-minibuf.elc and amiga/fsf/emacs/site-lisp/vm-minibuf.elc differ
  40498. Binary files baseline/fsf/emacs/site-lisp/vm-misc.elc and amiga/fsf/emacs/site-lisp/vm-misc.elc differ
  40499. Binary files baseline/fsf/emacs/site-lisp/vm-motion.elc and amiga/fsf/emacs/site-lisp/vm-motion.elc differ
  40500. Binary files baseline/fsf/emacs/site-lisp/vm-page.elc and amiga/fsf/emacs/site-lisp/vm-page.elc differ
  40501. Binary files baseline/fsf/emacs/site-lisp/vm-pop.elc and amiga/fsf/emacs/site-lisp/vm-pop.elc differ
  40502. Binary files baseline/fsf/emacs/site-lisp/vm-reply.elc and amiga/fsf/emacs/site-lisp/vm-reply.elc differ
  40503. Binary files baseline/fsf/emacs/site-lisp/vm-save.elc and amiga/fsf/emacs/site-lisp/vm-save.elc differ
  40504. Binary files baseline/fsf/emacs/site-lisp/vm-search.elc and amiga/fsf/emacs/site-lisp/vm-search.elc differ
  40505. Binary files baseline/fsf/emacs/site-lisp/vm-sort.elc and amiga/fsf/emacs/site-lisp/vm-sort.elc differ
  40506. Binary files baseline/fsf/emacs/site-lisp/vm-startup.elc and amiga/fsf/emacs/site-lisp/vm-startup.elc differ
  40507. Binary files baseline/fsf/emacs/site-lisp/vm-summary.elc and amiga/fsf/emacs/site-lisp/vm-summary.elc differ
  40508. Binary files baseline/fsf/emacs/site-lisp/vm-thread.elc and amiga/fsf/emacs/site-lisp/vm-thread.elc differ
  40509. Binary files baseline/fsf/emacs/site-lisp/vm-undo.elc and amiga/fsf/emacs/site-lisp/vm-undo.elc differ
  40510. Binary files baseline/fsf/emacs/site-lisp/vm-vars.elc and amiga/fsf/emacs/site-lisp/vm-vars.elc differ
  40511. Binary files baseline/fsf/emacs/site-lisp/vm-version.elc and amiga/fsf/emacs/site-lisp/vm-version.elc differ
  40512. Binary files baseline/fsf/emacs/site-lisp/vm-virtual.elc and amiga/fsf/emacs/site-lisp/vm-virtual.elc differ
  40513. Binary files baseline/fsf/emacs/site-lisp/vm-window.elc and amiga/fsf/emacs/site-lisp/vm-window.elc differ
  40514. diff -ru --new-file baseline/fsf/emacs/site-lisp/vm.el amiga/fsf/emacs/site-lisp/vm.el
  40515. --- baseline/fsf/emacs/site-lisp/vm.el    Wed Dec 31 17:00:00 1969
  40516. +++ amiga/fsf/emacs/site-lisp/vm.el    Sun Oct 15 17:08:26 1995
  40517. @@ -0,0 +1,1751 @@
  40518. +;;; UNIX style mail reader for GNU Emacs
  40519. +;;; Copyright (C) 1989 Kyle E. Jones
  40520. +;;;
  40521. +;;; This program is free software; you can redistribute it and/or modify
  40522. +;;; it under the terms of the GNU General Public License as published by
  40523. +;;; the Free Software Foundation; either version 1, or (at your option)
  40524. +;;; any later version.
  40525. +;;;
  40526. +;;; This program is distributed in the hope that it will be useful,
  40527. +;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  40528. +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  40529. +;;; GNU General Public License for more details.
  40530. +;;;
  40531. +;;; You should have received a copy of the GNU General Public License
  40532. +;;; along with this program; if not, write to the Free Software
  40533. +;;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  40534. +
  40535. +;; This is a set of Emacs-Lisp commands and support functions for
  40536. +;; reading mail.  While a mail reader (RMAIL) is distributed with GNU
  40537. +;; Emacs it converts a user's mailbox to BABYL format, a behavior I
  40538. +;; find quite unpalatable.
  40539. +;;
  40540. +;; VM is similar to RMAIL in that it scoops mail from the system mailbox
  40541. +;; into a primary inbox for reading, but the similarity ends there.
  40542. +;; VM does not reformat the mailbox beyond reordering the headers
  40543. +;; according to user preference, and adding a header used internally to
  40544. +;; store message attributes.
  40545. +;;
  40546. +;; Entry points to VM are the commands vm and vm-visit-folder.
  40547. +;;
  40548. +;; If autoloading then the lines:
  40549. +;;   (autoload 'vm "vm" nil t)
  40550. +;;   (autoload 'vm-visit-folder "vm" nil t)
  40551. +;; should appear in a user's .emacs or in default.el in the lisp
  40552. +;; directory of the Emacs distribution.
  40553. +;;
  40554. +;; VM requires Emacs' etc/movemail to work on your system.
  40555. +
  40556. +(provide 'vm)
  40557. +
  40558. +(defvar vm-primary-inbox "~/INBOX"
  40559. +  "*Mail is moved from the system mailbox to this file for reading.")
  40560. +
  40561. +(defvar vm-crash-box "~/INBOX.CRASH"
  40562. +  "*File in which to store mail temporarily while it is transferrred from
  40563. +the system mailbox to the primary inbox.  If the something happens
  40564. +during this mail transfer, any missing mail will be found in this file.
  40565. +VM will do crash recovery from this file automatically at startup, as
  40566. +necessary.")
  40567. +
  40568. +(defvar vm-spool-files nil
  40569. +  "*If non-nil this variable's value should be a list of strings naming files
  40570. +that VM will check for incoming mail instead of the where VM thinks your
  40571. +system mailbox is.  This variable can be used to specify multiple spool files
  40572. +or to point VM in the right direction if its notion of your system mailbox is
  40573. +incorrect.")
  40574. +
  40575. +(defvar vm-visible-headers
  40576. +  '("From:" "Sender:" "To:" "Apparently-To:" "Cc:" "Subject:" "Date:")
  40577. +  "*List of headers that should be visible when VM first displays a message.
  40578. +These should be listed in the order you wish them presented.
  40579. +Regular expressions are allowed.")
  40580. +
  40581. +(defvar vm-highlighted-header-regexp nil
  40582. +  "*Regular expression that matches the beginnings of headers that should
  40583. +be highlighted when a message is first presented.  For exmaple setting
  40584. +this variable to \"^From\\\\|^Subject\" causes the From: and Subject:
  40585. +headers to be highlighted.")
  40586. +
  40587. +(defvar vm-preview-lines 0
  40588. +  "*Non-nil value N causes VM to display the visible headers + N lines of text
  40589. +from a message when it is first presented.  The message is not actually marked
  40590. +as read until the message is exposed in its entirety.  Nil causes VM not to
  40591. +preview a message at all; it is displayed in its entirety when first
  40592. +presented and is marked as read.")
  40593. +
  40594. +(defvar vm-preview-read-messages t
  40595. +  "*Non-nil value means to preview messages, even if they've already been read.
  40596. +A nil value causes VM to preview messages only if new or unread.")
  40597. +
  40598. +(defvar vm-folder-type nil
  40599. +  "*Value specifies the type of mail folder VM should expect to read and
  40600. +write.  Nil means expect the UNIX style folders characterized by the
  40601. +\"\\n\\nFrom \" message separators.  The only other supported value for
  40602. +this variable is the symbol `mmdf' which causes VM to use
  40603. +\"^A^A^A^A\\n\" MMDF style leaders and trailers.")
  40604. +
  40605. +(defvar vm-folder-directory nil
  40606. +  "*Directory where folders of mail are kept.")
  40607. +
  40608. +(defvar vm-confirm-new-folders nil
  40609. +  "*Non-nil value causes interactive calls to vm-save-message
  40610. +to ask for confirmation before creating a new folder.")
  40611. +
  40612. +(defvar vm-delete-empty-folders t
  40613. +  "*Non-nil value causes VM to remove empty (zero length) folder files
  40614. +after saving them.")
  40615. +
  40616. +(defvar vm-included-text-prefix " > "
  40617. +  "*String used to prefix included text in replies.")
  40618. +
  40619. +(defvar vm-auto-folder-alist nil
  40620. +  "*Non-nil value should be an alist that VM will use to choose a default
  40621. +folder name when messages are saved.  The alist should be of the form
  40622. +\((HEADER-NAME
  40623. +   (REGEXP . FOLDER-NAME) ...
  40624. +  ...))
  40625. +where HEADER-NAME and REGEXP are strings, and FOLDER-NAME is a string or an s-expression that evaluates to a string.
  40626. +
  40627. +If any part of the contents of the message header named by HEADER-NAME
  40628. +is matched by the regular expression REGEXP, VM will evaluate the
  40629. +corresponding FOLDER-NAME and use the result as the default when
  40630. +prompting for a folder to save the message in.  If trhe resulting folder
  40631. +name is a relative pathname, then it will resolve to the directory named by
  40632. +vm-folder-directory, or the default-directory of the currently visited
  40633. +folder if vm-folder-directory is nil.
  40634. +
  40635. +When FOLDER-NAME is evaluated, the current buffer will contain only the
  40636. +contents of the header named by HEADER-NAME.  It is safe to modify this
  40637. +buffer.  You can use the match data from any \\( ... \\) grouping
  40638. +constructs in REGEXP along with the function buffer-substring to build a
  40639. +folder name based on the header information.
  40640. +
  40641. +Matching is case sensitive.")
  40642. +
  40643. +(defvar vm-visit-when-saving nil
  40644. +  "*Non-nil causes VM to visit folders when saving messages.  This means
  40645. +VM will read the folder into Emacs and append the message to the buffer
  40646. +instead of appending to the folder file directly.  This behavior is
  40647. +ideal when folders are encrypted or compressed since appending plaintext
  40648. +to such files is a ghastly mistake.
  40649. +
  40650. +Note the setting of this variable does not affect how the primary inbox
  40651. +is accessed, i.e. the primary inbox must be a plaintext file.")
  40652. +
  40653. +(defvar vm-in-reply-to-format "%i"
  40654. +  "*String which specifies the format of the contents of the In-Reply-To
  40655. +header that is generated for replies.  See the documentation for the
  40656. +variable vm-summary-format for information on what this string may
  40657. +contain.  The format should *not* end with a newline.
  40658. +Nil means don't put an In-Reply-To: header in replies.")
  40659. +
  40660. +(defvar vm-included-text-attribution-format "%F writes:\n"
  40661. +  "*String which specifies the format of the attribution that precedes the
  40662. +included text from a message in a reply.  See the documentation for the
  40663. +variable vm-summary-format for information on what this string may contain.
  40664. +Nil means don't attribute included text in replies.")
  40665. +
  40666. +(defvar vm-forwarding-subject-format "forwarded message from %F"
  40667. +  "*String which specifies the format of the contents of the Subject
  40668. +header that is generated for a forwarded message.  See the documentation
  40669. +for the variable vm-summary-format for information on what this string
  40670. +may contain.  The format should *not* end with a newline.  Nil means
  40671. +leave the Subject header empty when forwarding.")
  40672. +
  40673. +(defvar vm-summary-format "%2n %a %-17.17F %3m %2d %3l/%-5c \"%s\"\n"
  40674. +  "*String which specifies the message summary line format.
  40675. +The string may contain the printf-like `%' conversion specifiers which
  40676. +substitute information about the message into the final summary line.
  40677. +
  40678. +Recognized specifiers are:
  40679. +   a - attribute indicators (always three characters wide)
  40680. +       The first char is  `D', `N', `U' or ` ' for deleted, new, unread
  40681. +       and read message respectively.
  40682. +       The second char is `F' for filed (saved) messages.
  40683. +       The third char is `R' if the message has been replied to.
  40684. +   c - number of characters in message (ignoring headers)
  40685. +   d - date of month message sent
  40686. +   f - author's address
  40687. +   F - author's full name (same as f if full name not found)
  40688. +   h - hour message sent
  40689. +   i - message ID
  40690. +   l - number of lines in message (ignoring headers)
  40691. +   m - month message sent
  40692. +   n - message number
  40693. +   s - message subject
  40694. +   w - day of the week message sent
  40695. +   y - year message sent
  40696. +   z - timezone of date when the message was sent
  40697. +
  40698. +Use %% to get a single %.
  40699. +
  40700. +A numeric field width may be specified between the `%' and the specifier;
  40701. +this causes right justification of the substituted string.  A negative field
  40702. +width causes left justification.
  40703. +
  40704. +The field width may be followed by a `.' and a number specifying the maximum
  40705. +allowed length of the substituted string.  If the string is longer than this
  40706. +value it is truncated.
  40707. +
  40708. +The summary format need not be one line per message but it must end with
  40709. +a newline, otherwise the message pointer will not be displayed correctly
  40710. +in the summary window.")
  40711. +
  40712. +(defvar vm-mail-window-percentage 75
  40713. +  "*Percentage of the screen that should be used to show mail messages.
  40714. +The rest of the screen will be used by the summary buffer, if displayed.")
  40715. +
  40716. +(defvar vm-mutable-windows t
  40717. +  "*This variable's value controls VM's window usage.
  40718. +
  40719. +A value of t gives VM free run of the Emacs display; it will commandeer
  40720. +the entire screen for its purposes.
  40721. +
  40722. +A value of nil restricts VM's window usage to the window from which
  40723. +it was invoked.  VM will not create, delete, or use any other windows,
  40724. +nor will it resize it's own window.
  40725. +
  40726. +A value that is neither t nor nil allows VM to use other windows, but it
  40727. +will not create new ones, or resize or delete the current ones.")
  40728. +
  40729. +(defvar vm-startup-with-summary nil
  40730. +  "*Value tells VM what to display when a folder is visited.
  40731. +Nil means display folder only, t means display the summary only.  A
  40732. +value that is neither t not nil means to display both folder and summary.
  40733. +The latter only works if the variable pop-up-windows's value is non-nil.
  40734. +See the documentation for vm-mail-window-percentage to see how to change how
  40735. +the screen is apportioned between the folder and summary windows.")
  40736. +
  40737. +(defvar vm-follow-summary-cursor nil
  40738. +  "*Non-nil value causes VM to select the message under the cursor in the
  40739. +summary window before executing commands that operate on the current message.
  40740. +This occurs only when the summary buffer window is the selected window.")
  40741. +
  40742. +(defvar vm-group-by nil
  40743. +  "*Non-nil value tells VM how to group message presentation.
  40744. +Currently, the valid non-nil values for this variable are
  40745. +  \"subject\", which causes messages with the same subject (ignoring
  40746. +    Re:'s) to be presented together,
  40747. +  \"author\", which causes messages with the same author to be presented
  40748. +    together, and
  40749. +  \"date-sent\", which causes message sent on the same day to be
  40750. +    presented together.
  40751. +  \"arrival-time\" which appears only for completeness, this is the
  40752. +    default behavior and is the same as nil.
  40753. +
  40754. +The ordering of the messages in the folder itself is not altered, messages
  40755. +are simply numbered and ordered differently internally.")
  40756. +
  40757. +(defvar vm-skip-deleted-messages t
  40758. +  "*Non-nil value causes VM's `n' and 'p' commands to skip over
  40759. +deleted messages.  If all messages are marked deleted then this variable
  40760. +is, of course, ignored.")
  40761. +
  40762. +(defvar vm-skip-read-messages nil
  40763. +  "*Non-nil value causes VM's `n' and `p' commands to skip over
  40764. +message that have already been read in favor of new or unread messages.
  40765. +If there are no unread message then this variable is, of course, ignored.")
  40766. +
  40767. +(defvar vm-move-after-deleting nil
  40768. +  "*Non-nil value causes VM's `d' command to automatically invoke
  40769. +vm-next-message or vm-previous-message after deleting, to move
  40770. +past the deleted messages.")
  40771. +
  40772. +(defvar vm-delete-after-saving nil
  40773. +  "*Non-nil value causes VM automatically to mark messages for deletion
  40774. +after successfully saving them to a folder.")
  40775. +
  40776. +(defvar vm-circular-folders 0
  40777. +  "*Value determines whether VM folders will be considered circular by
  40778. +various commands.  `Circular' means VM will wrap from the end of the folder
  40779. +to the start and vice versa when moving the message pointer or deleting,
  40780. +undeleting or saving messages before or after the current message.
  40781. +
  40782. +A value of t causes all VM commands to consider folders circular.
  40783. +
  40784. +A value of nil causes all of VM commands to signal an error if the start
  40785. +or end of the folder would have to be passed to complete the command.
  40786. +For movement commands, this occurs after the message pointer has been
  40787. +moved as far it can go.  For other commands the error occurs before any
  40788. +part of the command has been executed, i.e. no moves, saves, etc. will
  40789. +be done unless they can be done in their entirety.
  40790. +
  40791. +A value that is not nil and not t causes only VM's movement commands to
  40792. +consider folders circular.  Saves, deletes and undeleted command will
  40793. +behave the same as if the value is nil.")
  40794. +
  40795. +(defvar vm-search-using-regexps nil
  40796. +  "*Non-nil value causes VM's search command will interpret user input as a
  40797. +regular expression instead of as a literal string.")
  40798. +
  40799. +(defvar vm-mode-hooks nil
  40800. +  "*List of hook functions to run when a buffer enters vm-mode.
  40801. +These hook functions should generally be used to set key bindings
  40802. +and local variables.  Mucking about in the folder buffer is certainly
  40803. +possible but it is not encouraged.")
  40804. +
  40805. +(defvar vm-berkeley-mail-compatibility
  40806. +  (memq system-type '(berkeley-unix))
  40807. +  "*Non-nil means to read and write BSD Mail(1) style Status: headers.
  40808. +This makes sense if you plan to use VM to read mail archives created by
  40809. +Mail.")
  40810. +
  40811. +(defvar vm-gargle-uucp nil
  40812. +  "*Non-nil value means to use a crufty regular expression that does
  40813. +surprisingly well at beautifying UUCP addresses that are substitued for
  40814. +%f as part of summary and attribution formats.")
  40815. +
  40816. +(defvar vm-strip-reply-headers nil
  40817. +  "*Non-nil value causes VM to strip away all comments and extraneous text
  40818. +from the headers generated in reply messages.  If you use the \"fakemail\"
  40819. +program as distributed with Emacs, you probably want to set this variable to
  40820. +to t, because as of Emacs v18.52 \"fakemail\" could not handle unstripped
  40821. +headers.")
  40822. +
  40823. +(defvar vm-rfc934-forwarding t
  40824. +  "*Non-nil value causes VM to use char stuffing as described in RFC 934
  40825. +when packaging a message to be forwarded.  This will allow the recipient
  40826. +to use a standard bursting agent on the message and act upon it as if it
  40827. +were sent directly.")
  40828. +
  40829. +(defvar vm-inhibit-startup-message nil
  40830. +  "*Non-nil causes VM not to display its copyright notice, disclaimers
  40831. +etc. when started in the usual way.")
  40832. +
  40833. +(defvar mail-yank-hooks nil
  40834. +  "*List of hooks functions called after yanking a message into a *mail*
  40835. +buffer.")
  40836. +
  40837. +(defvar vm-mode-map nil
  40838. +  "Keymap for VM mode and VM Summary mode.")
  40839. +
  40840. +(defconst vm-version "4.42"
  40841. +  "Version number of VM.")
  40842. +
  40843. +;; internal vars
  40844. +(defvar vm-message-list nil)
  40845. +(make-variable-buffer-local 'vm-message-list)
  40846. +(defvar vm-message-pointer nil)
  40847. +(make-variable-buffer-local 'vm-message-pointer)
  40848. +(defvar vm-last-message-pointer nil)
  40849. +(make-variable-buffer-local 'vm-last-message-pointer)
  40850. +(defvar vm-primary-inbox-p nil)
  40851. +(make-variable-buffer-local 'vm-primary-inbox-p)
  40852. +(defvar vm-visible-header-alist nil)
  40853. +(make-variable-buffer-local 'vm-visible-header-alist)
  40854. +(defvar vm-mail-buffer nil)
  40855. +(make-variable-buffer-local 'vm-mail-buffer)
  40856. +(defvar vm-summary-buffer nil)
  40857. +(make-variable-buffer-local 'vm-summary-buffer)
  40858. +(defvar vm-system-state nil)
  40859. +(make-variable-buffer-local 'vm-system-state)
  40860. +(defvar vm-undo-record-list nil)
  40861. +(make-variable-buffer-local 'vm-undo-record-list)
  40862. +(defvar vm-undo-record-pointer nil)
  40863. +(make-variable-buffer-local 'vm-undo-record-pointer)
  40864. +(defvar vm-messages-needing-display-update nil)
  40865. +(make-variable-buffer-local 'vm-messages-needing-display-update)
  40866. +(defvar vm-current-grouping nil)
  40867. +(make-variable-buffer-local 'vm-current-grouping)
  40868. +(defvar vm-last-save-folder nil)
  40869. +(make-variable-buffer-local 'vm-last-save-folder)
  40870. +(defvar vm-last-pipe-command nil)
  40871. +(make-variable-buffer-local 'vm-last-pipe-command)
  40872. +(defvar vm-messages-not-on-disk 0)
  40873. +(make-variable-buffer-local 'vm-messages-not-on-disk)
  40874. +(defvar vm-inhibit-write-file-hook nil)
  40875. +(defvar vm-session-beginning t)
  40876. +(defconst vm-spool-directory
  40877. +  (or (and (boundp 'rmail-spool-directory) rmail-spool-directory)
  40878. +      "/usr/spool/mail"))
  40879. +(defconst vm-attributes-header-regexp
  40880. +  "^X-VM-Attributes:\\(.*\n\\([ \t]+.*\n\\)*\\)")
  40881. +(defconst vm-v5-data-header-regexp "^X-VM-v5-Data:\\(.*\n\\([ \t]+.*\n\\)*\\)")
  40882. +(defconst vm-attributes-header "X-VM-Attributes:")
  40883. +(defconst vm-berkeley-mail-status-header "Status: ")
  40884. +(defconst vm-berkeley-mail-status-header-regexp "^Status: ..?\n")
  40885. +(defconst vm-generic-header-regexp "^[^:\n]+:\\(.*\n\\([ \t]+.*\n\\)*\\)")
  40886. +(defconst vm-header-regexp-format "^%s:[ \t]*\\(.*\\(\n[ \t]+.*\\)*\\)")
  40887. +(defconst vm-supported-groupings-alist
  40888. +  '(("arrival-time") ("subject") ("author") ("date-sent")))
  40889. +(defconst vm-total-count 0)
  40890. +(defconst vm-new-count 0)
  40891. +(defconst vm-unread-count 0)
  40892. +;; for the mode line
  40893. +(defvar vm-ml-message-number nil)
  40894. +(make-variable-buffer-local 'vm-ml-message-number)
  40895. +(defvar vm-ml-highest-message-number nil)
  40896. +(make-variable-buffer-local 'vm-ml-highest-message-number)
  40897. +(defvar vm-ml-attributes-string nil)
  40898. +(make-variable-buffer-local 'vm-ml-attributes-string)
  40899. +
  40900. +;; general purpose macros and functions
  40901. +(defmacro vm-marker (pos &optional buffer)
  40902. +  (list 'set-marker '(make-marker) pos buffer))
  40903. +
  40904. +(defmacro vm-increment (variable)
  40905. +  (list 'setq variable (list '1+ variable)))
  40906. +
  40907. +(defmacro vm-decrement (variable)
  40908. +  (list 'setq variable (list '1- variable)))
  40909. +
  40910. +(defun vm-abs (n) (if (< n 0) (- n) n))
  40911. +
  40912. +;; save-restriction flubs restoring the clipping region if you
  40913. +;; (widen) and modify text outside the old region.
  40914. +;; This should do it right.
  40915. +(defmacro vm-save-restriction (&rest forms)
  40916. +  (let ((vm-sr-clip (make-symbol "vm-sr-clip"))
  40917. +    (vm-sr-min (make-symbol "vm-sr-min"))
  40918. +    (vm-sr-max (make-symbol "vm-sr-max")))
  40919. +    (list 'let (list (list vm-sr-clip '(> (buffer-size)
  40920. +                      (- (point-max) (point-min)))))
  40921. +      (list 'and vm-sr-clip
  40922. +        (list 'setq vm-sr-min '(set-marker (make-marker) (point-min)))
  40923. +        (list 'setq vm-sr-max '(set-marker (make-marker) (point-max))))
  40924. +      (list 'unwind-protect (cons 'progn forms)
  40925. +        '(widen)
  40926. +        (list 'and vm-sr-clip
  40927. +              (list 'progn
  40928. +                (list 'narrow-to-region vm-sr-min vm-sr-max)
  40929. +                (list 'set-marker vm-sr-min nil)
  40930. +                (list 'set-marker vm-sr-max nil)))))))
  40931. +
  40932. +;; macros and functions dealing with accessing messages struct fields
  40933. +(defun vm-make-message () (make-vector 20 nil))
  40934. +
  40935. +;; where message begins (From_ line)
  40936. +(defmacro vm-start-of (message) (list 'aref message 0))
  40937. +;; where visible headers start
  40938. +(defun vm-vheaders-of (message)
  40939. +  (or (aref message 1)
  40940. +      (progn (vm-reorder-message-headers message)
  40941. +         (aref message 1))))
  40942. +;; where text section starts
  40943. +(defmacro vm-text-of (message) (list 'aref message 2))
  40944. +;; where message ends
  40945. +(defmacro vm-end-of (message) (list 'aref message 3))
  40946. +;; message number
  40947. +(defmacro vm-number-of (message) (list 'aref message 4))
  40948. +;; message attribute vector
  40949. +(defmacro vm-attributes-of (message) (list 'aref message 5))
  40950. +(defmacro vm-new-flag (message) (list 'aref (list 'aref message 5) 0))
  40951. +(defmacro vm-unread-flag (message) (list 'aref (list 'aref message 5) 1))
  40952. +(defmacro vm-deleted-flag (message) (list 'aref (list 'aref message 5) 2))
  40953. +(defmacro vm-filed-flag (message) (list 'aref (list 'aref message 5) 3))
  40954. +(defmacro vm-replied-flag (message) (list 'aref (list 'aref message 5) 4))
  40955. +;; message size in bytes (as a string)
  40956. +(defmacro vm-byte-count-of (message) (list 'aref message 6))
  40957. +;; weekday sent
  40958. +(defmacro vm-weekday-of (message) (list 'aref message 7))
  40959. +;; month day
  40960. +(defmacro vm-monthday-of (message) (list 'aref message 8))
  40961. +;; month sent
  40962. +(defmacro vm-month-of (message) (list 'aref message 9))
  40963. +;; year sent
  40964. +(defmacro vm-year-of (message) (list 'aref message 10))
  40965. +;; hour sent
  40966. +(defmacro vm-hour-of (message) (list 'aref message 11))
  40967. +;; timezone
  40968. +(defmacro vm-zone-of (message) (list 'aref message 12))
  40969. +;; message author's full name (Full-Name: or gouged from From:)
  40970. +(defmacro vm-full-name-of (message) (list 'aref message 13))
  40971. +;; message author address (gouged from From:)
  40972. +(defmacro vm-from-of (message) (list 'aref message 14))
  40973. +;; message ID (Message-Id:)
  40974. +(defmacro vm-message-id-of (message) (list 'aref message 15))
  40975. +;; number of lines in message (as a string)
  40976. +(defmacro vm-line-count-of (message) (list 'aref message 16))
  40977. +;; message subject (Subject:)
  40978. +(defmacro vm-subject-of (message) (list 'aref message 17))
  40979. +(defmacro vm-su-start-of (message) (list 'aref message 18))
  40980. +(defmacro vm-su-end-of (message) (list 'aref message 19))
  40981. +
  40982. +(defmacro vm-set-start-of (message start) (list 'aset message 0 start))
  40983. +(defmacro vm-set-vheaders-of (message vh) (list 'aset message 1 vh))
  40984. +(defmacro vm-set-text-of (message text) (list 'aset message 2 text))
  40985. +(defmacro vm-set-end-of (message end) (list 'aset message 3 end))
  40986. +(defmacro vm-set-number-of (message n) (list 'aset message 4 n))
  40987. +(defmacro vm-set-attributes-of (message attrs) (list 'aset message 5 attrs))
  40988. +(defmacro vm-set-byte-count-of (message count) (list 'aset message 6 count))
  40989. +(defmacro vm-set-weekday-of (message val) (list 'aset message 7 val))
  40990. +(defmacro vm-set-monthday-of (message val) (list 'aset message 8 val))
  40991. +(defmacro vm-set-month-of (message val) (list 'aset message 9 val))
  40992. +(defmacro vm-set-year-of (message val) (list 'aset message 10 val))
  40993. +(defmacro vm-set-hour-of (message val) (list 'aset message 11 val))
  40994. +(defmacro vm-set-zone-of (message val) (list 'aset message 12 val))
  40995. +(defmacro vm-set-full-name-of (message author) (list 'aset message 13 author))
  40996. +(defmacro vm-set-from-of (message author) (list 'aset message 14 author))
  40997. +(defmacro vm-set-message-id-of (message id) (list 'aset message 15 id))
  40998. +(defmacro vm-set-line-count-of (message count) (list 'aset message 16 count))
  40999. +(defmacro vm-set-subject-of (message subject) (list 'aset message 17 subject))
  41000. +(defmacro vm-set-su-start-of (message start) (list 'aset message 18 start))
  41001. +(defmacro vm-set-su-end-of (message end) (list 'aset message 19 end))
  41002. +
  41003. +(defun vm-text-end-of (message)
  41004. +  (- (vm-end-of message)
  41005. +     (cond ((eq vm-folder-type 'mmdf) 5)
  41006. +       (t 1))))
  41007. +
  41008. +;; The remaining routines in this group are part of the undo system.
  41009. +
  41010. +;; init
  41011. +(if vm-mode-map
  41012. +    ()
  41013. +  (setq vm-mode-map (make-keymap))
  41014. +  (suppress-keymap vm-mode-map)
  41015. +  (define-key vm-mode-map "h" 'vm-summarize)
  41016. +  (define-key vm-mode-map "\M-n" 'vm-next-unread-message)
  41017. +  (define-key vm-mode-map "\M-p" 'vm-previous-unread-message)
  41018. +  (define-key vm-mode-map "n" 'vm-next-message)
  41019. +  (define-key vm-mode-map "p" 'vm-previous-message)
  41020. +  (define-key vm-mode-map "N" 'vm-Next-message)
  41021. +  (define-key vm-mode-map "P" 'vm-Previous-message)
  41022. +  (define-key vm-mode-map "\t" 'vm-goto-message-last-seen)
  41023. +  (define-key vm-mode-map "\r" 'vm-goto-message)
  41024. +  (define-key vm-mode-map "t" 'vm-expose-hidden-headers)
  41025. +  (define-key vm-mode-map " " 'vm-scroll-forward)
  41026. +  (define-key vm-mode-map "b" 'vm-scroll-backward)
  41027. +  (define-key vm-mode-map "\C-?" 'vm-scroll-backward)
  41028. +  (define-key vm-mode-map "d" 'vm-delete-message)
  41029. +  (define-key vm-mode-map "u" 'vm-undelete-message)
  41030. +  (define-key vm-mode-map "k" 'vm-kill-subject)
  41031. +  (define-key vm-mode-map "f" 'vm-followup)
  41032. +  (define-key vm-mode-map "F" 'vm-followup-include-text)
  41033. +  (define-key vm-mode-map "r" 'vm-reply)
  41034. +  (define-key vm-mode-map "R" 'vm-reply-include-text)
  41035. +  (define-key vm-mode-map "z" 'vm-forward-message)
  41036. +  (define-key vm-mode-map "@" 'vm-send-digest)
  41037. +  (define-key vm-mode-map "*" 'vm-burst-digest)
  41038. +  (define-key vm-mode-map "m" 'vm-mail)
  41039. +  (define-key vm-mode-map "g" 'vm-get-new-mail)
  41040. +  (define-key vm-mode-map "G" 'vm-group-messages)
  41041. +  (define-key vm-mode-map "v" 'vm-visit-folder)
  41042. +  (define-key vm-mode-map "s" 'vm-save-message)
  41043. +  (define-key vm-mode-map "w" 'vm-save-message-sans-headers)
  41044. +  (define-key vm-mode-map "A" 'vm-auto-archive-messages)
  41045. +  (define-key vm-mode-map "S" 'vm-save-folder)
  41046. +  (define-key vm-mode-map "|" 'vm-pipe-message-to-command)
  41047. +  (define-key vm-mode-map "#" 'vm-expunge-folder)
  41048. +  (define-key vm-mode-map "q" 'vm-quit)
  41049. +  (define-key vm-mode-map "x" 'vm-quit-no-change)
  41050. +  (define-key vm-mode-map "?" 'vm-help)
  41051. +  (define-key vm-mode-map "\C-_" 'vm-undo)
  41052. +  (define-key vm-mode-map "\C-xu" 'vm-undo)
  41053. +  (define-key vm-mode-map "!" 'shell-command)
  41054. +  (define-key vm-mode-map "<" 'beginning-of-buffer)
  41055. +  (define-key vm-mode-map ">" 'vm-end-of-message)
  41056. +  (define-key vm-mode-map "\M-s" 'vm-isearch-forward)
  41057. +  (define-key vm-mode-map "=" 'vm-summarize)
  41058. +  (define-key vm-mode-map "\M-C" 'vm-show-copying-restrictions)
  41059. +  (define-key vm-mode-map "\M-W" 'vm-show-no-warranty)
  41060. +  (define-key vm-mode-map "\C-y" 'undefined))
  41061. +
  41062. +(defun vm-mark-for-display-update (message)
  41063. +  (if (not (memq message vm-messages-needing-display-update))
  41064. +      (setq vm-messages-needing-display-update
  41065. +        (cons message vm-messages-needing-display-update))))
  41066. +
  41067. +(defun vm-last (list) (while (cdr-safe list) (setq list (cdr list))) list)
  41068. +
  41069. +(put 'folder-empty 'error-conditions '(folder-empty error))
  41070. +(put 'folder-empty 'error-message "Folder is empty")
  41071. +
  41072. +(defun vm-error-if-folder-empty ()
  41073. +  (while (null vm-message-list)
  41074. +    (signal 'folder-empty nil)))
  41075. +
  41076. +(defun vm-proportion-windows ()
  41077. +  (if vm-mail-buffer
  41078. +      (set-buffer vm-mail-buffer))
  41079. +  (if (not (one-window-p t))
  41080. +      (let ((mail-w (get-buffer-window (current-buffer)))
  41081. +        (n (- (window-height (get-buffer-window (current-buffer)))
  41082. +          (/ (* vm-mail-window-percentage
  41083. +            (- (screen-height)
  41084. +               (window-height (minibuffer-window))))
  41085. +             100)))
  41086. +        (old-w (selected-window)))
  41087. +    (if mail-w
  41088. +        (save-excursion
  41089. +          (select-window mail-w)
  41090. +          (shrink-window n)
  41091. +          (select-window old-w))))))
  41092. +
  41093. +(defun vm-number-messages ()
  41094. +  (let ((n 1) (message-list vm-message-list))
  41095. +    (while message-list
  41096. +      (vm-set-number-of (car message-list) (int-to-string n))
  41097. +      (setq n (1+ n) message-list (cdr message-list)))
  41098. +    (setq vm-ml-highest-message-number (int-to-string (1- n)))))
  41099. +
  41100. +(defun vm-match-visible-header (alist)
  41101. +  (catch 'match
  41102. +    (while alist
  41103. +      (if (looking-at (car (car alist)))
  41104. +      (throw 'match (car alist)))
  41105. +      (setq alist (cdr alist)))
  41106. +    nil))
  41107. +
  41108. +(defun vm-delete-header ()
  41109. +  (if (looking-at vm-generic-header-regexp)
  41110. +      (delete-region (match-beginning 0) (match-end 0))))
  41111. +
  41112. +;; Build a chain of message structures.
  41113. +;; Find the start and end of each message and fill end the relevant
  41114. +;; fields in the message structures.
  41115. +
  41116. +(defun vm-build-message-list ()
  41117. +  (save-excursion
  41118. +    (vm-build-visible-header-alist)
  41119. +    (let (tail-cons message prev-message case-fold-search marker
  41120. +      start-regexp sep-pattern trailer-length)
  41121. +      (if (eq vm-folder-type 'mmdf)
  41122. +      (setq start-regexp "^\001\001\001\001\n"
  41123. +        separator-string "\n\001\001\001\001\n\001\001\001\001"
  41124. +        trailer-length 6)
  41125. +    (setq start-regexp "^From "
  41126. +          separator-string "\n\nFrom "
  41127. +          trailer-length 2))
  41128. +      (if vm-message-list
  41129. +      (let ((mp vm-message-list)
  41130. +        (end (point-min)))
  41131. +        (while mp
  41132. +          (if (< end (vm-end-of (car mp)))
  41133. +          (setq end (vm-end-of (car mp))))
  41134. +          (setq mp (cdr mp)))
  41135. +        ;; move back past trailer so separator-string will match below
  41136. +        (goto-char (- end trailer-length))
  41137. +        (setq tail-cons (vm-last vm-message-list)))
  41138. +    (goto-char (point-min))
  41139. +    (if (looking-at start-regexp)
  41140. +        (progn
  41141. +          (setq message (vm-make-message) prev-message message)
  41142. +          (vm-set-start-of message (vm-marker (match-beginning 0)))
  41143. +          (setq vm-message-list (list message)
  41144. +            tail-cons vm-message-list))))
  41145. +      (while (search-forward separator-string nil t)
  41146. +    (setq marker (vm-marker (+ trailer-length (match-beginning 0)))
  41147. +          message (vm-make-message))
  41148. +    (vm-set-start-of message marker)
  41149. +    (if prev-message
  41150. +        (vm-set-end-of prev-message marker))
  41151. +    (if tail-cons
  41152. +        (progn
  41153. +          (setcdr tail-cons (list message))
  41154. +          (setq tail-cons (cdr tail-cons)
  41155. +            prev-message message))
  41156. +      (setq vm-message-list (list message)
  41157. +        tail-cons vm-message-list
  41158. +        prev-message message)))
  41159. +      (if prev-message
  41160. +      (vm-set-end-of prev-message (vm-marker (point-max)))))))
  41161. +
  41162. +(defun vm-build-visible-header-alist ()
  41163. +  (let ((header-alist (cons nil nil))
  41164. +    (vheaders vm-visible-headers)
  41165. +    list)
  41166. +    (setq list header-alist)
  41167. +    (while vheaders
  41168. +      (setcdr list (cons (cons (car vheaders) nil) nil))
  41169. +      (setq list (cdr list) vheaders (cdr vheaders)))
  41170. +    (setq vm-visible-header-alist (cdr header-alist))))
  41171. +
  41172. +;; Group the headers that the user wants to see at the end of the headers
  41173. +;; section so we can narrow to them.  The vheaders field of the
  41174. +;; message struct is set.  This function is called on demand whenever
  41175. +;; a vheaders field is discovered to be nil for a particular message.
  41176. +
  41177. +(defun vm-reorder-message-headers (message)
  41178. +  (save-excursion
  41179. +    (vm-save-restriction
  41180. +     (let ((header-alist vm-visible-header-alist)
  41181. +       list buffer-read-only match-end-0
  41182. +       (inhibit-quit t)
  41183. +       (old-buffer-modified-p (buffer-modified-p)))
  41184. +       (goto-char (vm-start-of message))
  41185. +       (forward-line)
  41186. +       (while (and (not (= (following-char) ?\n))
  41187. +           (looking-at vm-generic-header-regexp))
  41188. +     (setq match-end-0 (match-end 0)
  41189. +           list (vm-match-visible-header header-alist))
  41190. +     (if (null list)
  41191. +         (goto-char match-end-0)
  41192. +       (if (cdr list)
  41193. +           (setcdr list 
  41194. +               (concat
  41195. +            (cdr list)
  41196. +            (buffer-substring (point) match-end-0)))
  41197. +         (setcdr list (buffer-substring (point) match-end-0)))
  41198. +       (delete-region (point) match-end-0)))
  41199. +       (vm-set-vheaders-of message (point-marker))
  41200. +       (setq list header-alist)
  41201. +       (while list
  41202. +     (if (cdr (car list))
  41203. +         (progn
  41204. +           (insert (cdr (car list)))
  41205. +           (setcdr (car list) nil)))
  41206. +     (setq list (cdr list)))
  41207. +       (set-buffer-modified-p old-buffer-modified-p)))))
  41208. +
  41209. +;; Read the attribute headers from the messages and store their contents
  41210. +;; in attributes fields of the message structures.  If a message has no
  41211. +;; attributes header assume it is new.  If a message already has
  41212. +;; attributes don't bother checking the headers.
  41213. +;;
  41214. +;; Stores the position where the message text begins in the message struct.
  41215. +
  41216. +(defun vm-read-attributes ()
  41217. +  (save-excursion
  41218. +    (let ((mp vm-message-list))
  41219. +      (setq vm-new-count 0
  41220. +        vm-unread-count 0
  41221. +        vm-total-count 0)
  41222. +      (while mp
  41223. +    (vm-increment vm-total-count)
  41224. +    (if (vm-attributes-of (car mp))
  41225. +        ()
  41226. +      (goto-char (vm-start-of (car mp)))
  41227. +      (search-forward "\n\n" (vm-text-end-of (car mp)) 0)
  41228. +      (vm-set-text-of (car mp) (point-marker))
  41229. +      (goto-char (vm-start-of (car mp)))
  41230. +      (cond ((re-search-forward vm-attributes-header-regexp
  41231. +                    (vm-text-of (car mp)) t)
  41232. +         (goto-char (match-beginning 1))
  41233. +         (vm-set-attributes-of (car mp)
  41234. +                       (condition-case ()
  41235. +                       (read (current-buffer))
  41236. +                     (error (vector t nil nil nil nil))))
  41237. +         ;; If attributes are unrecogniable just assume the
  41238. +         ;; message is new.
  41239. +         (cond ((or (not (vectorp (vm-attributes-of (car mp))))
  41240. +                (not (= (length (vm-attributes-of (car mp)))
  41241. +                    5)))
  41242. +            (vm-set-attributes-of (car mp)
  41243. +                          (vector t nil nil nil nil)))))
  41244. +        ;; recognize version 5 header in case the user wants to
  41245. +        ;; switch back to version 5.
  41246. +        ((re-search-forward vm-v5-data-header-regexp
  41247. +                    (vm-text-of (car mp)) t)
  41248. +         (goto-char (match-beginning 1))
  41249. +         (vm-set-attributes-of (car mp)
  41250. +                       (condition-case ()
  41251. +                       (car (read (current-buffer)))
  41252. +                     (error (vector t nil nil nil nil))))
  41253. +         (let ((i 0) (v (vector nil nil nil nil nil)))
  41254. +           (while (< i 5)
  41255. +             (aset v i (aref (vm-attributes-of (car mp)) i))
  41256. +             (vm-increment i))
  41257. +           (vm-set-attributes-of (car mp) v)))
  41258. +        ((and vm-berkeley-mail-compatibility
  41259. +              (re-search-forward vm-berkeley-mail-status-header-regexp
  41260. +                     (vm-text-of (car mp)) t))
  41261. +         (vm-set-attributes-of (car mp) (vector nil (looking-at "R")
  41262. +                            nil nil nil)))
  41263. +        (t
  41264. +         (vm-set-attributes-of (car mp) (vector t nil nil nil nil)))))
  41265. +    (cond ((vm-deleted-flag (car mp))) ; don't count deleted messages
  41266. +          ((vm-new-flag (car mp))
  41267. +           (vm-increment vm-new-count))
  41268. +          ((vm-unread-flag (car mp))
  41269. +           (vm-increment vm-unread-count)))
  41270. +    (setq mp (cdr mp))))))
  41271. +
  41272. +;; Stuff the messages attributes back into the messages as headers.
  41273. +(defun vm-stuff-attributes ()
  41274. +  (save-excursion
  41275. +    (vm-save-restriction
  41276. +     (widen)
  41277. +     (let ((mp vm-message-list) attributes buffer-read-only
  41278. +       (old-buffer-modified-p (buffer-modified-p)))
  41279. +       (while mp
  41280. +     (setq attributes (vm-attributes-of (car mp)))
  41281. +     (goto-char (vm-start-of (car mp)))
  41282. +     (if (re-search-forward vm-attributes-header-regexp
  41283. +                (vm-text-of (car mp)) t)
  41284. +         (delete-region (match-beginning 0) (match-end 0)))
  41285. +     (goto-char (vm-start-of (car mp)))
  41286. +     (if (re-search-forward vm-v5-data-header-regexp
  41287. +                (vm-text-of (car mp)) t)
  41288. +         (delete-region (match-beginning 0) (match-end 0)))
  41289. +     (cond (vm-berkeley-mail-compatibility
  41290. +        (goto-char (vm-start-of (car mp)))
  41291. +        (if (re-search-forward vm-berkeley-mail-status-header-regexp
  41292. +                       (vm-text-of (car mp)) t)
  41293. +            (delete-region (match-beginning 0) (match-end 0)))
  41294. +        (cond ((not (vm-new-flag (car mp)))
  41295. +               (goto-char (vm-start-of (car mp)))
  41296. +               (forward-line)
  41297. +               (insert-before-markers
  41298. +            vm-berkeley-mail-status-header
  41299. +            (if (vm-unread-flag (car mp)) "" "R")
  41300. +            "O\n")))))
  41301. +     (goto-char (vm-start-of (car mp)))
  41302. +     (forward-line)
  41303. +     (insert-before-markers vm-attributes-header " "
  41304. +                (prin1-to-string attributes) "\n")
  41305. +     (setq mp (cdr mp)))
  41306. +       (set-buffer-modified-p old-buffer-modified-p)))))
  41307. +      
  41308. +;; Remove any message marked for deletion from the buffer and the
  41309. +;; message list.
  41310. +(defun vm-gobble-deleted-messages ()
  41311. +  (save-excursion
  41312. +    (vm-save-restriction
  41313. +     (widen)
  41314. +     (let ((mp vm-message-list) prev buffer-read-only did-gobble)
  41315. +       (while mp
  41316. +     (if (not (vm-deleted-flag (car mp)))
  41317. +         (setq prev mp)
  41318. +       (setq did-gobble t)
  41319. +       (delete-region (vm-start-of (car mp))
  41320. +              (vm-end-of (car mp)))
  41321. +       (if (null prev)
  41322. +           (setq vm-message-list (cdr vm-message-list))
  41323. +         (setcdr prev (cdr mp))))
  41324. +     (setq mp (cdr mp)))
  41325. +       (if did-gobble
  41326. +       (progn
  41327. +         (vm-clear-expunge-invalidated-undos)
  41328. +         (if (null vm-message-list)
  41329. +         (setq overlay-arrow-position nil))
  41330. +         (cond ((and vm-last-message-pointer
  41331. +             (vm-deleted-flag (car vm-last-message-pointer)))
  41332. +            (setq vm-last-message-pointer nil)))
  41333. +         (cond ((and vm-message-pointer
  41334. +             (vm-deleted-flag (car vm-message-pointer)))
  41335. +            (setq vm-system-state nil)
  41336. +            (setq mp (cdr vm-message-pointer))
  41337. +            (while (and mp (vm-deleted-flag (car mp)))
  41338. +              (setq mp (cdr mp)))
  41339. +            (setq vm-message-pointer
  41340. +              (or mp (vm-last vm-message-list)))))
  41341. +         did-gobble ))))))
  41342. +
  41343. +(defun vm-change-all-new-to-unread ()
  41344. +  (let ((mp vm-message-list))
  41345. +    (while mp
  41346. +      (if (vm-new-flag (car mp))
  41347. +      (progn
  41348. +        (vm-set-new-flag (car mp) nil)
  41349. +        (vm-set-unread-flag (car mp) t)))
  41350. +      (setq mp (cdr mp)))))
  41351. +
  41352. +(defun vm-update-summary-and-mode-line ()
  41353. +  (setq vm-ml-message-number (vm-number-of (car vm-message-pointer)))
  41354. +  (cond ((vm-new-flag (car vm-message-pointer))
  41355. +     (setq vm-ml-attributes-string "new"))
  41356. +    ((vm-unread-flag (car vm-message-pointer))
  41357. +     (setq vm-ml-attributes-string "unread"))
  41358. +    (t (setq vm-ml-attributes-string "read")))
  41359. +  (cond ((vm-filed-flag (car vm-message-pointer))
  41360. +     (setq vm-ml-attributes-string
  41361. +           (concat vm-ml-attributes-string " filed"))))
  41362. +  (cond ((vm-replied-flag (car vm-message-pointer))
  41363. +     (setq vm-ml-attributes-string
  41364. +           (concat vm-ml-attributes-string " replied"))))
  41365. +  (cond ((vm-deleted-flag (car vm-message-pointer))
  41366. +     (setq vm-ml-attributes-string
  41367. +           (concat vm-ml-attributes-string " deleted"))))
  41368. +  (while vm-messages-needing-display-update
  41369. +    (vm-update-message-summary vm-messages-needing-display-update)
  41370. +    (setq vm-messages-needing-display-update
  41371. +      (cdr vm-messages-needing-display-update)))
  41372. +  (save-excursion
  41373. +    (set-buffer (other-buffer))
  41374. +    (set-buffer-modified-p (buffer-modified-p))))
  41375. +
  41376. +(defun vm-goto-message (n)
  41377. +  "Go to the message numbered N.
  41378. +Interactively N is the prefix argument.  If no prefix arg is provided
  41379. +N is prompted for in the minibuffer."
  41380. +  (interactive "NGo to message: ")
  41381. +  (if vm-mail-buffer
  41382. +      (set-buffer vm-mail-buffer))
  41383. +  (vm-error-if-folder-empty)
  41384. +  (let ((cons (nthcdr (1- n) vm-message-list)))
  41385. +    (if (null cons)
  41386. +    (error "No such message."))
  41387. +    (if (eq vm-message-pointer cons)
  41388. +    (vm-preview-current-message)
  41389. +      (setq vm-last-message-pointer vm-message-pointer
  41390. +        vm-message-pointer cons)
  41391. +      (vm-set-summary-pointer (car vm-message-pointer))
  41392. +      (vm-preview-current-message))))
  41393. +
  41394. +(defun vm-goto-message-last-seen ()
  41395. +  "Go to the message last previewed."
  41396. +  (interactive)
  41397. +  (if vm-mail-buffer
  41398. +      (set-buffer vm-mail-buffer))
  41399. +  (vm-error-if-folder-empty)
  41400. +  (if vm-last-message-pointer
  41401. +      (let (tmp)
  41402. +    (setq tmp vm-message-pointer
  41403. +          vm-message-pointer vm-last-message-pointer
  41404. +          vm-last-message-pointer tmp)
  41405. +    (vm-set-summary-pointer (car vm-message-pointer))
  41406. +    (vm-preview-current-message))))
  41407. +
  41408. +(put 'beginning-of-folder 'error-conditions '(beginning-of-folder error))
  41409. +(put 'beginning-of-folder 'error-message "Beginning of folder")
  41410. +(put 'end-of-folder 'error-conditions '(end-of-folder error))
  41411. +(put 'end-of-folder 'error-message "End of folder")
  41412. +
  41413. +(defun vm-check-count (count)
  41414. +  (if (>= count 0)
  41415. +      (if (< (length vm-message-pointer) count)
  41416. +      (signal 'end-of-folder nil))
  41417. +    (if (< (1+ (- (length vm-message-list) (length vm-message-pointer)))
  41418. +       (vm-abs count))
  41419. +    (signal 'beginning-of-folder nil))))
  41420. +
  41421. +(defun vm-move-message-pointer (direction)
  41422. +  (let ((mp vm-message-pointer))
  41423. +    (if (eq direction 'forward)
  41424. +    (progn
  41425. +      (setq mp (cdr mp))
  41426. +      (if (null mp)
  41427. +          (if vm-circular-folders
  41428. +          (setq mp vm-message-list)
  41429. +        (signal 'end-of-folder nil))))
  41430. +      (if (eq mp vm-message-list)
  41431. +      (if vm-circular-folders
  41432. +          (setq mp (vm-last vm-message-list))
  41433. +        (signal 'beginning-of-folder nil))
  41434. +    (setq mp (let ((curr vm-message-list))
  41435. +           (while (not (eq (cdr curr) mp))
  41436. +             (setq curr (cdr curr)))
  41437. +           curr))))
  41438. +    (setq vm-message-pointer mp)))
  41439. +
  41440. +(defun vm-should-skip-message (mp)
  41441. +  (or (and vm-skip-deleted-messages
  41442. +       (vm-deleted-flag (car mp)))
  41443. +      (and vm-skip-read-messages
  41444. +       (or (vm-deleted-flag (car mp))
  41445. +           (not (or (vm-new-flag (car mp))
  41446. +            (vm-unread-flag (car mp))))))))
  41447. +
  41448. +(defun vm-next-message (&optional count retry)
  41449. +  "Go forward one message and preview it.
  41450. +With prefix arg COUNT, go forward COUNT messages.  A negative COUNT
  41451. +means go backward.  If the absolute value of COUNT > 1 the values of the
  41452. +variables vm-skip-deleted-messages and vm-skip-read-messages are
  41453. +ignored."
  41454. +  (interactive "p\np")
  41455. +  (if vm-mail-buffer
  41456. +      (set-buffer vm-mail-buffer))
  41457. +  (vm-error-if-folder-empty)
  41458. +  (or count (setq count 1))
  41459. +  (let ((oldmp vm-message-pointer)
  41460. +    (error)
  41461. +    (direction (if (> count 0) 'forward 'backward))
  41462. +    (count (vm-abs count)))
  41463. +    (cond
  41464. +     ((null vm-message-pointer)
  41465. +      (setq vm-message-pointer vm-message-list))
  41466. +     ((/= count 1)
  41467. +      (condition-case ()
  41468. +      (while (not (zerop count))
  41469. +        (vm-move-message-pointer direction)
  41470. +        (vm-decrement count))
  41471. +    (beginning-of-folder (setq error 'beginning-of-folder))
  41472. +    (end-of-folder (setq error 'end-of-folder))))
  41473. +     (t
  41474. +      (condition-case ()
  41475. +      (progn
  41476. +        (vm-move-message-pointer direction)
  41477. +        (while (and (not (eq oldmp vm-message-pointer))
  41478. +            (vm-should-skip-message vm-message-pointer))
  41479. +          (vm-move-message-pointer direction))
  41480. +        ;; Retry the move if we've gone a complete circle and we should
  41481. +        ;; skip the current message and there are other messages.
  41482. +        (and (eq vm-message-pointer oldmp) retry (cdr vm-message-list)
  41483. +         (vm-should-skip-message vm-message-pointer)
  41484. +         (vm-move-message-pointer direction)))
  41485. +    (beginning-of-folder
  41486. +     (setq vm-message-pointer oldmp)
  41487. +     (if retry
  41488. +         (vm-move-message-pointer direction)
  41489. +       (setq error 'beginning-of-folder)))
  41490. +    (end-of-folder
  41491. +     (setq vm-message-pointer oldmp)
  41492. +     (if retry
  41493. +         (vm-move-message-pointer direction)
  41494. +       (setq error 'end-of-folder))))))
  41495. +    (if (not (eq vm-message-pointer oldmp))
  41496. +    (progn
  41497. +      (setq vm-last-message-pointer oldmp)
  41498. +      (vm-set-summary-pointer (car vm-message-pointer))
  41499. +      (vm-preview-current-message)))
  41500. +    (if error
  41501. +    (signal error nil))))
  41502. +
  41503. +(defun vm-previous-message (&optional count retry)
  41504. +  "Go back one message and preview it.
  41505. +With prefix arg COUNT, go backward COUNT messages.  A negative COUNT
  41506. +means go forward.  If the absolute value of COUNT > 1 the values of the
  41507. +variables vm-skip-deleted-messages and vm-skip-read-messages are
  41508. +ignored."
  41509. +  (interactive "p\np")
  41510. +  (or count (setq count 1))
  41511. +  (vm-next-message (- count) retry))
  41512. +
  41513. +(defun vm-Next-message (&optional count)
  41514. +  "Like vm-next-message but will not skip messages."
  41515. +  (interactive "p")
  41516. +  (let (vm-skip-deleted-messages vm-skip-read-messages)
  41517. +    (vm-next-message count)))
  41518. +
  41519. +(defun vm-Previous-message (&optional count)
  41520. +  "Like vm-previous-message but will not skip messages."
  41521. +  (interactive "p")
  41522. +  (let (vm-skip-deleted-messages vm-skip-read-messages)
  41523. +    (vm-previous-message count)))
  41524. +
  41525. +(defun vm-next-unread-message ()
  41526. +  "Move forward to the nearest new or unread message, if there is one."
  41527. +  (interactive)
  41528. +  (if vm-mail-buffer
  41529. +      (set-buffer vm-mail-buffer))
  41530. +  (condition-case ()
  41531. +      (let ((vm-skip-read-messages t)
  41532. +        (oldmp vm-message-pointer))
  41533. +    (vm-next-message)
  41534. +    ;; in case vm-circular-folder is non-nil
  41535. +    (and (eq vm-message-pointer oldmp) (signal 'end-of-folder nil)))
  41536. +    (end-of-folder (error "No next unread message"))))
  41537. +
  41538. +(defun vm-previous-unread-message ()
  41539. +  "Move backward to the nearest new or unread message, if there is one."
  41540. +  (interactive)
  41541. +  (if vm-mail-buffer
  41542. +      (set-buffer vm-mail-buffer))
  41543. +  (condition-case ()
  41544. +      (let ((vm-skip-read-messages t)
  41545. +        (oldmp vm-message-pointer))
  41546. +    (vm-previous-message)
  41547. +    ;; in case vm-circular-folder is non-nil
  41548. +    (and (eq vm-message-pointer oldmp) (signal 'beginning-of-folder nil)))
  41549. +    (beginning-of-folder (error "No previous unread message"))))
  41550. +
  41551. +(defun vm-preview-current-message ()
  41552. +  (setq vm-system-state 'previewing)
  41553. +  (widen)
  41554. +  (narrow-to-region
  41555. +   (vm-vheaders-of (car vm-message-pointer))
  41556. +   (if vm-preview-lines
  41557. +       (min
  41558. +    (vm-text-end-of (car vm-message-pointer))
  41559. +    (save-excursion
  41560. +      (goto-char (vm-text-of (car vm-message-pointer)))
  41561. +      (forward-line (if (natnump vm-preview-lines) vm-preview-lines 0))
  41562. +      (point)))
  41563. +     (vm-text-of (car vm-message-pointer))))
  41564. +  (let ((w (get-buffer-window (current-buffer))))
  41565. +    (and w (progn (set-window-start w (point-min))
  41566. +          (set-window-point w (point-max))))
  41567. +    (and w vm-highlighted-header-regexp
  41568. +     (progn
  41569. +       (save-restriction
  41570. +         (narrow-to-region (point) (point))
  41571. +         (sit-for 0))
  41572. +       (goto-char (point-min))
  41573. +       (while (re-search-forward vm-highlighted-header-regexp nil t)
  41574. +         (save-restriction
  41575. +           (goto-char (match-beginning 0))
  41576. +           (looking-at vm-generic-header-regexp)
  41577. +           (goto-char (match-beginning 1))
  41578. +           (narrow-to-region (point-min) (point))
  41579. +           (sit-for 0)
  41580. +           (setq inverse-video t)
  41581. +           (widen)
  41582. +           (narrow-to-region (point-min) (match-end 1))
  41583. +           (sit-for 0)
  41584. +           (setq inverse-video nil)
  41585. +           (goto-char (match-end 0)))))))
  41586. +  (goto-char (point-max))
  41587. +  ;; De Morgan's Theorems could clear away most of the following negations,
  41588. +  ;; but the resulting code would be horribly obfuscated.
  41589. +  (if (or (null vm-preview-lines)
  41590. +      (and (not vm-preview-read-messages)
  41591. +           (not (vm-new-flag (car vm-message-pointer)))
  41592. +           (not (vm-unread-flag (car vm-message-pointer)))))
  41593. +      ;; Don't sit and howl unless the mail buffer is visible.
  41594. +      (vm-show-current-message (get-buffer-window (current-buffer)))
  41595. +    (vm-update-summary-and-mode-line)))
  41596. +
  41597. +(defun vm-show-current-message (&optional sit-and-howl)
  41598. +  (setq vm-system-state 'reading)
  41599. +  (save-excursion
  41600. +    (goto-char (point-min))
  41601. +    (widen)
  41602. +    (narrow-to-region (point) (vm-text-end-of (car vm-message-pointer))))
  41603. +  (cond ((vm-new-flag (car vm-message-pointer))
  41604. +     (vm-set-new-flag (car vm-message-pointer) nil))
  41605. +    ((vm-unread-flag (car vm-message-pointer))
  41606. +     (vm-set-unread-flag (car vm-message-pointer) nil)))
  41607. +  (vm-update-summary-and-mode-line)
  41608. +  (cond (sit-and-howl
  41609. +     (sit-for 0)
  41610. +     (vm-howl-if-eom-visible))))
  41611. +
  41612. +(defun vm-expose-hidden-headers ()
  41613. +  "Expose headers omitted from vm-visible-headers."
  41614. +  (interactive)
  41615. +  (vm-follow-summary-cursor)
  41616. +  (if vm-mail-buffer
  41617. +      (set-buffer vm-mail-buffer))
  41618. +  (vm-error-if-folder-empty)
  41619. +  (save-excursion
  41620. +    (goto-char (point-max))
  41621. +    (widen)
  41622. +    (narrow-to-region (point) (vm-start-of (car vm-message-pointer)))
  41623. +    (let (w)
  41624. +      (and (setq w (get-buffer-window (current-buffer)))
  41625. +       (= (window-start w) (vm-vheaders-of (car vm-message-pointer)))
  41626. +       (set-window-start w (vm-start-of (car vm-message-pointer)))))))
  41627. +
  41628. +(defun vm-howl-if-eom-visible ()
  41629. +  (let ((w (get-buffer-window (current-buffer))))
  41630. +    (and w (pos-visible-in-window-p (point-max) w)
  41631. +     (message "End of message %s from %s"
  41632. +          (vm-number-of (car vm-message-pointer))
  41633. +          (vm-su-full-name (car vm-message-pointer))))))
  41634. +
  41635. +;; message-changed is an old-fashoined local variable.
  41636. +(defun vm-scroll-forward (&optional arg message-changed)
  41637. +  "Scroll forward a screenful of text.
  41638. +If the current message is being previewed, the message body is revealed.
  41639. +If at the end of the current message, move to the next message."
  41640. +  (interactive "P")
  41641. +  (setq message-changed (vm-follow-summary-cursor))
  41642. +  (if vm-mail-buffer
  41643. +      (set-buffer vm-mail-buffer))
  41644. +  (vm-error-if-folder-empty)
  41645. +  (if (null (get-buffer-window (current-buffer)))
  41646. +      (progn
  41647. +    (if vm-mutable-windows
  41648. +        (let ((pop-up-windows
  41649. +           (and pop-up-windows (eq vm-mutable-windows t))))
  41650. +          (display-buffer (current-buffer)))
  41651. +      (switch-to-buffer (current-buffer)))
  41652. +    (if (and vm-summary-buffer (get-buffer-window vm-summary-buffer)
  41653. +         (eq vm-mutable-windows t))
  41654. +        (vm-proportion-windows))
  41655. +    (if (eq vm-system-state 'previewing)
  41656. +        (vm-show-current-message t)
  41657. +      (vm-howl-if-eom-visible)))
  41658. +    (if (eq vm-system-state 'previewing)
  41659. +    (vm-show-current-message t)
  41660. +      (if message-changed
  41661. +      (vm-howl-if-eom-visible)
  41662. +    (let ((w (get-buffer-window (current-buffer)))
  41663. +          (old-w (selected-window)))
  41664. +      (unwind-protect
  41665. +          (progn
  41666. +        (select-window w)
  41667. +        (if (not (eq (condition-case () (scroll-up arg)
  41668. +                   (end-of-buffer (if (null arg)
  41669. +                          (progn
  41670. +                            (vm-next-message)
  41671. +                            'next-message))))
  41672. +                 'next-message))
  41673. +            (vm-howl-if-eom-visible)))
  41674. +        (select-window old-w)))))))
  41675. +
  41676. +(defun vm-scroll-backward (&optional arg)
  41677. +  "Scroll backward a screenful of text."
  41678. +  (interactive "P")
  41679. +  (vm-follow-summary-cursor)
  41680. +  (if vm-mail-buffer
  41681. +      (set-buffer vm-mail-buffer))
  41682. +  (vm-error-if-folder-empty)
  41683. +  (if (null (get-buffer-window (current-buffer)))
  41684. +      (progn
  41685. +    (if vm-mutable-windows
  41686. +        (let ((pop-up-windows
  41687. +           (and pop-up-windows (eq vm-mutable-windows t))))
  41688. +          (display-buffer (current-buffer)))
  41689. +      (switch-to-buffer (current-buffer)))
  41690. +    (if (and vm-summary-buffer (get-buffer-window vm-summary-buffer)
  41691. +         (eq vm-mutable-windows t))
  41692. +        (vm-proportion-windows)))
  41693. +    (let ((w (get-buffer-window (current-buffer)))
  41694. +      (old-w (selected-window)))
  41695. +      (unwind-protect
  41696. +      (progn
  41697. +        (select-window w)
  41698. +        (scroll-down arg))
  41699. +    (select-window old-w)))))
  41700. +
  41701. +(defun vm-end-of-message ()
  41702. +  "Displays the end of the current message, exposing and marking it read
  41703. +as necessary."
  41704. +  (interactive)
  41705. +  (vm-follow-summary-cursor)
  41706. +  (if vm-mail-buffer
  41707. +      (set-buffer vm-mail-buffer))
  41708. +  (vm-error-if-folder-empty)
  41709. +  (if (eq vm-system-state 'previewing)
  41710. +      (vm-show-current-message))
  41711. +  (goto-char (point-max))
  41712. +  (vm-howl-if-eom-visible))
  41713. +
  41714. +(defun vm-quit-no-change ()
  41715. +  "Exit VM without saving changes made to the folder."
  41716. +  (interactive)
  41717. +  (vm-quit t))
  41718. +
  41719. +(defun vm-quit (&optional no-change)
  41720. +  "Quit VM, saving changes and expunging messages marked for deletion.
  41721. +New messages are changed to unread."
  41722. +  (interactive)
  41723. +  (if vm-mail-buffer
  41724. +      (set-buffer vm-mail-buffer))
  41725. +  (and no-change (buffer-modified-p)
  41726. +       (not (zerop vm-messages-not-on-disk))
  41727. +       ;; Folder may have been saved with C-x C-s and atriutes may have
  41728. +       ;; been changed after that; in that case vm-messages-not-on-disk
  41729. +       ;; would not have been zeroed.  However, all modification flag
  41730. +       ;; undos are cleared if VM actually modifies the folder buffer
  41731. +       ;; (as opposed to the folder's attributes), so this can be used
  41732. +       ;; to verify that there are indeed unsaved messages.
  41733. +       (null (assq 'set-buffer-modified-p vm-undo-record-list))
  41734. +       (not (y-or-n-p
  41735. +         (format "%d message%s have not been saved to disk, exit anyway? "
  41736. +             vm-messages-not-on-disk
  41737. +             (if (= 1 vm-messages-not-on-disk) "" "s"))))
  41738. +       (error "Aborted"))
  41739. +  (let ((inhibit-quit t))
  41740. +    (if (not no-change)
  41741. +    (vm-change-all-new-to-unread))
  41742. +    (if (and (buffer-modified-p) (not no-change))
  41743. +    (vm-save-folder t))
  41744. +    (let ((summary-buffer vm-summary-buffer)
  41745. +      (mail-buffer (current-buffer)))
  41746. +      (if summary-buffer
  41747. +      (progn
  41748. +        (setq overlay-arrow-position nil)
  41749. +        (if (eq vm-mutable-windows t)
  41750. +        (delete-windows-on vm-summary-buffer))
  41751. +        (kill-buffer summary-buffer)))
  41752. +      (set-buffer mail-buffer)
  41753. +      (set-buffer-modified-p nil)
  41754. +      (kill-buffer (current-buffer)))
  41755. +    ;; Make sure we are now dealing with the buffer and window that
  41756. +    ;; would be selected were we to give up control now.
  41757. +    (set-buffer (window-buffer (selected-window)))
  41758. +    ;; If we land on a buffer that VM knows about
  41759. +    ;; do some nice things for the user, if we're allowed.
  41760. +    (cond ((and (eq major-mode 'vm-mode) (eq vm-mutable-windows t))
  41761. +       (if (null vm-startup-with-summary)
  41762. +           (delete-other-windows)
  41763. +         (condition-case () (vm-summarize t) (error nil))
  41764. +         (and (not (eq major-mode 'vm-summary-mode))
  41765. +          (eq vm-startup-with-summary t)
  41766. +          (not (one-window-p t))
  41767. +          vm-summary-buffer
  41768. +          (get-buffer-window vm-summary-buffer)
  41769. +          (progn
  41770. +            (select-window (get-buffer-window vm-summary-buffer))
  41771. +            (delete-other-windows)))))
  41772. +      ((eq major-mode 'vm-summary-mode)
  41773. +       (cond ((eq vm-startup-with-summary nil)
  41774. +          (switch-to-buffer vm-mail-buffer)
  41775. +          (and (not (one-window-p t)) (eq vm-mutable-windows t)
  41776. +               (delete-other-windows)))
  41777. +         ((not (eq vm-startup-with-summary t))
  41778. +          (let ((pop-up-windows
  41779. +             (and pop-up-windows (eq vm-mutable-windows t))))
  41780. +            (display-buffer vm-mail-buffer))
  41781. +          (if (eq vm-mutable-windows t)
  41782. +              (if (eq major-mode 'vm-summary-mode)
  41783. +              (vm-proportion-windows)
  41784. +            (switch-to-buffer vm-summary-buffer))))
  41785. +         ((eq vm-mutable-windows t)
  41786. +          (delete-other-windows)))))))
  41787. +
  41788. +;; This allows C-x C-s to do the right thing for VM mail buffers.
  41789. +;; Note that deleted messages are not expunged.
  41790. +(defun vm-write-file-hook ()
  41791. +  (if (not (eq major-mode 'vm-mode))
  41792. +      ()
  41793. +    (if vm-inhibit-write-file-hook
  41794. +    ()
  41795. +      ;; The vm-save-restriction isn't really necessary here (since
  41796. +      ;; vm-stuff-atributes cleans up after itself) but should remain
  41797. +      ;; as a safeguard against the time when other stuff is added here.
  41798. +      (vm-save-restriction
  41799. +       (let ((inhibit-quit t)
  41800. +         (buffer-read-only))
  41801. +     (vm-stuff-attributes)
  41802. +     nil )))))
  41803. +
  41804. +(defun vm-save-folder (&optional quitting)
  41805. +  "Save current folder to disk."
  41806. +  (interactive)
  41807. +  (if vm-mail-buffer
  41808. +      (set-buffer vm-mail-buffer))
  41809. +  (if (buffer-modified-p)
  41810. +      (let ((inhibit-quit t))
  41811. +    ;; may get error if folder is emptied by the expunge.
  41812. +    (condition-case ()
  41813. +        (vm-expunge-folder quitting t)
  41814. +      (error nil))
  41815. +    (vm-stuff-attributes)
  41816. +    (let ((vm-inhibit-write-file-hook t))
  41817. +      (save-buffer))
  41818. +    (setq vm-messages-not-on-disk 0)
  41819. +    (and (zerop (buffer-size)) vm-delete-empty-folders
  41820. +         (condition-case ()
  41821. +         (progn
  41822. +           (delete-file buffer-file-name)
  41823. +           (message "%s removed" buffer-file-name))
  41824. +           (error nil)))
  41825. +    (if (not quitting)
  41826. +        (if vm-message-pointer
  41827. +        (vm-update-summary-and-mode-line)
  41828. +          (vm-next-message))))))
  41829. +
  41830. +(defun vm-visit-folder (folder)
  41831. +  "Visit a mail file.
  41832. +VM will parse and present its messages to you in the usual way."
  41833. +  (interactive
  41834. +   (list (read-file-name
  41835. +      "Visit folder: " (if vm-folder-directory
  41836. +                   (expand-file-name vm-folder-directory)
  41837. +                 default-directory) nil t)))
  41838. +  (if vm-mail-buffer
  41839. +      (set-buffer vm-mail-buffer))
  41840. +  (vm folder))
  41841. +
  41842. +(defun vm-help ()
  41843. +  "Display VM command and variable information."
  41844. +  (interactive)
  41845. +  (if (and vm-mail-buffer (get-buffer-window vm-mail-buffer))
  41846. +      (set-buffer vm-mail-buffer))
  41847. +  (let ((pop-up-windows (and pop-up-windows (eq vm-mutable-windows t))))
  41848. +    (cond
  41849. +     ((eq last-command 'vm-help)
  41850. +      (describe-mode))
  41851. +     ((eq vm-system-state 'previewing)
  41852. +      (message "Type SPC to read message, n previews next message   (? gives more help)"))
  41853. +     ((eq vm-system-state 'reading)
  41854. +      (message "SPC and b scroll, (d)elete, (s)ave, (n)ext, (r)eply   (? gives more help)"))
  41855. +     (t (describe-mode)))))
  41856. +
  41857. +(defun vm-move-mail (source destination)
  41858. +  (call-process "movemail" nil nil nil (expand-file-name source)
  41859. +        (expand-file-name destination)))
  41860. +
  41861. +(defun vm-gobble-crash-box ()
  41862. +  (save-excursion
  41863. +    (vm-save-restriction
  41864. +     (widen)
  41865. +     (let ((opoint-max (point-max)) crash-buf buffer-read-only
  41866. +       (old-buffer-modified-p (buffer-modified-p))
  41867. +       ;; crash box could contain a letter bomb...
  41868. +       ;; force user notification of file variables.
  41869. +       (inhibit-local-variables t))
  41870. +       (setq crash-buf (find-file-noselect vm-crash-box))
  41871. +       (goto-char (point-max))
  41872. +       (insert-buffer-substring crash-buf
  41873. +                1 (1+ (save-excursion
  41874. +                    (set-buffer crash-buf)
  41875. +                    (widen)
  41876. +                    (buffer-size))))
  41877. +       (write-region opoint-max (point-max) buffer-file-name t t)
  41878. +       (backup-buffer)
  41879. +       ;; make sure primary inbox is private.  384 = octal 600
  41880. +       (condition-case () (set-file-modes buffer-file-name 384) (error nil))
  41881. +       (set-buffer-modified-p old-buffer-modified-p)
  41882. +       (kill-buffer crash-buf)
  41883. +       (condition-case () (delete-file vm-crash-box)
  41884. +     (error nil))))))
  41885. +
  41886. +(defun vm-get-spooled-mail ()
  41887. +  (let ((spool-files (or vm-spool-files
  41888. +             (list (concat vm-spool-directory (user-login-name)))))
  41889. +    (inhibit-quit t)
  41890. +    (got-mail))
  41891. +    (if (file-exists-p vm-crash-box)
  41892. +    (progn
  41893. +      (message "Recovering messages from crash box...")
  41894. +      (vm-gobble-crash-box)
  41895. +      (message "Recovering messages from crash box... done")
  41896. +      (setq got-mail t)))
  41897. +    (while spool-files
  41898. +      (if (file-readable-p (car spool-files))
  41899. +      (progn
  41900. +        (message "Getting new mail from %s..." (car spool-files))
  41901. +        (vm-move-mail (car spool-files) vm-crash-box)
  41902. +        (vm-gobble-crash-box)
  41903. +        (message "Getting new mail from %s... done" (car spool-files))
  41904. +        (setq got-mail t)))
  41905. +      (setq spool-files (cdr spool-files)))
  41906. +    got-mail ))
  41907. +
  41908. +(defun vm-get-new-mail ()
  41909. +  "Move any new mail that has arrived in the system mailbox into the
  41910. +primary inbox.  New mail is appended to the disk and buffer copies of
  41911. +the primary inbox.
  41912. +
  41913. +This command is valid only from the primary inbox buffer."
  41914. +  (interactive)
  41915. +  (if vm-mail-buffer
  41916. +      (set-buffer vm-mail-buffer))
  41917. +  (if (not vm-primary-inbox-p)
  41918. +      (error "This is not your primary inbox."))
  41919. +  (if (not (and (vm-get-spooled-mail) (vm-assimilate-new-messages)))
  41920. +      (message "No new mail.")
  41921. +    (vm-emit-totals-blurb)
  41922. +    ;; If there's a current grouping, then the summary has already
  41923. +    ;; been redone in vm-group-messages.
  41924. +    (if (and vm-summary-buffer (not vm-current-grouping))
  41925. +    (progn
  41926. +      (vm-do-summary)
  41927. +      (vm-emit-totals-blurb)))
  41928. +    (vm-thoughtfully-select-message)
  41929. +    (if vm-summary-buffer
  41930. +    (vm-set-summary-pointer (car vm-message-pointer)))))
  41931. +
  41932. +(defun vm-emit-totals-blurb ()
  41933. +  (message "%d message%s, %d new, %d unread."
  41934. +       vm-total-count (if (= vm-total-count 1) "" "s")
  41935. +       vm-new-count vm-unread-count))
  41936. +
  41937. +(defun vm-find-first-unread-message ()
  41938. +  (let (mp unread-mp)
  41939. +    (setq mp vm-message-list)
  41940. +    (while mp
  41941. +      (if (and (vm-new-flag (car mp)) (not (vm-deleted-flag (car mp))))
  41942. +      (setq unread-mp mp mp nil)
  41943. +    (setq mp (cdr mp))))
  41944. +    (if (null unread-mp)
  41945. +    (progn
  41946. +      (setq mp vm-message-list)
  41947. +      (while mp
  41948. +        (if (and (vm-unread-flag (car mp))
  41949. +             (not (vm-deleted-flag (car mp))))
  41950. +        (setq unread-mp mp mp nil)
  41951. +          (setq mp (cdr mp))))))
  41952. +    unread-mp))
  41953. +
  41954. +;; returns non-nil if there were any new messages
  41955. +(defun vm-assimilate-new-messages ()
  41956. +  (let ((tail-cons (vm-last vm-message-list))
  41957. +    (new-messages-p (null vm-message-pointer)))
  41958. +    (vm-save-restriction
  41959. +     (widen)
  41960. +     (vm-build-message-list)
  41961. +     (vm-read-attributes)
  41962. +     (setq new-messages-p (or new-messages-p (cdr tail-cons)))
  41963. +     (if (and vm-current-grouping new-messages-p)
  41964. +     (condition-case data
  41965. +         (vm-group-messages vm-current-grouping)
  41966. +       ;; presumably an unsupported grouping
  41967. +       (error (message (car (cdr data)))
  41968. +          (sleep-for 2)
  41969. +          (vm-number-messages)))
  41970. +       (vm-number-messages)))
  41971. +    new-messages-p ))
  41972. +
  41973. +(defun vm-thoughtfully-select-message ()
  41974. +  ;; This is called after new messages have been assimilated in a folder.
  41975. +  ;; We move to a new message only if the user is not "reading" the current
  41976. +  ;; message, or if there is no current message.
  41977. +  ;;
  41978. +  ;; Most of the complications in the `if' test below are due to the presence
  41979. +  ;; of the variables vm-preview-lines and vm-preview-read-messages.
  41980. +  ;; These can cause previewing never to be done, or not be done for
  41981. +  ;; specific messages.  In these cases VM assumes a user is "reading"
  41982. +  ;; an exposed message if the top of the message is not visible in the
  41983. +  ;; folder buffer window.
  41984. +  (if (or (null vm-message-pointer)
  41985. +      (not (eq vm-system-state 'reading))
  41986. +      (and (or (null vm-preview-lines)
  41987. +           (and (not vm-preview-read-messages)
  41988. +            (not (vm-new-flag (car vm-message-pointer)))
  41989. +            (not (vm-unread-flag (car vm-message-pointer)))))
  41990. +           (let ((w (get-buffer-window (current-buffer))))
  41991. +         (and w (pos-visible-in-window-p (point-min) w)))))
  41992. +      (let ((mp (vm-find-first-unread-message)))
  41993. +    (if mp
  41994. +        (progn
  41995. +          (if vm-message-pointer
  41996. +          (setq vm-last-message-pointer vm-message-pointer
  41997. +            vm-message-pointer mp)
  41998. +        (setq vm-message-pointer mp))
  41999. +          (vm-preview-current-message))
  42000. +      (if (null vm-message-pointer)
  42001. +          (vm-Next-message))))))
  42002. +
  42003. +(defun vm-display-startup-message ()
  42004. +  (if (sit-for 5)
  42005. +      (let ((lines
  42006. +         '(
  42007. +"You may give out copies of VM.  Type \\[vm-show-copying-restrictions] to see the conditions"
  42008. +"VM comes with ABSOLUTELY NO WARRANTY; type \\[vm-show-no-warranty] for full details"
  42009. +           )))
  42010. +    (message "VM %s, Copyright (C) 1989 Kyle E. Jones; type ? for help"
  42011. +         vm-version)
  42012. +    (while (and (sit-for 4) lines)
  42013. +      (message (substitute-command-keys (car lines)))
  42014. +      (setq lines (cdr lines)))))
  42015. +  (message ""))
  42016. +
  42017. +(defun vm (&optional folder)
  42018. +  "Read mail under Emacs.
  42019. +Optional first arg FOLDER specifies the folder to visit.  It defaults
  42020. +to the value of vm-primary-inbox.  The folder buffer is put into VM
  42021. +mode, a major mode for reading mail.
  42022. +
  42023. +Visiting the primary inbox causes any contents of the system mailbox to
  42024. +be moved and appended to the resulting buffer.
  42025. +
  42026. +All the messages can be read by repeatedly pressing SPC.  Messages are
  42027. +marked for deletion with `d', and saved to a folder with `s'.  Quitting
  42028. +VM with `q' expunges messages marked for deletion and saves the buffered
  42029. +folder to disk.
  42030. +
  42031. +See the documentation for vm-mode for more information."
  42032. +  (interactive)
  42033. +  (if vm-session-beginning
  42034. +      (progn
  42035. +    (random t)
  42036. +    (load "~/.vm" t t t)
  42037. +    (load "vm-undo")
  42038. +    (load "vm-summary")))
  42039. +  (if vm-mail-buffer
  42040. +      (set-buffer vm-mail-buffer))
  42041. +  ;; set inhibit-local-varaibles non-nil to protect
  42042. +  ;; against letter bombs.
  42043. +  (let ((inhibit-local-variables t))
  42044. +    (setq mail-buffer (find-file-noselect
  42045. +               (or folder (expand-file-name vm-primary-inbox))))
  42046. +    (set-buffer mail-buffer)
  42047. +    (or (buffer-modified-p) (setq vm-messages-not-on-disk 0))
  42048. +    (let ((first-time (not (eq major-mode 'vm-mode)))
  42049. +      (inhibit-quit t))
  42050. +      (if first-time
  42051. +      (progn
  42052. +        (buffer-flush-undo (current-buffer))
  42053. +        (abbrev-mode 0)
  42054. +        (auto-fill-mode 0)
  42055. +        (vm-mode)))
  42056. +      (if (or (and vm-primary-inbox-p (vm-get-spooled-mail)) first-time)
  42057. +      (progn
  42058. +        (vm-assimilate-new-messages)
  42059. +        ;; Can't allow a folder-empty error here because execution
  42060. +        ;; would abort before the session startup code below.
  42061. +        (if (null vm-message-list)
  42062. +        (message "Folder is empty.")
  42063. +          (vm-emit-totals-blurb)
  42064. +          ;; If there's a current grouping, then the summary has already
  42065. +          ;; been redone in vm-group-messages.
  42066. +          (if (and vm-summary-buffer (not vm-current-grouping))
  42067. +          (progn
  42068. +            (vm-do-summary)
  42069. +            ;; The summary update messages erased this info
  42070. +            ;; from the echo area.
  42071. +            (vm-emit-totals-blurb)))
  42072. +          (save-window-excursion
  42073. +        ;; Make sure the mail buffer is not visible.  This is
  42074. +        ;; needed to insure that if vm-preview-lines is nil, the
  42075. +        ;; mail window won't be momentarily displayed and then
  42076. +        ;; disappear behind the summary window, if
  42077. +        ;; vm-startup-with-summary is t.
  42078. +        (if (get-buffer-window mail-buffer)
  42079. +            (if (one-window-p)
  42080. +            (switch-to-buffer (other-buffer))
  42081. +              (delete-windows-on mail-buffer)))
  42082. +        (set-buffer mail-buffer)
  42083. +        (vm-thoughtfully-select-message))
  42084. +          (if vm-summary-buffer
  42085. +          (vm-set-summary-pointer (car vm-message-pointer))))))
  42086. +      (switch-to-buffer mail-buffer)
  42087. +      (if (and vm-message-list vm-startup-with-summary)
  42088. +      (progn
  42089. +        (vm-summarize t)
  42090. +        (vm-emit-totals-blurb)
  42091. +        (and (eq vm-startup-with-summary t)
  42092. +         (eq vm-mutable-windows t)
  42093. +         (if (eq major-mode 'vm-summary-mode)
  42094. +             (delete-other-windows)
  42095. +           (select-window (get-buffer-window vm-summary-buffer))
  42096. +           (delete-other-windows))))
  42097. +    (if (eq vm-mutable-windows t)
  42098. +        (delete-other-windows)))
  42099. +      (if vm-session-beginning
  42100. +      (progn
  42101. +        (setq vm-session-beginning nil)
  42102. +        (or vm-inhibit-startup-message folder
  42103. +        (vm-display-startup-message))
  42104. +        (if (and vm-message-list (not (input-pending-p)))
  42105. +        (vm-emit-totals-blurb)))))))
  42106. +
  42107. +(defun vm-mode ()
  42108. +  "Major mode for reading mail.
  42109. +
  42110. +Commands:
  42111. +   h - summarize folder contents
  42112. +
  42113. +   n - go to next message
  42114. +   p - go to previous message
  42115. +   N - like `n' but ignores skip-variable settings
  42116. +   P - like `p' but ignores skip-variable settings
  42117. + M-n - go to next unread message
  42118. + M-p - go to previous unread message
  42119. + RET - go to numbered message (uses prefix arg or prompts in minibuffer)
  42120. + TAB - go to last message seen
  42121. + M-s - incremental search through the folder
  42122. +
  42123. +   t - display hidden headers
  42124. + SPC - scroll forward a page (if at end of message, then display next message)
  42125. +   b - scroll backward a page
  42126. +   > - go to end of current message
  42127. +
  42128. +   d - delete current message (mark as deleted)
  42129. +   u - undelete
  42130. +   k - mark for deletion all messages with same subject as the current message
  42131. +
  42132. +   r - reply (only to the sender of the message)
  42133. +   R - reply with included text for current message
  42134. +   f - followup (reply to all recipients of message)
  42135. +   F - followup with included text from the current message
  42136. +   z - forward the current message
  42137. +   m - send a message
  42138. +
  42139. +   @ - digestify and mail entire folder contents (the folder is not modified)
  42140. +   * - burst a digest into indivdual messages, and append and assimilate these
  42141. +       message into the current folder.
  42142. +
  42143. +   G - group messages according to some criteria
  42144. +
  42145. +   g - get any new mail that has arrived in the system mailbox
  42146. +       (new mail is appended to the disk and buffer copies of the
  42147. +       primary inbox.)
  42148. +   v - visit another mail folder
  42149. +
  42150. +   s - save current message in a folder (appends if folder already exists)
  42151. +   w - write current message to a file without its headers (appends if exists)
  42152. +   S - save entire folder to disk, expunging deleted messages
  42153. +   A - save unfiled messages to their vm-auto-folder-alist specified folders
  42154. +   # - expunge deleted messages (without saving folder)
  42155. +   q - quit VM, deleted messages are expunged, folder saved to disk
  42156. +   x - exit VM with no change to the folder
  42157. +
  42158. + C-_ - undo, special undo that retracts the most recent
  42159. +             changes in message attributes.  Expunges and saves
  42160. +             cannot be undone.
  42161. +
  42162. +   ? - help
  42163. +
  42164. +   ! - run a shell command
  42165. +   | - run a shell command with the current message as input
  42166. +
  42167. + M-c - view conditions under which youmay redistribute of VM
  42168. + M-w - view the details of VM's lack of a warranty
  42169. +
  42170. +Variables:
  42171. +   vm-auto-folder-alist
  42172. +   vm-berkeley-mail-compatibility
  42173. +   vm-circular-folders
  42174. +   vm-confirm-new-folders
  42175. +   vm-crash-box
  42176. +   vm-delete-after-saving
  42177. +   vm-delete-empty-folders
  42178. +   vm-folder-directory
  42179. +   vm-folder-type
  42180. +   vm-follow-summary-cursor
  42181. +   vm-forwarding-subject-format
  42182. +   vm-gargle-uucp
  42183. +   vm-group-by
  42184. +   vm-highlighted-header-regexp
  42185. +   vm-in-reply-to-format
  42186. +   vm-included-text-attribution-format
  42187. +   vm-included-text-prefix
  42188. +   vm-inhibit-startup-message
  42189. +   vm-mail-window-percentage
  42190. +   vm-mode-hooks
  42191. +   vm-move-after-deleting
  42192. +   vm-mutable-windows
  42193. +   vm-preview-lines
  42194. +   vm-preview-read-messages
  42195. +   vm-primary-inbox
  42196. +   vm-rfc934-forwarding
  42197. +   vm-search-using-regexps
  42198. +   vm-skip-deleted-messages
  42199. +   vm-skip-read-messages
  42200. +   vm-spool-files
  42201. +   vm-startup-with-summary
  42202. +   vm-strip-reply-headers
  42203. +   vm-summary-format
  42204. +   vm-visible-headers
  42205. +   vm-visit-when-saving"
  42206. +  (widen)
  42207. +  (make-local-variable 'require-final-newline)
  42208. +  (make-local-variable 'file-precious-flag)
  42209. +  (setq
  42210. +   buffer-read-only nil
  42211. +   case-fold-search t
  42212. +   file-precious-flag t
  42213. +   major-mode 'vm-mode
  42214. +   mode-line-format
  42215. +   '("" mode-line-modified mode-line-buffer-identification "   "
  42216. +     global-mode-string
  42217. +     (vm-message-list
  42218. +      ("   %[(" vm-ml-attributes-string ")%]----")
  42219. +      ("   %[()%]----"))
  42220. +     (-3 . "%p") "-%-")
  42221. +   mode-line-buffer-identification
  42222. +   '("VM " vm-version ": %b"
  42223. +     (vm-message-list
  42224. +      ("   " vm-ml-message-number
  42225. +       " (of " vm-ml-highest-message-number ")")
  42226. +      "  (no messages)"))
  42227. +   mode-name "VM"
  42228. +   require-final-newline nil
  42229. +   vm-current-grouping vm-group-by
  42230. +   vm-primary-inbox-p (equal buffer-file-name
  42231. +                 (expand-file-name vm-primary-inbox)))
  42232. +  (use-local-map vm-mode-map)
  42233. +  (run-hooks 'vm-mode-hooks))
  42234. +
  42235. +(put 'vm-mode 'mode-class 'special)
  42236. +
  42237. +(autoload 'vm-group-messages "vm-group" nil t)
  42238. +
  42239. +(autoload 'vm-reply "vm-reply" nil t)
  42240. +(autoload 'vm-reply-include-text "vm-reply" nil t)
  42241. +(autoload 'vm-followup "vm-reply" nil t)
  42242. +(autoload 'vm-followup-include-text "vm-reply" nil t)
  42243. +(autoload 'vm-mail "vm-reply" nil t)
  42244. +(autoload 'vm-forward-message "vm-reply" nil t)
  42245. +(autoload 'vm-send-digest "vm-reply" nil t)
  42246. +
  42247. +(autoload 'vm-isearch-forward "vm-search" nil t)
  42248. +
  42249. +(autoload 'vm-burst-digest "vm-digest" nil t)
  42250. +(autoload 'vm-rfc934-char-stuff-region "vm-digest")
  42251. +(autoload 'vm-digestify-region "vm-digest")
  42252. +
  42253. +(autoload 'vm-show-no-warranty "vm-license" nil t)
  42254. +(autoload 'vm-show-copying-restrictions "vm-license" nil t)
  42255. +
  42256. +(autoload 'vm-auto-archive-messages "vm-save" nil t)
  42257. +(autoload 'vm-save-message "vm-save" nil t)
  42258. +(autoload 'vm-save-message-sans-headers "vm-save" nil t)
  42259. +(autoload 'vm-pipe-message-to-command "vm-save" nil t)
  42260. +
  42261. +(autoload 'vm-delete-message "vm-delete" nil t)
  42262. +(autoload 'vm-undelete-message "vm-delete" nil t)
  42263. +(autoload 'vm-kill-subject "vm-delete" nil t)
  42264. +(autoload 'vm-expunge-folder "vm-delete" nil t)
  42265. +
  42266. +(if (not (memq 'vm-write-file-hook write-file-hooks))
  42267. +    (setq write-file-hooks
  42268. +      (cons 'vm-write-file-hook write-file-hooks)))
  42269. Binary files baseline/fsf/emacs/site-lisp/vm.elc and amiga/fsf/emacs/site-lisp/vm.elc differ
  42270. diff -ru --new-file baseline/fsf/emacs/src/Makefile.in.in amiga/fsf/emacs/src/Makefile.in.in
  42271. --- baseline/fsf/emacs/src/Makefile.in.in    Fri Aug 26 14:25:09 1994
  42272. +++ amiga/fsf/emacs/src/Makefile.in.in    Sun Oct 15 17:08:48 1995
  42273. @@ -252,9 +252,23 @@
  42274.  
  42275.  /* C_SWITCH_X_SITE must come before C_SWITCH_X_MACHINE and C_SWITCH_X_SYSTEM
  42276.     since it may have -I options that should override those two.  */
  42277. +
  42278. +
  42279. +#ifdef __amigados__
  42280. +/* FIXME - should really be dependant on expected compiler, in this case
  42281. +   it is SAS/C.  Also, in order to get '.' and '..' handling, you must
  42282. +   have "unixdirs" running. */
  42283. +#undef AMIGA    /* Probably belongs somewhere else, just haven't found it yet... */
  42284. +#undef amiga    /* Probably belongs somewhere else, just haven't found it yet... */
  42285. +CC=sc:c/sc
  42286. +ALL_CFLAGS= def AMIGA def emacs def HAVE_CONFIG_H def static $(MYCPPFLAG) idir . idir ${srcdir}/../unixlib/include idir ${srcdir} C_SWITCH_MACHINE C_SWITCH_SYSTEM C_SWITCH_SITE C_SWITCH_X_SITE C_SWITCH_X_MACHINE C_SWITCH_X_SYSTEM ${CFLAGS}
  42287. +.c.o:
  42288. +    $(CC) $(CPPFLAGS) $(ALL_CFLAGS) $< OBJNAME=$*.o
  42289. +#else
  42290.  ALL_CFLAGS=-Demacs -DHAVE_CONFIG_H $(MYCPPFLAG) -I. -I${srcdir} C_SWITCH_MACHINE C_SWITCH_SYSTEM C_SWITCH_SITE C_SWITCH_X_SITE C_SWITCH_X_MACHINE C_SWITCH_X_SYSTEM ${CFLAGS}
  42291.  .c.o:
  42292.      $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<
  42293. +#endif
  42294.  
  42295.  #ifndef LIBX10_MACHINE
  42296.  #define LIBX10_MACHINE
  42297. @@ -456,7 +470,7 @@
  42298.      eval.o floatfns.o fns.o print.o lread.o \
  42299.      abbrev.o syntax.o UNEXEC mocklisp.o bytecode.o \
  42300.      process.o callproc.o \
  42301. -    doprnt.o GETLOADAVG_OBJ
  42302. +    doprnt.o GETLOADAVG_OBJ EXTRA_OBJECTS
  42303.  
  42304.  /* Object files used on some machine or other.
  42305.     These go in the DOC file on all machines
  42306. @@ -496,7 +510,7 @@
  42307.  
  42308.  
  42309.  #ifndef HAVE_ALLOCA
  42310. -allocaobj = alloca.o
  42311. +allocaobj = oldalloca.o
  42312.  #else
  42313.  allocaobj =
  42314.  #endif
  42315. @@ -587,8 +601,12 @@
  42316.     Note that SunOS needs -lm to come before -lc; otherwise, you get
  42317.     duplicated symbols.  If the standard libraries were compiled
  42318.     with GCC, we might need gnulib again after them.  */
  42319. +#ifdef __amigados__    /* FIXME */
  42320. +LIBES = lib ../unixlib/src/unix.lib lib:scmieee.lib lib:sc.lib lib:amiga.lib
  42321. +#else
  42322.  LIBES = $(LIBX) LIBS_SYSTEM LIBS_MACHINE LIBS_TERMCAP \
  42323.     LIBS_DEBUG $(GNULIB_VAR) LIB_MATH LIB_STANDARD $(GNULIB_VAR)
  42324. +#endif
  42325.  
  42326.  /* Enable recompilation of certain other files depending on system type.  */
  42327.  
  42328. @@ -633,9 +651,13 @@
  42329.  #endif
  42330.  
  42331.  temacs: MAKE_PARALLEL $(LOCALCPP) $(SHORT) $(STARTFILES) $(OLDXMENU) ${obj} ${otherobj} OBJECTS_SYSTEM OBJECTS_MACHINE prefix-args
  42332. +#ifdef __amigados
  42333. +    sc:c/slink from $(STARTFILES) ${obj} ${otherobj} OBJECTS_SYSTEM OBJECTS_MACHINE ${LIBES} ${ALL_LDFLAGS} to temacs
  42334. +#else
  42335.      $(LD) YMF_PASS_LDFLAGS (${STARTFLAGS} ${ALL_LDFLAGS}) \
  42336.      -o temacs ${STARTFILES} ${obj} ${otherobj}  \
  42337.      OBJECTS_SYSTEM OBJECTS_MACHINE ${LIBES}
  42338. +#endif
  42339.  
  42340.  prefix-args: prefix-args.c $(config_h)
  42341.      $(CC) $(ALL_CFLAGS) ${srcdir}/prefix-args.c -o prefix-args
  42342. diff -ru --new-file baseline/fsf/emacs/src/abbrev_protos.h amiga/fsf/emacs/src/abbrev_protos.h
  42343. --- baseline/fsf/emacs/src/abbrev_protos.h    Wed Dec 31 17:00:00 1969
  42344. +++ amiga/fsf/emacs/src/abbrev_protos.h    Sun Oct 15 17:08:51 1995
  42345. @@ -0,0 +1,80 @@
  42346. +/* Prototypes for functions defined in
  42347. +abbrev.c
  42348. + */
  42349. +
  42350. +extern int Vabbrev_table_name_list;
  42351. +
  42352. +extern int Vglobal_abbrev_table;
  42353. +
  42354. +extern int Vfundamental_mode_abbrev_table;
  42355. +
  42356. +extern int abbrevs_changed;
  42357. +
  42358. +extern int abbrev_all_caps;
  42359. +
  42360. +extern int Vabbrev_start_location;
  42361. +
  42362. +extern int Vabbrev_start_location_buffer;
  42363. +
  42364. +extern int Vlast_abbrev;
  42365. +
  42366. +extern int Vlast_abbrev_text;
  42367. +
  42368. +extern int last_abbrev_point;
  42369. +
  42370. +extern int Vpre_abbrev_expand_hook;
  42371. +
  42372. +extern int Qpre_abbrev_expand_hook;
  42373. +
  42374. +extern struct Lisp_Subr Smake_abbrev_table;
  42375. +
  42376. +int Fmake_abbrev_table(void);
  42377. +
  42378. +extern struct Lisp_Subr Sclear_abbrev_table;
  42379. +
  42380. +int Fclear_abbrev_table(int );
  42381. +
  42382. +extern struct Lisp_Subr Sdefine_abbrev;
  42383. +
  42384. +int Fdefine_abbrev(int , int , int , int , int );
  42385. +
  42386. +extern struct Lisp_Subr Sdefine_global_abbrev;
  42387. +
  42388. +int Fdefine_global_abbrev(int , int );
  42389. +
  42390. +extern struct Lisp_Subr Sdefine_mode_abbrev;
  42391. +
  42392. +int Fdefine_mode_abbrev(int , int );
  42393. +
  42394. +extern struct Lisp_Subr Sabbrev_symbol;
  42395. +
  42396. +int Fabbrev_symbol(int , int );
  42397. +
  42398. +extern struct Lisp_Subr Sabbrev_expansion;
  42399. +
  42400. +int Fabbrev_expansion(int , int );
  42401. +
  42402. +extern struct Lisp_Subr Sexpand_abbrev;
  42403. +
  42404. +int Fexpand_abbrev(void);
  42405. +
  42406. +extern struct Lisp_Subr Sunexpand_abbrev;
  42407. +
  42408. +int Funexpand_abbrev(void);
  42409. +
  42410. +int write_abbrev(int sym,
  42411. +                 int stream);
  42412. +
  42413. +int describe_abbrev(int sym,
  42414. +                    int stream);
  42415. +
  42416. +extern struct Lisp_Subr Sinsert_abbrev_table_description;
  42417. +
  42418. +int Finsert_abbrev_table_description(int , int );
  42419. +
  42420. +extern struct Lisp_Subr Sdefine_abbrev_table;
  42421. +
  42422. +int Fdefine_abbrev_table(int , int );
  42423. +
  42424. +int syms_of_abbrev(void);
  42425. +
  42426. diff -ru --new-file baseline/fsf/emacs/src/alloc.c amiga/fsf/emacs/src/alloc.c
  42427. --- baseline/fsf/emacs/src/alloc.c    Tue May  3 19:29:50 1994
  42428. +++ amiga/fsf/emacs/src/alloc.c    Sun Oct 15 17:08:53 1995
  42429. @@ -76,6 +76,11 @@
  42430.  /* Non-nil means defun should do purecopy on the function definition */
  42431.  Lisp_Object Vpurify_flag;
  42432.  
  42433. +#ifdef AMIGA_DUMP
  42434. +int *pure;   /* pure array is allocated at run-time */
  42435. +int puresize = DEF_PURESIZE; /* and has a variable size */
  42436. +#define PUREBEG (char *) pure
  42437. +#else /* not AMIGA_DUMP */
  42438.  #ifndef HAVE_SHM
  42439.  int pure[PURESIZE / sizeof (int)] = {0,};   /* Force it into data space! */
  42440.  #define PUREBEG (char *) pure
  42441. @@ -91,6 +96,7 @@
  42442.     out.  */
  42443.  int pure_size;
  42444.  #endif /* not HAVE_SHM */
  42445. +#endif /* not AMIGA_DUMP */
  42446.  
  42447.  /* Index in pure at which next pure object will be allocated. */
  42448.  int pureptr;
  42449. @@ -1159,7 +1165,11 @@
  42450.  
  42451.  #define NSTATICS 512
  42452.  
  42453. +#ifndef AMIGA_DUMP
  42454.  Lisp_Object *staticvec[NSTATICS] = {0};
  42455. +#else
  42456. +Lisp_Object *staticvec[NSTATICS]; /* Doesn't need to be pure */
  42457. +#endif
  42458.  
  42459.  int staticidx = 0;
  42460.  
  42461. @@ -2012,8 +2022,16 @@
  42462.           Find the end of the chain, where the actual size lives.  */
  42463.            while ((unsigned) size > STRING_BLOCK_SIZE)
  42464.          {
  42465. +#ifdef AMIGA /* SAS/C 6.3 code generation bug */
  42466. +          int hi;
  42467. +          
  42468. +          if (size & 1) size ^= MARKBIT | 1;
  42469. +          hi = *(int *) size;
  42470. +          size = hi & ~MARKBIT;
  42471. +#else
  42472.            if (size & 1) size ^= MARKBIT | 1;
  42473.            size = *(int *)size & ~MARKBIT;
  42474. +#endif
  42475.          }
  42476.  
  42477.            total_string_size += size;
  42478. @@ -2052,7 +2070,15 @@
  42479.            if (size & 1) size ^= MARKBIT | 1;
  42480.            objptr = (Lisp_Object *)size;
  42481.  
  42482. +#ifdef AMIGA /* see above */
  42483. +              {
  42484. +            int hi;
  42485. +            hi = XFASTINT (*objptr);
  42486. +            size = hi & ~MARKBIT;
  42487. +          }
  42488. +#else
  42489.            size = XFASTINT (*objptr) & ~MARKBIT;
  42490. +#endif
  42491.            if (XMARKBIT (*objptr))
  42492.              {
  42493.                XSET (*objptr, Lisp_String, newaddr);
  42494. diff -ru --new-file baseline/fsf/emacs/src/alloc_protos.h amiga/fsf/emacs/src/alloc_protos.h
  42495. --- baseline/fsf/emacs/src/alloc_protos.h    Wed Dec 31 17:00:00 1969
  42496. +++ amiga/fsf/emacs/src/alloc_protos.h    Sun Oct 15 17:08:56 1995
  42497. @@ -0,0 +1,191 @@
  42498. +/* Prototypes for functions defined in
  42499. +alloc.c
  42500. + */
  42501. +
  42502. +extern int consing_since_gc;
  42503. +
  42504. +extern int gc_cons_threshold;
  42505. +
  42506. +extern int gc_in_progress;
  42507. +
  42508. +extern int undo_limit;
  42509. +
  42510. +extern int undo_strong_limit;
  42511. +
  42512. +extern int Vpurify_flag;
  42513. +
  42514. +extern int * pure;
  42515. +
  42516. +extern int puresize;
  42517. +
  42518. +extern int pureptr;
  42519. +
  42520. +extern char * pending_malloc_warning;
  42521. +
  42522. +extern int memory_signal_data;
  42523. +
  42524. +extern char * stack_copy;
  42525. +
  42526. +extern int stack_copy_size;
  42527. +
  42528. +extern int ignore_warnings;
  42529. +
  42530. +int malloc_warning_1(int str);
  42531. +
  42532. +int malloc_warning(char * str);
  42533. +
  42534. +int display_malloc_warning(void);
  42535. +
  42536. +int memory_full(void);
  42537. +
  42538. +long * xmalloc(int size);
  42539. +
  42540. +long * xrealloc(void * block,
  42541. +                int size);
  42542. +
  42543. +void xfree(void * block);
  42544. +
  42545. +extern struct cons_block * cons_block;
  42546. +
  42547. +extern int cons_block_index;
  42548. +
  42549. +extern struct Lisp_Cons * cons_free_list;
  42550. +
  42551. +void init_cons(void);
  42552. +
  42553. +int free_cons(struct Lisp_Cons * ptr);
  42554. +
  42555. +extern struct Lisp_Subr Scons;
  42556. +
  42557. +int Fcons(int , int );
  42558. +
  42559. +extern struct Lisp_Subr Slist;
  42560. +
  42561. +int Flist(int , int * );
  42562. +
  42563. +extern struct Lisp_Subr Smake_list;
  42564. +
  42565. +int Fmake_list(int , int );
  42566. +
  42567. +extern struct Lisp_Vector * all_vectors;
  42568. +
  42569. +extern struct Lisp_Subr Smake_vector;
  42570. +
  42571. +int Fmake_vector(int , int );
  42572. +
  42573. +extern struct Lisp_Subr Svector;
  42574. +
  42575. +int Fvector(int , int * );
  42576. +
  42577. +extern struct Lisp_Subr Smake_byte_code;
  42578. +
  42579. +int Fmake_byte_code(int , int * );
  42580. +
  42581. +extern struct symbol_block * symbol_block;
  42582. +
  42583. +extern int symbol_block_index;
  42584. +
  42585. +extern struct Lisp_Symbol * symbol_free_list;
  42586. +
  42587. +void init_symbol(void);
  42588. +
  42589. +extern struct Lisp_Subr Smake_symbol;
  42590. +
  42591. +int Fmake_symbol(int );
  42592. +
  42593. +extern struct marker_block * marker_block;
  42594. +
  42595. +extern int marker_block_index;
  42596. +
  42597. +extern struct Lisp_Marker * marker_free_list;
  42598. +
  42599. +void init_marker(void);
  42600. +
  42601. +extern struct Lisp_Subr Smake_marker;
  42602. +
  42603. +int Fmake_marker(void);
  42604. +
  42605. +extern struct string_block * current_string_block;
  42606. +
  42607. +extern struct string_block * first_string_block;
  42608. +
  42609. +extern struct string_block * large_string_blocks;
  42610. +
  42611. +void init_strings(void);
  42612. +
  42613. +extern struct Lisp_Subr Smake_string;
  42614. +
  42615. +int Fmake_string(int , int );
  42616. +
  42617. +int make_string(char * contents,
  42618. +                int length);
  42619. +
  42620. +int build_string(char * str);
  42621. +
  42622. +int make_uninit_string(int length);
  42623. +
  42624. +int make_event_array(register int nargs,
  42625. +                     int * args);
  42626. +
  42627. +int make_pure_string(char * data,
  42628. +                     int length);
  42629. +
  42630. +int pure_cons(int car,
  42631. +              int cdr);
  42632. +
  42633. +int make_pure_vector(int len);
  42634. +
  42635. +extern struct Lisp_Subr Spurecopy;
  42636. +
  42637. +int Fpurecopy(int );
  42638. +
  42639. +extern struct gcpro * gcprolist;
  42640. +
  42641. +extern int * staticvec[512];
  42642. +
  42643. +extern int staticidx;
  42644. +
  42645. +void staticpro(int * varaddress);
  42646. +
  42647. +extern int total_conses;
  42648. +
  42649. +extern int total_markers;
  42650. +
  42651. +extern int total_symbols;
  42652. +
  42653. +extern int total_string_size;
  42654. +
  42655. +extern int total_vector_size;
  42656. +
  42657. +extern int total_free_conses;
  42658. +
  42659. +extern int total_free_markers;
  42660. +
  42661. +extern int total_free_symbols;
  42662. +
  42663. +extern struct Lisp_Subr Sgarbage_collect;
  42664. +
  42665. +int Fgarbage_collect(void);
  42666. +
  42667. +extern int * last_marked[500];
  42668. +
  42669. +extern int last_marked_index;
  42670. +
  42671. +void mark_object(int * objptr);
  42672. +
  42673. +void mark_buffer(int buf);
  42674. +
  42675. +void gc_sweep(void);
  42676. +
  42677. +void compact_strings(void);
  42678. +
  42679. +extern struct Lisp_Subr Smemory_limit;
  42680. +
  42681. +int Fmemory_limit(void);
  42682. +
  42683. +int init_alloc_once(void);
  42684. +
  42685. +int init_alloc(void);
  42686. +
  42687. +void syms_of_alloc(void);
  42688. +
  42689. diff -ru --new-file baseline/fsf/emacs/src/amiga.h amiga/fsf/emacs/src/amiga.h
  42690. --- baseline/fsf/emacs/src/amiga.h    Wed Dec 31 17:00:00 1969
  42691. +++ amiga/fsf/emacs/src/amiga.h    Sun Oct 15 17:08:59 1995
  42692. @@ -0,0 +1,105 @@
  42693. +
  42694. +struct x_display
  42695. +{
  42696. +    struct Window *emacs_win; /* amiga window */
  42697. +    struct Menu *emacs_menu;
  42698. +    void *emacs_vi; /* visual info */
  42699. +    char *emacs_menu_strings; 
  42700. +};
  42701. +
  42702. +#define EMACS_WIN(f) (FRAME_DISPLAY(f)->emacs_win)
  42703. +#define EMACS_MENU(f) (FRAME_DISPLAY(f)->emacs_menu)
  42704. +#define EMACS_MENU_STRINGS(f) (FRAME_DISPLAY(f)->emacs_menu_strings)
  42705. +#define EMACS_VI(f) (FRAME_DISPLAY(f)->emacs_vi)
  42706. +
  42707. +/* Symbols defined in amiga_tty.c */
  42708. +extern unsigned long inputsig;
  42709. +
  42710. +/* Prototypes for functions defined in amiga_clipboard.c */
  42711. +void syms_of_amiga_clipboard(void);
  42712. +void early_clipboard(void);
  42713. +void init_clipboard(void);
  42714. +void cleanup_clipboard(void);
  42715. +
  42716. +/* Prototypes for functions defined in amiga_dump.c */
  42717. +void map_out_data(char *fn);
  42718. +void map_in_data(int load);
  42719. +extern void *far first_fn, *far last_fn;
  42720. +
  42721. +/* Prototypes for functions defined in amiga_processes.c */
  42722. +/* Simulation of unix processes & signals */
  42723. +int wait_for_termination(int pid);
  42724. +int wait_without_blocking(void);
  42725. +char *amiga_path(void);
  42726. +void init_amiga_processes(void);
  42727. +void cleanup_amiga_processes(void);
  42728. +
  42729. +/* Prototypes for functions defined in amiga_rexx.c */
  42730. +int check_arexx(int force, int kbd);
  42731. +void init_amiga_rexx(void);
  42732. +void cleanup_amiga_rexx(void);
  42733. +void syms_of_amiga_rexx(void);
  42734. +
  42735. +/* Prototypes for functions defined in amiga_serial.c */
  42736. +void init_amiga_serial(void);
  42737. +void cleanup_amiga_serial(void);
  42738. +void check_serial(int force);
  42739. +void serial_puts(char *str, int len);
  42740. +unsigned long serial_baud_rate(void);
  42741. +
  42742. +/* Prototypes for functions defined in amiga_sysdep.c */
  42743. +extern int selecting;
  42744. +
  42745. +int set_exclusive_use(int fd);
  42746. +int sys_suspend(void);
  42747. +char *get_system_name(void);
  42748. +char *expand_path(char *path, char *buf, int len);
  42749. +int syms_of_amiga(void);
  42750. +void cleanup_amiga(void);
  42751. +void amiga_undump_reinit(void);
  42752. +void *early_xmalloc(long size);
  42753. +void *early_xrealloc(void *old, long size);
  42754. +
  42755. +/* Failure stuff */
  42756. +void wbmessage(char *msg);
  42757. +void fail(char *cause);
  42758. +void fail_nomem(void);
  42759. +void _fail_internal(char *file, int line);
  42760. +#define fail_internal() _fail_internal(__FILE__, __LINE__);
  42761. +enum exit_method { use_exit, use_xcexit, use_safe };
  42762. +extern enum exit_method amiga_fail_exit;
  42763. +
  42764. +#define MALLOC_HUNK_SIZE 400000 /* Default malloc hunk size */
  42765. +extern long malloc_hunk_size; /* Amount of memory malloc'ed by a to-be-dumped emacs */
  42766. +extern long malloc_bytes_used;    /* Amount of this hunk actually used */
  42767. +extern long far pre_alloc;    /* amount of memory to reserve for emacs */
  42768. +extern int puresize;        /* Size of pure hunk */
  42769. +
  42770. +/* Various special values used to find the beginning & end of the text, data,
  42771. +   bss and malloc segments. */
  42772. +extern int first_data, last_data, first_bss, last_bss;
  42773. +extern void first_function(), last_function();
  42774. +extern char *malloc_hunk;
  42775. +extern int amiga_initialized;    /* True once Emacs has been undumped or initialised */
  42776. +struct mem_header        /* sizeof() must be multiple of 4 ! */
  42777. +{
  42778. +    struct mem_header *next, *prev;
  42779. +    long size;
  42780. +    /* Data follows */
  42781. +};
  42782. +extern struct mem_header *free_list;
  42783. +
  42784. +
  42785. +/* Prototypes for functions defined in amiga_term.c */
  42786. +int amiga_term_init(void);
  42787. +
  42788. +#define AMIGASEQ 256 /* When passed to enque, insert the Amiga sequence introducer
  42789. +                C-x C-^ */
  42790. +
  42791. +/* Prototypes for functions defined in amiga_unix.c */
  42792. +void MemCleanup(void);
  42793. +void *malloc(unsigned int size);
  42794. +void free(void *p);
  42795. +void *calloc(unsigned int, unsigned int);
  42796. +void *realloc(void *p, unsigned int size);
  42797. +void emacs_malloc_init(void);
  42798. diff -ru --new-file baseline/fsf/emacs/src/amiga_clipboard.c amiga/fsf/emacs/src/amiga_clipboard.c
  42799. --- baseline/fsf/emacs/src/amiga_clipboard.c    Wed Dec 31 17:00:00 1969
  42800. +++ amiga/fsf/emacs/src/amiga_clipboard.c    Sun Oct 15 17:09:01 1995
  42801. @@ -0,0 +1,249 @@
  42802. +/* Amiga clipboard support
  42803. +   Copyright (C) 1994 Free Software Foundation, Inc.
  42804. +
  42805. +This file is part of GNU Emacs.
  42806. +
  42807. +GNU Emacs is free software; you can redistribute it and/or modify
  42808. +it under the terms of the GNU General Public License as published by
  42809. +the Free Software Foundation; either version 2, or (at your option)
  42810. +any later version.
  42811. +
  42812. +GNU Emacs is distributed in the hope that it will be useful,
  42813. +but WITHOUT ANY WARRANTY; without even the implied warranty of
  42814. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  42815. +GNU General Public License for more details.
  42816. +
  42817. +You should have received a copy of the GNU General Public License
  42818. +along with GNU Emacs; see the file COPYING.  If not, write to
  42819. +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  42820. +
  42821. +/* CHFIXME: check if this file is uptodate */
  42822. +
  42823. +#include "config.h"
  42824. +#include "lisp.h"
  42825. +#include "termchar.h"
  42826. +#include "amiga.h"
  42827. +
  42828. +#include <stdio.h>
  42829. +#include <internal/devices.h>
  42830. +
  42831. +#undef LONGBITS
  42832. +
  42833. +#include <exec/types.h>
  42834. +#include <exec/io.h>
  42835. +#include <devices/clipboard.h>
  42836. +#include <libraries/iffparse.h>
  42837. +#include <utility/hooks.h>
  42838. +
  42839. +#include <proto/exec.h>
  42840. +#include <proto/iffparse.h>
  42841. +
  42842. +#ifdef USE_PROTOS
  42843. +#include "protos.h"
  42844. +#endif
  42845. +
  42846. +#define  ID_FTXT    MAKE_ID('F','T','X','T')
  42847. +#define  ID_CHRS    MAKE_ID('C','H','R','S')
  42848. +
  42849. +/*
  42850. + * Text error messages for possible IFFERR_#? returns from various
  42851. + * IFF routines.  To get the index into this array, take your IFFERR code,
  42852. + * negate it, and subtract one.
  42853. + *  idx = -error - 1;
  42854. + */
  42855. +static char *far ifferrormsgs[] = {
  42856. +    "End of file (not an error).",
  42857. +    "End of context (not an error).",
  42858. +    "No lexical scope.",
  42859. +    "Insufficient memory.",
  42860. +    "Stream read error.",
  42861. +    "Stream write error.",
  42862. +    "Stream seek error.",
  42863. +    "File is corrupt.",
  42864. +    "IFF syntax error.",
  42865. +    "Not an IFF file.",
  42866. +    "Required call-back hook missing.",
  42867. +    "Return to client.  You should never see this."
  42868. +};
  42869. +
  42870. +Lisp_Object amiga_new_clip;
  42871. +static struct IFFHandle *far iff;
  42872. +struct Library *IFFParseBase;
  42873. +
  42874. +static struct IOClipReq *far ClipRequest;
  42875. +static struct Hook cliphook;
  42876. +
  42877. +/* added __interrupt flag this disables stack checking for this function
  42878. + * so we can compile with stack checking on.  -ch3/19/93. */
  42879. +static ULONG __saveds __asm __interrupt
  42880. +clip_change(    register __a0 struct Hook    *hook,
  42881. +        register __a2 VOID        *object,
  42882. +        register __a1 ULONG        *message )
  42883. +{
  42884. +    amiga_new_clip = 1;
  42885. +    return 0;
  42886. +}
  42887. +
  42888. +static Lisp_Object clip_unwind(Lisp_Object dummy)
  42889. +{
  42890. +    CloseIFF (iff);
  42891. +    CloseClipboard ((struct ClipboardHandle *) iff->iff_Stream);
  42892. +
  42893. +    return Qnil;
  42894. +}
  42895. +
  42896. +static int clip_protect(void)
  42897. +{
  42898. +    int count = specpdl_ptr - specpdl;
  42899. +
  42900. +    record_unwind_protect(clip_unwind, Qnil);
  42901. +
  42902. +    return count;
  42903. +}
  42904. +
  42905. +static long clip_check(long err)
  42906. +{
  42907. +    if(err) error ("Clipboard IO failed, error %ld: %s\n",
  42908. +           err, ifferrormsgs[-err - 1]);
  42909. +    return err;
  42910. +}
  42911. +
  42912. +
  42913. +static void cut(char *str, int size)
  42914. +{
  42915. +    int count;
  42916. +
  42917. +    if (!(iff->iff_Stream = (ULONG) OpenClipboard (0)))
  42918. +    error ("Clipboard open failed.");
  42919. +
  42920. +    count = clip_protect();
  42921. +
  42922. +    /* Open clipbaord */
  42923. +    InitIFFasClip (iff);
  42924. +    clip_check(OpenIFF (iff, IFFF_WRITE));
  42925. +
  42926. +    /* Write data */
  42927. +    clip_check(PushChunk(iff, ID_FTXT, ID_FORM, IFFSIZE_UNKNOWN));
  42928. +    clip_check(PushChunk(iff, 0, ID_CHRS, IFFSIZE_UNKNOWN));
  42929. +    if (WriteChunkBytes(iff, str, size) != size) clip_check(IFFERR_WRITE);
  42930. +    clip_check(PopChunk(iff));
  42931. +    clip_check(PopChunk(iff));
  42932. +
  42933. +    /* & close */
  42934. +    unbind_to (count, Qnil);
  42935. +}
  42936. +
  42937. +DEFUN ("amiga-cut", Famiga_cut, Samiga_cut,
  42938. +  1, 1, 0,
  42939. +  "Copy string into Amiga clipboard.")
  42940. +  (arg)
  42941. +     Lisp_Object arg;
  42942. +{
  42943. +    struct Lisp_String *p;
  42944. +
  42945. +    CHECK_STRING (arg, 0);
  42946. +
  42947. +    p = XSTRING (arg);
  42948. +    cut(p->data, p->size);
  42949. +
  42950. +    return Qnil;
  42951. +}
  42952. +
  42953. +DEFUN ("amiga-paste", Famiga_paste, Samiga_paste,
  42954. +  0, 0, 0,
  42955. +  "Returns text currently in the Amiga clipboard, or NIL if there is none.")
  42956. +  ()
  42957. +{
  42958. +    long err = 0;
  42959. +    Lisp_Object result = Qnil;
  42960. +    struct ContextNode  *cn;
  42961. +    int count;
  42962. +
  42963. +    if (!(iff->iff_Stream = (ULONG) OpenClipboard (0)))
  42964. +    error ("Clipboard open failed.");
  42965. +
  42966. +    count = clip_protect();
  42967. +
  42968. +    /* Open clipbaord */
  42969. +    InitIFFasClip (iff);
  42970. +    clip_check(OpenIFF (iff, IFFF_READ));
  42971. +    clip_check(StopChunk(iff, ID_FTXT, ID_CHRS));
  42972. +
  42973. +    /* Find the first FTXT CHRS chunks */
  42974. +    while (result == Qnil)
  42975. +    {
  42976. +    long err = ParseIFF(iff, IFFPARSE_SCAN);
  42977. +
  42978. +    if (err == IFFERR_EOC) continue; /* enter next context */
  42979. +    else if (err == IFFERR_EOF) break;
  42980. +    else clip_check(err);
  42981. +
  42982. +    /* We only asked to stop at FTXT CHRS chunks
  42983. +     * If no error we've hit a stop chunk
  42984. +     * Read the CHRS chunk data
  42985. +     */
  42986. +    cn = CurrentChunk(iff);
  42987. +
  42988. +    if ((cn) && (cn->cn_Type == ID_FTXT) && (cn->cn_ID == ID_CHRS))
  42989. +    {
  42990. +        int size = cn->cn_Size, rlen;
  42991. +
  42992. +        result = make_string("", size);
  42993. +
  42994. +        if ((rlen = ReadChunkBytes(iff, XSTRING (result)->data, size)) != size)
  42995. +        if (rlen < 0) clip_check(rlen);
  42996. +        else clip_check(IFFERR_EOC);
  42997. +    }
  42998. +    }
  42999. +    unbind_to (count, Qnil);
  43000. +
  43001. +    return result;
  43002. +}
  43003. +
  43004. +void syms_of_amiga_clipboard(void)
  43005. +{
  43006. +    DEFVAR_BOOL ("amiga-new-clip", &amiga_new_clip,
  43007. +         "Set to t every time a new clip is put in the Amiga clipboard");
  43008. +    amiga_new_clip = 0;
  43009. +
  43010. +    defsubr (&Samiga_cut);
  43011. +    defsubr (&Samiga_paste);
  43012. +}
  43013. +
  43014. +void early_clipboard(void)
  43015. +{
  43016. +    IFFParseBase = 0;
  43017. +}
  43018. +
  43019. +void init_clipboard(void)
  43020. +{
  43021. +    /* Initialise IFF for clipboard */
  43022. +    if (!(IFFParseBase = OpenLibrary("iffparse.library", 0)))
  43023. +      _fail("iffparse.library is required");
  43024. +    if (!(iff = AllocIFF())) no_memory();
  43025. +
  43026. +    ClipRequest = (struct IOClipReq *)
  43027. +    _device_open("clipboard.device", 0L, 0L, 0L, 0, sizeof(struct IOClipReq));
  43028. +    if (!ClipRequest) _fail("clipboard.device missing !?");
  43029. +
  43030. +    cliphook.h_Entry = (ULONG (*)())clip_change;
  43031. +    ClipRequest->io_Command = CBD_CHANGEHOOK;
  43032. +    ClipRequest->io_Length = 1; /* install */
  43033. +    ClipRequest->io_Data = (APTR)&cliphook;
  43034. +    DoIO((struct IORequest *)ClipRequest);
  43035. +}
  43036. +
  43037. +void cleanup_clipboard(void)
  43038. +{
  43039. +    if (ClipRequest)
  43040. +    {
  43041. +    cliphook.h_Entry = (ULONG (*)())clip_change;
  43042. +    ClipRequest->io_Command = CBD_CHANGEHOOK;
  43043. +    ClipRequest->io_Length = 0; /* remove */
  43044. +    ClipRequest->io_Data = (APTR)&cliphook;
  43045. +    DoIO((struct IORequest *)ClipRequest);
  43046. +    }
  43047. +    if (iff) FreeIFF(iff);
  43048. +    if (IFFParseBase) CloseLibrary(IFFParseBase);
  43049. +    _device_close((struct IORequest *)ClipRequest);
  43050. +}
  43051. diff -ru --new-file baseline/fsf/emacs/src/amiga_clipboard_protos.h amiga/fsf/emacs/src/amiga_clipboard_protos.h
  43052. --- baseline/fsf/emacs/src/amiga_clipboard_protos.h    Wed Dec 31 17:00:00 1969
  43053. +++ amiga/fsf/emacs/src/amiga_clipboard_protos.h    Sun Oct 15 17:09:02 1995
  43054. @@ -0,0 +1,42 @@
  43055. +/* Prototypes for functions defined in
  43056. +amiga_clipboard.c
  43057. + */
  43058. +
  43059. +extern char * __far ifferrormsgs[12];
  43060. +
  43061. +extern int amiga_new_clip;
  43062. +
  43063. +extern struct IFFHandle * __far iff;
  43064. +
  43065. +extern struct Library * IFFParseBase;
  43066. +
  43067. +extern struct IOClipReq * __far ClipRequest;
  43068. +
  43069. +extern struct Hook cliphook;
  43070. +
  43071. +unsigned long __asm __interrupt __saveds clip_change(register __a0 struct Hook * , register __a2 void * , register __a1 unsigned long * );
  43072. +
  43073. +int clip_unwind(int );
  43074. +
  43075. +int clip_protect(void);
  43076. +
  43077. +long clip_check(long );
  43078. +
  43079. +void cut(char * , int );
  43080. +
  43081. +extern struct Lisp_Subr Samiga_cut;
  43082. +
  43083. +int Famiga_cut(int );
  43084. +
  43085. +extern struct Lisp_Subr Samiga_paste;
  43086. +
  43087. +int Famiga_paste(void);
  43088. +
  43089. +void syms_of_amiga_clipboard(void);
  43090. +
  43091. +void early_clipboard(void);
  43092. +
  43093. +void init_clipboard(void);
  43094. +
  43095. +void cleanup_clipboard(void);
  43096. +
  43097. diff -ru --new-file baseline/fsf/emacs/src/amiga_data.c amiga/fsf/emacs/src/amiga_data.c
  43098. --- baseline/fsf/emacs/src/amiga_data.c    Wed Dec 31 17:00:00 1969
  43099. +++ amiga/fsf/emacs/src/amiga_data.c    Sun Oct 15 17:09:04 1995
  43100. @@ -0,0 +1 @@
  43101. +/* Declarations of data that should not be squashed by the dump routine */
  43102. diff -ru --new-file baseline/fsf/emacs/src/amiga_dump.c amiga/fsf/emacs/src/amiga_dump.c
  43103. --- baseline/fsf/emacs/src/amiga_dump.c    Wed Dec 31 17:00:00 1969
  43104. +++ amiga/fsf/emacs/src/amiga_dump.c    Sun Oct 15 17:09:06 1995
  43105. @@ -0,0 +1,1529 @@
  43106. +#include <exec/types.h>
  43107. +#include <fcntl.h>
  43108. +#include <stdio.h>
  43109. +#include <assert.h>
  43110. +#include <proto/dos.h>
  43111. +#include <setjmp.h>
  43112. +#include <internal/messages.h>
  43113. +#include "config.h"
  43114. +#include "lisp.h"
  43115. +#include "buffer.h"
  43116. +#include "regex.h"
  43117. +#include "amiga.h"
  43118. +#include "dispextern.h"
  43119. +#include "termchar.h"
  43120. +#include "paths.h"
  43121. +#include "frame.h"
  43122. +
  43123. +#ifdef USE_PROTOS
  43124. +#include "protos.h"
  43125. +#endif
  43126. +
  43127. +#define RANGE(ptr, s, e) ((char *)ptr >= (char *)s && (char *)ptr < (char *)e)
  43128. +#define HUNK_POS (VALBITS - 3)
  43129. +#define HUNK_MASK (7 << HUNK_POS)
  43130. +#define HUNK_CODE (0 << HUNK_POS)
  43131. +#define HUNK_DATA (1 << HUNK_POS)
  43132. +#define HUNK_BSS (2 << HUNK_POS)
  43133. +#define HUNK_MALLOC (3 << HUNK_POS)
  43134. +#define HUNK_PURE (4 << HUNK_POS)
  43135. +#define ARRAY_MARK_FLAG ((MARKBIT >> 1) & ~MARKBIT)
  43136. +
  43137. +void *far first_fn = first_function, *far last_fn = last_function;
  43138. +
  43139. +/* alloc.c */
  43140. +extern int *pure, puresize;
  43141. +extern struct gcpro *gcprolist;
  43142. +extern Lisp_Object *staticvec[];
  43143. +extern int staticidx;
  43144. +extern struct cons_block *cons_block;
  43145. +extern struct Lisp_Cons *cons_free_list;
  43146. +extern struct Lisp_Vector *all_vectors;
  43147. +extern struct symbol_block *symbol_block;
  43148. +extern struct Lisp_Symbol *symbol_free_list;
  43149. +extern struct marker_block *marker_block;
  43150. +extern struct Lisp_Marker *marker_free_list;
  43151. +extern struct interval_block *interval_block;
  43152. +extern INTERVAL interval_free_list;
  43153. +struct string_block_head
  43154. +  {
  43155. +    struct string_block_head *next, *prev;
  43156. +    int pos;
  43157. +  };
  43158. +struct string_block
  43159. +  {
  43160. +    struct string_block *next, *prev;
  43161. +#if 0 /* not needed */
  43162. +    int pos;
  43163. +    char chars[STRING_BLOCK_SIZE];
  43164. +#endif
  43165. +  };
  43166. +extern struct string_block *current_string_block;
  43167. +extern struct string_block *first_string_block;
  43168. +extern struct string_block *large_string_blocks;
  43169. +#ifdef LISP_FLOAT_TYPE
  43170. +extern struct float_block *float_block;
  43171. +extern struct Lisp_Float *float_free_list;
  43172. +#endif /* LISP_FLOAT_TYPE */
  43173. +
  43174. +struct backtrace /* see eval.c or alloc.c */
  43175. +  {
  43176. +    struct backtrace *next;
  43177. +    Lisp_Object *function;
  43178. +    Lisp_Object *args;    /* Points to vector of args. */
  43179. +    int nargs;        /* Length of vector.
  43180. +               If nargs is UNEVALLED, args points to slot holding
  43181. +               list of unevalled args */
  43182. +    char evalargs;
  43183. +    /* Nonzero means call value of debugger when done with this operation. */
  43184. +    char debug_on_exit;
  43185. +  };
  43186. +extern struct backtrace *backtrace_list;
  43187. +struct catchtag
  43188. +  {
  43189. +    Lisp_Object tag;
  43190. +    Lisp_Object val;
  43191. +    struct catchtag *next;
  43192. +    struct gcpro *gcpro;
  43193. +    jmp_buf jmp;
  43194. +    struct backtrace *backlist;
  43195. +    struct handler *handlerlist;
  43196. +    int lisp_eval_depth;
  43197. +    int pdlcount;
  43198. +    int poll_suppress_count;
  43199. +  };
  43200. +extern struct catchtag *catchlist;
  43201. +extern char *stack_copy;
  43202. +
  43203. +extern int *kbd_macro_buffer;
  43204. +extern char *read_buffer, *chars_wasted, *copybuf;
  43205. +#if 0
  43206. +extern struct minibuf_save_data *minibuf_save_vector;
  43207. +#endif
  43208. +extern struct re_pattern_buffer searchbuf;
  43209. +#if 0 /* CHFIXME */
  43210. +extern int *ILcost, *DLcost, *ILncost, *DLncost;
  43211. +#endif
  43212. +#if 0
  43213. +extern Lisp_Object MouseMap, global_map, Vglobal_map, Vesc_map, Vctl_x_map;
  43214. +#else
  43215. +extern Lisp_Object global_map, meta_map, control_x_map;
  43216. +#endif
  43217. +extern Lisp_Object selected_window;
  43218. +
  43219. +extern char *callint_argfuns[];
  43220. +
  43221. +/* lread.c/init_obarray variables */
  43222. +extern Lisp_Object Qvariable_documentation, Vpurify_flag;
  43223. +
  43224. +/* eval.c/init_eval_once variables */
  43225. +/* specpdl */
  43226. +
  43227. +/* syntax.c/init_syntax_once */
  43228. +/* */
  43229. +
  43230. +/* window.c variables */
  43231. +/* */
  43232. +
  43233. +
  43234. +/* buffer.c */
  43235. +/* -> buffer.h */
  43236. +
  43237. +/* dired.c */
  43238. +extern Lisp_Object Qdirectory_files, Qfile_name_completion,
  43239. +    Qfile_name_all_completions, Qfile_attributes;
  43240. +
  43241. +/* fileio.c */
  43242. +extern Lisp_Object Qset_visited_file_modtime;
  43243. +
  43244. +/* process.c */
  43245. +/* extern Lisp_Object stream_process; CHFIXME activate HAVE_SOCKETS ?*/
  43246. +
  43247. +/* editfns.c */
  43248. +extern char *message_text;
  43249. +
  43250. +/* regex variables */
  43251. +typedef unsigned char *fail_stack_elt_t;
  43252. +typedef struct
  43253. +{
  43254. +  fail_stack_elt_t *stack;
  43255. +  unsigned size;
  43256. +  unsigned avail;            /* Offset of next open position.  */
  43257. +} fail_stack_type;
  43258. +typedef short register_info_type;
  43259. +
  43260. +extern fail_stack_type fail_stack;
  43261. +extern const char **     regstart, **     regend;
  43262. +extern const char ** old_regstart, ** old_regend;
  43263. +extern const char **best_regstart, **best_regend;
  43264. +extern register_info_type *reg_info; 
  43265. +extern const char **reg_dummy;
  43266. +extern void *reg_info_dummy;
  43267. +
  43268. +/* keyboard.c/variables CHFIXME: need to be checked on version change */
  43269. +#define HEAD_TABLE_SIZE 3
  43270. +#define SCROLL_BAR_PARTS_SIZE 3
  43271. +struct event_head {
  43272. +  Lisp_Object *var;
  43273. +  char *name;
  43274. +  Lisp_Object *kind;
  43275. +};
  43276. +
  43277. +extern struct event_head head_table[];
  43278. +extern Lisp_Object *scroll_bar_parts[];
  43279. +extern struct input_event *kbd_fetch_ptr;
  43280. +extern struct input_event volatile *kbd_store_ptr;
  43281. +
  43282. +/* search.c */
  43283. +extern struct re_registers search_regs;
  43284. +
  43285. +#if 0
  43286. +#define DBUG /* dump debug */
  43287. +#endif
  43288. +
  43289. +static char *dump_error_example[] =
  43290. +{
  43291. +    "dump-error-example-1",
  43292. +    "dump-error-example-2"
  43293. +};
  43294. +
  43295. +static void cpr() {} /* CHFIXME */
  43296. +
  43297. +static void *dump_malloc(int size)
  43298. +{
  43299. +  void *new = malloc(size);
  43300. +
  43301. +  if (!new) no_memory();
  43302. +
  43303. +  return new;
  43304. +}
  43305. +
  43306. +static void bailout(char *fn)
  43307. +{
  43308. +  if (fn) _message("%s isn't a dump file for this version of Emacs, aborting", fn);
  43309. +  else _message("Dump file isn't for this version of Emacs, aborting");
  43310. +
  43311. +  /* We are in deep trouble, as all our variables are potentially corrupt */
  43312. +  /* Therefore, no cleanup is possible */
  43313. +  /* Remove cleanup routines */
  43314. +  onexit(0);
  43315. +  /* However, the library & the memory allocation should be ok, so
  43316. +     we can exit reasonably */
  43317. +  _fail("Some system resources may have been lost");
  43318. +}
  43319. +
  43320. +void print_ranges()
  43321. +{
  43322. +#if 0
  43323. +    _message("HUNK_CODE  : %08lx .. %08lx (%08lx)",
  43324. +         first_fn, last_fn, (char *) last_fn - (char *) first_fn);
  43325. +    _message("HUNK_DATA  : %08lx .. %08lx (%08lx)",
  43326. +         &first_data, &last_data, (char *) &last_data - (char *) &first_data);
  43327. +    _message("HUNK_BSS   : %08lx .. %08lx (%08lx)",
  43328. +         &first_bss, &last_bss, (char *) &last_bss - (char *) &first_bss);
  43329. +    _message("HUNK_PURE  : %08lx .. %08lx (%08lx)"
  43330. +         , pure, (char *)pure + puresize, puresize);
  43331. +    _message("HUNK_MALLOC: %08lx .. %08lx (%08lx)",
  43332. +         malloc_hunk, malloc_hunk + malloc_hunk_size, malloc_hunk_size);
  43333. +#endif
  43334. +}
  43335. +
  43336. +/*
  43337. + * ignore:
  43338. + *    stack_bottom, IconBase, last_marked (array), interval_block_index (int)
  43339. + *      gcprolist (currently?),
  43340. + *    pending (list), returned (list)
  43341. + */
  43342. +
  43343. +int
  43344. +check_ignore(void *x)
  43345. +{
  43346. +#ifndef USE_PROTOS
  43347. +    extern int IconBase, IFFParseBase, interval_block_index, instream, cliphook;
  43348. +#else
  43349. +    extern int interval_block_index;
  43350. +#endif
  43351. +    
  43352. +    int ign = 0;
  43353. +    if((x == (void *) &IconBase)
  43354. +       || (x == (void *) &stack_bottom)
  43355. +/*        || (x == (void *) &interval_block_index) */
  43356. +       || (x == (void *) &pure)
  43357. +       || (x == (void *) &gcprolist)
  43358. +       || (x == (void *) &malloc_hunk)
  43359. +       || (x == (void *) &IFFParseBase)
  43360. +       || (x == (void *) &instream)
  43361. +       || (x == (void *) &cbuffer_pos)
  43362. +       || (x == (void *) &cliphook)
  43363. +       || (x == (void *) ((int *)&cliphook+1))
  43364. +       || (x == (void *) ((int *)&cliphook+2))
  43365. +       || (x == (void *) &specpdl_ptr)
  43366. +       || (x == (void *) &handlerlist) /* CHFIXME: ok? */
  43367. +       || (x == (void *) &catchlist) /* CHFIXME: ok? */
  43368. +       || (x == (void *) &backtrace_list) /* CHFIXME: ok? */
  43369. +       )
  43370. +    ign = 1;
  43371. +    
  43372. +    return ign;
  43373. +}
  43374. +
  43375. +/*
  43376. + *  test for candidates which may need extra handling on dump
  43377. + */
  43378. +void
  43379. +check_cand(char *s, void *start, void *end)
  43380. +{
  43381. +    unsigned int *ip, *starthit = NULL, *lasthit = NULL;
  43382. +    unsigned short int *is;
  43383. +    int range = 0;
  43384. +    int de = ((unsigned)dump_error_example[0] >> 24);
  43385. +          
  43386. +#define FIRST ((char*) &first_data) /* first symbol in data hunk */
  43387. +
  43388. +    for(is = start; (char *)is < (char *)end; is++)
  43389. +    {
  43390. +    ip = (unsigned int *) is;
  43391. +    if((((*ip >> 24) == 0x08)
  43392. +        || (*ip >> 24) == de)
  43393. +       && ! check_ignore(ip))
  43394. +    {
  43395. +        if(lasthit+1 == ip)
  43396. +        {
  43397. +        lasthit++;
  43398. +        range = 1;
  43399. +        }
  43400. +        else
  43401. +        {
  43402. +        if(range)
  43403. +        {
  43404. +            fprintf(stderr,"%s: 0x%08lx .. 0x%08lx (0x%08lx)\n",
  43405. +                s,
  43406. +                (char *)starthit-FIRST,
  43407. +                (char *)lasthit-FIRST,
  43408. +                (char*)lasthit-(char*)starthit);
  43409. +            range = 0;
  43410. +        }
  43411. +        else
  43412. +        {
  43413. +            starthit = lasthit = ip;
  43414. +        }
  43415. +        }
  43416. +    }
  43417. +    else
  43418. +    {
  43419. +        if((unsigned short *) lasthit+1 != is)
  43420. +        {
  43421. +        if(range)
  43422. +        {
  43423. +            fprintf(stderr,"%s: 0x%08lx .. 0x%08lx (0x%08lx)\n",
  43424. +                s,
  43425. +                (char *)starthit-FIRST,
  43426. +                (char *)lasthit-FIRST,
  43427. +                (char*)lasthit-(char*)starthit);
  43428. +        }
  43429. +        else if(lasthit)
  43430. +        {
  43431. +            fprintf(stderr,"%s: 0x%08lx (0x%08lx)\n", s, (char *)lasthit-FIRST, *lasthit);
  43432. +        }
  43433. +        range = 0;
  43434. +        lasthit = NULL;
  43435. +        }
  43436. +    }
  43437. +        
  43438. +    }
  43439. +    if(range)
  43440. +    {
  43441. +    fprintf(stderr,"%s: 0x%08lx .. 0x%08lx (0x%08lx)\n",
  43442. +        s,
  43443. +        (char *)starthit-FIRST,
  43444. +        (char *)lasthit-FIRST,
  43445. +        (char*)lasthit-(char*)starthit);
  43446. +    }
  43447. +    else if(lasthit)
  43448. +    {
  43449. +    fprintf(stderr,"%s: 0x%08lx\n (0x%08ls)", s, (char *)lasthit-FIRST, *lasthit);
  43450. +    }
  43451. +}
  43452. +
  43453. +void
  43454. +check_cands(void)
  43455. +{
  43456. +    fprintf(stderr,"Possible candidates for FAR or amiga_dump\n");
  43457. +    check_cand("DATA", &first_data, &last_data);
  43458. +    check_cand("BSS ", &first_bss, &last_bss);
  43459. +}
  43460. +    
  43461. +
  43462. +#ifdef DBUG
  43463. +static int mcol = 0;
  43464. +static int mrow = 0;
  43465. +static FILE *mfile;
  43466. +static char spaces[] = "                                                                                                                                                                   ";
  43467. +static mtresh = 0;
  43468. +void MInit(char *s)
  43469. +{
  43470. +    mcol = 0;
  43471. +    mrow = 0;
  43472. +    mtresh = 0;
  43473. +    mfile = fopen(s,"a");
  43474. +    fprintf(mfile,"\n***START***\n");
  43475. +}
  43476. +void MClean()
  43477. +{
  43478. +    fprintf(mfile,"\n**END**\n");
  43479. +    fclose(mfile);
  43480. +}
  43481. +#define P(x)
  43482. +void MEnter(char *s)
  43483. +{
  43484. +    if(mtresh > 100) return;
  43485. +#if 0
  43486. +    fwrite(spaces, mcol, 1, mfile);
  43487. +#endif
  43488. +    fprintf(mfile, "(%d) %s\n", mcol, s);
  43489. +    mcol += 1;
  43490. +}
  43491. +void  M(char *s)
  43492. +{
  43493. +    if(mtresh > 100) return;
  43494. +    mtresh++;
  43495. +#if 0
  43496. +    if(mcol)
  43497. +    fwrite(spaces, mcol, 1, mfile);
  43498. +#endif
  43499. +    fprintf(mfile, "(%d) %s\n", mcol, s);
  43500. +}
  43501. +void MLeave(char *s)
  43502. +{
  43503. +    if(mtresh > 100) return;
  43504. +
  43505. +    mcol -= 1;
  43506. +#if 0
  43507. +    if(mcol)
  43508. +    fwrite(spaces, mcol, 1, mfile);
  43509. +#endif
  43510. +    fprintf(mfile, "(%d) %s\n", mcol, s);
  43511. +}
  43512. +#else
  43513. +#define MInit(x)
  43514. +#define MClean()
  43515. +#define MEnter(x)
  43516. +#define M(x)
  43517. +#define P(x)
  43518. +#define MLeave(x)
  43519. +#endif
  43520. +
  43521. +static void *hunk_pointer(void *ptr)
  43522. +{
  43523. +    if (!ptr)
  43524. +    {
  43525. +    P("P0");
  43526. +    return ptr;
  43527. +    }
  43528. +
  43529. +#if 1 /* CHFIXME */
  43530. +    if(RANGE(ptr, first_fn, last_fn) && ((char *)ptr - (char *)first_fn) == 0x21c)
  43531. +    cpr();
  43532. +#endif
  43533. +    
  43534. +    if (RANGE(ptr, first_fn, last_fn))
  43535. +    {
  43536. +    P("PC");
  43537. +    return (void *)(HUNK_CODE | (char *)ptr - (char *)first_fn);
  43538. +    }
  43539. +    else if (RANGE(ptr, &first_data, &last_data))
  43540. +    {
  43541. +    P("PD");
  43542. +    return (void *)(HUNK_DATA | (char *)ptr - (char *)&first_data);
  43543. +    }
  43544. +    else if (RANGE(ptr, &first_bss, &last_bss))
  43545. +    {
  43546. +    P("PB");
  43547. +    return (void *)(HUNK_BSS | (char *)ptr - (char *)&first_bss);
  43548. +    }
  43549. +    else if (RANGE(ptr, malloc_hunk, malloc_hunk + malloc_hunk_size))
  43550. +    {
  43551. +    P("PM");
  43552. +    return (void *)(HUNK_MALLOC | (char *)ptr - malloc_hunk);
  43553. +    }
  43554. +    else if (RANGE(ptr, pure, (char *)pure + puresize))
  43555. +    {
  43556. +    P("PP");
  43557. +    return (void *)(HUNK_PURE | (char *)ptr - (char *)pure);
  43558. +    }
  43559. +    else
  43560. +    {
  43561. +    _message("hunk_pointer: cannot locate pointer 0x%08lx", ptr);
  43562. +    print_ranges();
  43563. +    bailout(0);
  43564. +    }
  43565. +}
  43566. +
  43567. +static Lisp_Object hunk_lispptr(Lisp_Object *objptr, Lisp_Object val)
  43568. +{
  43569. +    int type = val & ~VALMASK;
  43570. +    void *ptr = (void *)XPNTR(val);
  43571. +
  43572. +#if 1 /* CHFIXME */
  43573. +    if(RANGE(ptr, first_fn, last_fn) && ((char *)ptr - (char *)first_fn) == 0x21c)
  43574. +    cpr();
  43575. +#endif
  43576. +    
  43577. +    if (RANGE(ptr, first_fn, last_fn))
  43578. +    {
  43579. +    M("LC");
  43580. +    return type | HUNK_CODE | (char *)ptr - (char *)first_fn;
  43581. +    }
  43582. +    else if (RANGE(ptr, &first_data, &last_data))
  43583. +    {
  43584. +    M("LD");
  43585. +    return type | HUNK_DATA | (char *)ptr - (char *)&first_data;
  43586. +    }
  43587. +    else if (RANGE(ptr, &first_bss, &last_bss))
  43588. +    {
  43589. +    M("LB");
  43590. +    return type | HUNK_BSS | (char *)ptr - (char *)&first_bss;
  43591. +    }
  43592. +    else if (RANGE(ptr, pure, (char *)pure + puresize))
  43593. +    {
  43594. +    M("LP");
  43595. +    return type | HUNK_PURE | (char *)ptr - (char *)pure;
  43596. +    }
  43597. +    else if (RANGE(ptr, malloc_hunk, malloc_hunk + malloc_hunk_size))
  43598. +    {
  43599. +    M("LM");
  43600. +    return type | HUNK_MALLOC | (char *)ptr - malloc_hunk;
  43601. +    }
  43602. +    else 
  43603. +    {
  43604. +    _message("hunk_pointer: cannot locate pointer 0x%08lx", ptr);
  43605. +    print_ranges();
  43606. +    bailout(0);
  43607. +    }
  43608. +}
  43609. +
  43610. +static void patch_pointers ();
  43611. +
  43612. +static void patch_buffer (buf)
  43613. +     Lisp_Object buf;
  43614. +{
  43615. +  Lisp_Object tem;
  43616. +  register struct buffer *buffer = XBUFFER (buf);
  43617. +  register Lisp_Object *ptr;
  43618. +
  43619. +  buffer->text.beg = hunk_pointer (buffer->text.beg);
  43620. +  patch_pointers (&buffer->markers);
  43621. +
  43622. +  /* This is the buffer's markbit */
  43623. +  patch_pointers (&buffer->name);
  43624. +  assert(!XMARKBIT(&buffer->name)); /* CHFIXME */
  43625. +  XMARK (buffer->name);
  43626. +
  43627. +  for (ptr = &buffer->name + 1;
  43628. +       (char *)ptr < (char *)buffer + sizeof (struct buffer);
  43629. +       ptr++)
  43630. +    patch_pointers (ptr);
  43631. +}
  43632. +
  43633. +static void patch_pointers (objptr)
  43634. +     Lisp_Object *objptr;
  43635. +{
  43636. +  register Lisp_Object obj;
  43637. +
  43638. +  MEnter("O+");
  43639. + loop:
  43640. +  obj = *objptr;
  43641. +
  43642. + loop2:
  43643. +  XUNMARK (obj);
  43644. +
  43645. +  switch (XGCTYPE (obj))
  43646. +    {
  43647. +    case Lisp_String:
  43648. +    M("O1");
  43649. +    /* CHIXME */
  43650. +      {
  43651. +    register struct Lisp_String *ptr = XSTRING (obj);
  43652. +
  43653. +    if (ptr->size & MARKBIT)
  43654. +      /* A large string. */
  43655. +        _message("Lisp_String case: large_string found!");
  43656. +      }
  43657. +      *objptr = hunk_lispptr(objptr, *objptr);
  43658. +      break;
  43659. +
  43660. +    case Lisp_Vector:
  43661. +    case Lisp_Window:
  43662. +    case Lisp_Process:
  43663. +    case Lisp_Window_Configuration:
  43664. +M("O2");
  43665. +      *objptr = hunk_lispptr(objptr, *objptr);
  43666. +      {
  43667. +    register struct Lisp_Vector *ptr = XVECTOR (obj);
  43668. +    register int size = ptr->size;
  43669. +    struct Lisp_Vector *volatile ptr1 = ptr; /* CHFIXME */
  43670. +    register int i;
  43671. +
  43672. +    if (size & ARRAY_MARK_FLAG) break;   /* Already marked */
  43673. +    ptr->size |= ARRAY_MARK_FLAG; /* Else mark it */
  43674. +    for (i = 0; i < size; i++)     /* and then mark its elements */
  43675. +      patch_pointers (&ptr1->contents[i]);
  43676. +      }
  43677. +      break;
  43678. +
  43679. +    case Lisp_Compiled: /* similar to vector but avoid some recursion */
  43680. +    M("O3");
  43681. +      *objptr = hunk_lispptr(objptr, *objptr);
  43682. +      {
  43683. +    register struct Lisp_Vector *ptr = XVECTOR (obj);
  43684. +    register int size = ptr->size;
  43685. +    struct Lisp_Vector *volatile ptr1 = ptr; /* CHFIXME */
  43686. +    register int i;
  43687. +
  43688. +    if (size & ARRAY_MARK_FLAG) break;   /* Already marked */
  43689. +    ptr->size |= ARRAY_MARK_FLAG; /* Else mark it */
  43690. +    for (i = 0; i < size; i++)     /* and then mark its elements */
  43691. +        if (i != COMPILED_CONSTANTS)
  43692. +        patch_pointers (&ptr1->contents[i]);
  43693. +    objptr = &ptr1->contents[COMPILED_CONSTANTS];
  43694. +
  43695. +    goto loop;
  43696. +      }
  43697. +      break;
  43698. +
  43699. +    case Lisp_Symbol:
  43700. +    M("O4");
  43701. +      *objptr = hunk_lispptr(objptr, *objptr);
  43702. +      {
  43703. +    register struct Lisp_Symbol * volatile ptr = XSYMBOL (obj);
  43704. +    struct Lisp_Symbol *ptrx;
  43705. +
  43706. +    if (XMARKBIT (ptr->plist)) break;
  43707. +    XMARK (ptr->plist);
  43708. +    patch_pointers ((Lisp_Object *) &ptr->value);
  43709. +    patch_pointers (&ptr->function);
  43710. +    patch_pointers (&ptr->plist);
  43711. +    XSETTYPE (*(Lisp_Object *) &ptr->name, Lisp_String);
  43712. +    patch_pointers ((Lisp_Object *) &ptr->name);
  43713. +    objptr = (Lisp_Object *)&ptr->next;
  43714. +    ptr = ptr->next;
  43715. +    if (ptr)
  43716. +      {
  43717. +        ptrx = ptr;        /* Use pf ptrx avoids compiler bug on Sun */
  43718. +        XSETSYMBOL (obj, ptrx);
  43719. +        /* We can't goto loop here because *objptr doesn't contain an
  43720. +           actual Lisp_Object with valid datatype field.  */
  43721. +
  43722. +        goto loop2;
  43723. +      }
  43724. +      }
  43725. +      break;
  43726. +
  43727. +    case Lisp_Marker:
  43728. +    M("O5");
  43729. +    {
  43730. +    struct Lisp_Marker *ptr = XMARKER (obj);
  43731. +
  43732. +    *objptr = hunk_lispptr(objptr, *objptr);
  43733. +    if (XMARKBIT (ptr->chain)) break;
  43734. +    XMARK (ptr->chain);
  43735. +    ptr->buffer = hunk_pointer (ptr->buffer);
  43736. +    patch_pointers (&ptr->chain);
  43737. +    break;
  43738. +    }
  43739. +
  43740. +    case Lisp_Cons:
  43741. +    case Lisp_Buffer_Local_Value:
  43742. +    case Lisp_Some_Buffer_Local_Value:
  43743. +    M("O6");
  43744. +      *objptr = hunk_lispptr(objptr, *objptr);
  43745. +      {
  43746. +    register struct Lisp_Cons *ptr = XCONS (obj);
  43747. +    if (XMARKBIT (ptr->car)) break;
  43748. +    XMARK (ptr->car);
  43749. +    patch_pointers (&ptr->car);
  43750. +    objptr = &XCONS (obj)->cdr;
  43751. +    goto loop;
  43752. +      }
  43753. +
  43754. +    case Lisp_Buffer:
  43755. +    M("O7");
  43756. +      *objptr = hunk_lispptr(objptr, *objptr);
  43757. +      if (!XMARKBIT (XBUFFER (obj)->name))
  43758. +    patch_buffer (obj);
  43759. +      break;
  43760. +
  43761. +    case Lisp_Subr: 
  43762. +    M("O8");
  43763. +    {
  43764. +    struct Lisp_Subr *subr = XSUBR(obj);
  43765. +
  43766. +    *objptr = hunk_lispptr(objptr, *objptr);
  43767. +    if (subr->min_args & 0x8000) break;
  43768. +    subr->min_args |= 0x8000;
  43769. +    subr->function = hunk_pointer(subr->function);
  43770. +    subr->symbol_name = hunk_pointer(subr->symbol_name);
  43771. +    subr->prompt = hunk_pointer(subr->prompt);
  43772. +    if ((long)subr->doc >= 0) /* Make sure that not a doc offset */
  43773. +        subr->doc = hunk_pointer(subr->doc);
  43774. +    break;
  43775. +    }
  43776. +
  43777. +    case Lisp_Int:
  43778. +    case Lisp_Void:
  43779. +    case Lisp_Buffer_Objfwd: break;
  43780. +
  43781. +    case Lisp_Intfwd:
  43782. +    case Lisp_Boolfwd:
  43783. +    case Lisp_Objfwd:
  43784. +    case Lisp_Internal_Stream:
  43785. +      M("O9");
  43786. +      *objptr = hunk_lispptr(objptr, *objptr);
  43787. +    /* Don't bother with Lisp_Buffer_Objfwd,
  43788. +       since all markable slots in current buffer marked anyway.  */
  43789. +    /* Don't need to do Lisp_Objfwd, since the places they point
  43790. +       are protected with staticpro.  */
  43791. +      break;
  43792. +
  43793. +#ifdef LISP_FLOAT_TYPE
  43794. +    case Lisp_Float:
  43795. +      M("OA");
  43796. +      *objptr = hunk_lispptr(objptr, *objptr);
  43797. +      XMARK (XFLOAT (obj)->type);
  43798. +      break;
  43799. +#endif /* LISP_FLOAT_TYPE */
  43800. +    
  43801. +    default:
  43802. +      _message("patch_pointers: unknown XGCTYPE (obj): %ld", XGCTYPE (obj));
  43803. +      abort ();
  43804. +    }
  43805. +  MLeave("O-");
  43806. +}
  43807. +
  43808. +static void patch_chain(void **ptr, int offset)
  43809. +{
  43810. +    while (*ptr)
  43811. +    {
  43812. +    void **next = (void **)((char *)*ptr + offset);
  43813. +
  43814. +    *ptr = hunk_pointer(*ptr);
  43815. +    ptr = next;
  43816. +    }
  43817. +}
  43818. +
  43819. +#define HUNK_LISPPTR(a) a = hunk_lispptr(&a,a)
  43820. +#define HUNK_PTR(a) a = hunk_pointer(a)
  43821. +
  43822. +static void patch(void)
  43823. +{
  43824. +    Lisp_Object LO;
  43825. +    int i;
  43826. +    struct string_block *sptr;
  43827. +    struct buffer *bptr;
  43828. +    struct mem_header *mem;
  43829. +    struct backtrace *backlist;
  43830. +    struct catchtag *catch;
  43831. +    
  43832. +    MInit("MLOG.patch");
  43833. +    print_ranges(); /* CHFIXME */
  43834. +
  43835. +#ifdef DBUG
  43836. +    i = 0;
  43837. +#else
  43838. +    for (i = 0; i < staticidx; i++)
  43839. +#endif
  43840. +    {
  43841. +    if (!XMARKBIT(*staticvec[i]))
  43842. +    {
  43843. +        patch_pointers(staticvec[i]);
  43844. +        XMARK(*staticvec[i]);
  43845. +    }
  43846. +    staticvec[i] = hunk_pointer(staticvec[i]);
  43847. +    }
  43848. +#ifndef DBUG
  43849. +    /* Patch all the pointers normally used before a dump ! */
  43850. +    patch_chain((void **)&cons_block, 0);
  43851. +    patch_chain((void **)&cons_free_list, 0);
  43852. +
  43853. +    patch_chain((void **)&all_vectors, 4);
  43854. +
  43855. +    patch_chain((void **)&symbol_block, 0);
  43856. +    patch_chain((void **)&symbol_free_list, 4);
  43857. +
  43858. +    patch_chain((void **)&marker_block, 0);
  43859. +    patch_chain((void **)&marker_free_list, 4);
  43860. +
  43861. +    patch_chain((void **)&interval_block, 0);
  43862. +    patch_chain((void **)&interval_free_list, 4*sizeof(long));
  43863. +        
  43864. +    /* Strings are lots of fun */
  43865. +    patch_chain((void **)&large_string_blocks, 0);
  43866. +    sptr = first_string_block;
  43867. +    while (sptr)
  43868. +    {
  43869. +    struct string_block *next = sptr->next;
  43870. +
  43871. +    if (sptr->next) HUNK_PTR(sptr->next);
  43872. +    if (sptr->prev) HUNK_PTR(sptr->prev);
  43873. +    sptr = next;
  43874. +    }
  43875. +    HUNK_PTR(first_string_block);
  43876. +    HUNK_PTR(current_string_block);
  43877. +
  43878. +    /* More fun with buffers */
  43879. +    bptr = all_buffers;
  43880. +    if (bptr)
  43881. +    {
  43882. +    while (bptr->next)
  43883. +    {
  43884. +        struct buffer *next = bptr->next;
  43885. +
  43886. +        HUNK_PTR(bptr->next);
  43887. +        bptr = next;
  43888. +    }
  43889. +    }
  43890. +    HUNK_PTR(all_buffers);
  43891. +    HUNK_PTR(current_buffer);
  43892. +
  43893. +#ifdef LISP_FLOAT_TYPE
  43894. +    patch_chain((void **) &float_block, 0);
  43895. +    patch_chain((void **) &float_free_list, 0);
  43896. +#endif /* LISP_FLOAT_TYPE */
  43897. +
  43898. +#if 0 /* CHFIXME needed ? */
  43899. +    /* even more fun with 19.28 backtrace */
  43900. +    for (backlist = backtrace_list; backlist; )
  43901. +    {
  43902. +      struct backtrace *next = backlist->next;
  43903. +      
  43904. +      if (!XMARKBIT (*backlist->function))
  43905. +    {
  43906. +      patch_pointers(backlist->function);
  43907. +      XMARK (*backlist->function);
  43908. +    }
  43909. +      if (backlist->nargs == UNEVALLED || backlist->nargs == MANY)
  43910. +    i = 0;
  43911. +      else
  43912. +    i = backlist->nargs - 1;
  43913. +      for (; i >= 0; i--)
  43914. +    if (!XMARKBIT (backlist->args[i]))
  43915. +      {
  43916. +        patch_pointers(&backlist->args[i]);
  43917. +        XMARK (backlist->args[i]);
  43918. +      }
  43919. +      if(backlist->next) HUNK_PTR(backlist->next);
  43920. +      backlist = next;
  43921. +    }  
  43922. +    HUNK_PTR(backtrace_list);
  43923. +
  43924. +    for (catch = catchlist; catch;)
  43925. +    {
  43926. +      struct catchtag *next = catch->next;
  43927. +    
  43928. +      patch_pointers (&catch->tag);
  43929. +      patch_pointers (&catch->val);
  43930. +      HUNK_PTR(catch->backlist);
  43931. +      HUNK_PTR(catch->handlerlist);
  43932. +
  43933. +      if(catch->next) HUNK_PTR(catch->next);
  43934. +      catch = next;
  43935. +    }
  43936. +    HUNK_PTR(catchlist);
  43937. +#endif
  43938. +    
  43939. +/*     HUNK_PTR(gcprolist); CHFIXME*/
  43940. +    HUNK_PTR(stack_copy);
  43941. +
  43942. +    HUNK_PTR(kbd_macro_buffer);
  43943. +#if 0
  43944. +    HUNK_PTR(minibuf_save_vector);
  43945. +#endif
  43946. +    HUNK_PTR(searchbuf.buffer);
  43947. +    HUNK_PTR(searchbuf.fastmap);
  43948. +    HUNK_PTR(specpdl);
  43949. +    HUNK_PTR(read_buffer);
  43950. +    
  43951. +#if 0 /* CHFIXME */
  43952. +    MouseMap = hunk_lispptr(&MouseMap, MouseMap);
  43953. +#endif
  43954. +    HUNK_LISPPTR( current_global_map );
  43955. +    HUNK_LISPPTR( global_map );
  43956. +    HUNK_LISPPTR( meta_map );
  43957. +    HUNK_LISPPTR( control_x_map );
  43958. +
  43959. +    HUNK_LISPPTR( selected_window );
  43960. +
  43961. +    HUNK_LISPPTR( Qvariable_documentation );
  43962. +
  43963. +#ifndef MULTI_FRAME
  43964. +    /* CHFIXME: use makro */
  43965. +    HUNK_LISPPTR( the_only_frame.root_window );
  43966. +#else
  43967. +    you lose;
  43968. +#endif
  43969. +    
  43970. +    mem = free_list;
  43971. +    HUNK_PTR( free_list );
  43972. +    while (mem)
  43973. +    {
  43974. +    struct mem_header *next = mem->next;
  43975. +
  43976. +    HUNK_PTR( mem->prev );
  43977. +    HUNK_PTR( mem->next );
  43978. +    mem = next;
  43979. +    }
  43980. +
  43981. +    for (i = 0; i <= 4; i++)
  43982. +    HUNK_PTR( callint_argfuns[i] );
  43983. +
  43984. +    HUNK_PTR( fail_stack.stack );
  43985. +    HUNK_PTR( regstart );
  43986. +    HUNK_PTR( regend );
  43987. +    HUNK_PTR( old_regstart );
  43988. +    HUNK_PTR( old_regend );
  43989. +    HUNK_PTR( best_regstart );
  43990. +    HUNK_PTR( best_regend );
  43991. +    HUNK_PTR( reg_info );
  43992. +    HUNK_PTR( reg_dummy );
  43993. +    HUNK_PTR( reg_info_dummy );
  43994. +    
  43995. +    for(i = 0; i < HEAD_TABLE_SIZE; i++)
  43996. +    {
  43997. +    HUNK_PTR( head_table[i].var  );
  43998. +    HUNK_PTR( head_table[i].name );
  43999. +    HUNK_PTR( head_table[i].kind );
  44000. +    }
  44001. +    for(i = 0; i < SCROLL_BAR_PARTS_SIZE; i++)
  44002. +    {
  44003. +    HUNK_PTR( scroll_bar_parts[i] );
  44004. +    }
  44005. +    HUNK_PTR(kbd_fetch_ptr);
  44006. +    HUNK_PTR(kbd_store_ptr);
  44007. +    XSET(LO, Lisp_Buffer, &buffer_local_types);
  44008. +    patch_buffer(LO);
  44009. +    
  44010. +    HUNK_LISPPTR(Qdirectory_files);
  44011. +    HUNK_LISPPTR(Qfile_name_completion);
  44012. +    HUNK_LISPPTR(Qfile_name_all_completions);
  44013. +    HUNK_LISPPTR(Qfile_attributes);
  44014. +    HUNK_LISPPTR(Qset_visited_file_modtime);
  44015. +/*    HUNK_LISPPTR(stream_process);*/
  44016. +
  44017. +    HUNK_PTR(message_text);
  44018. +
  44019. +    /* search.c */
  44020. +    HUNK_PTR(search_regs.start);
  44021. +    HUNK_PTR(search_regs.end);
  44022. +#endif
  44023. +    MClean();
  44024. +    check_cands();
  44025. +}
  44026. +
  44027. +static dump(char *fn)
  44028. +{
  44029. +    BPTR fd;
  44030. +    long size;
  44031. +
  44032. +    fd = Open(fn, MODE_NEWFILE);
  44033. +    if (!fd)
  44034. +      {
  44035. +        static void unpatch(void);
  44036. +
  44037. +        unpatch();
  44038. +        _fail("emacs hasn't been dumped (%s missing)", fn);
  44039. +      }
  44040. +
  44041. +    Write(fd, (char *)&puresize, sizeof puresize);
  44042. +    Write(fd, (char *)&malloc_hunk_size, sizeof malloc_hunk_size);
  44043. +    Write(fd, (char *)&first_data, (char *)&last_data - (char *)&first_data);
  44044. +    Write(fd, (char *)&first_bss, (char *)&last_bss - (char *)&first_bss);
  44045. +    Write(fd, (char *)pure, puresize);
  44046. +    Write(fd, (char *)malloc_hunk, malloc_hunk_size);
  44047. +    Write(fd, (char *)&staticidx, sizeof staticidx);
  44048. +    Write(fd, (char *)staticvec, staticidx * sizeof(Lisp_Object *));
  44049. +    size = (char *)last_fn - (char *)first_fn;
  44050. +    Write(fd, (char *)&size, sizeof size);
  44051. +
  44052. +    Close(fd);
  44053. +}
  44054. +
  44055. +static void *make_pointer(void *ptr)
  44056. +{
  44057. +    int hunk = (long)ptr & HUNK_MASK;
  44058. +    int offset = (long)ptr & (VALMASK & ~HUNK_MASK);
  44059. +
  44060. +    if (!ptr)
  44061. +    {
  44062. +    P("P0");
  44063. +    return 0;
  44064. +    }
  44065. +
  44066. +    if (hunk == HUNK_CODE)
  44067. +    {
  44068. +    P("PC");
  44069. +    return (char *)first_fn + offset;
  44070. +    }
  44071. +    if (hunk == HUNK_DATA)
  44072. +    {
  44073. +    P("PD");
  44074. +    return (char *)&first_data + offset;
  44075. +    }
  44076. +    if (hunk == HUNK_BSS)
  44077. +    {
  44078. +    P("PB");
  44079. +    return (char *)&first_bss + offset;
  44080. +    }
  44081. +    if (hunk == HUNK_PURE)
  44082. +    {
  44083. +    P("PP");
  44084. +    return (char *)pure + offset;
  44085. +    }
  44086. +    if (hunk == HUNK_MALLOC)
  44087. +    {
  44088. +    P("PM");
  44089. +    return malloc_hunk + offset;
  44090. +    }
  44091. +    assert(0);
  44092. +}
  44093. +
  44094. +static Lisp_Object make_lispptr(Lisp_Object *objptr, Lisp_Object obj)
  44095. +{
  44096. +    long val = XUINT(obj);
  44097. +    int hunk = val & HUNK_MASK;
  44098. +    int offset = val & ~HUNK_MASK;
  44099. +    char *ptr;
  44100. +
  44101. +    assert(obj); /* CHFIXME */
  44102. +    if (hunk == HUNK_CODE)
  44103. +    {
  44104. +    M("LC");
  44105. +    ptr = (char *)first_fn + offset;
  44106. +    }
  44107. +    else if (hunk == HUNK_DATA)
  44108. +    {
  44109. +    M("LD");
  44110. +    ptr = (char *)&first_data + offset;
  44111. +    }
  44112. +    else if (hunk == HUNK_BSS)
  44113. +    {
  44114. +    M("LB");
  44115. +    ptr = (char *)&first_bss + offset;
  44116. +    }
  44117. +    else if (hunk == HUNK_PURE)
  44118. +    {
  44119. +    M("LP");
  44120. +    ptr = (char *)pure + offset;
  44121. +    } 
  44122. +    else if (hunk == HUNK_MALLOC)
  44123. +    {
  44124. +    M("LM");
  44125. +    ptr = malloc_hunk + offset;
  44126. +    }
  44127. +    else assert(0);
  44128. +
  44129. +    assert((int) ptr > 0); /* CHFIXME */
  44130. +    OXSETPNTR(obj, (long)ptr); /* CHFIXME */
  44131. +    return obj;
  44132. +}
  44133. +
  44134. +static void unpatch_pointers ();
  44135. +
  44136. +static void unpatch_buffer (buf)
  44137. +     Lisp_Object buf;
  44138. +{
  44139. +  Lisp_Object tem;
  44140. +  register struct buffer *buffer = XBUFFER (buf);
  44141. +  register Lisp_Object *ptr;
  44142. +
  44143. +  buffer->text.beg = make_pointer (buffer->text.beg);
  44144. +  unpatch_pointers (&buffer->markers);
  44145. +
  44146. +  /* This is the buffer's markbit */
  44147. +  XUNMARK (buffer->name);
  44148. +  unpatch_pointers (&buffer->name);
  44149. +
  44150. +  for (ptr = &buffer->name + 1;
  44151. +       (char *)ptr < (char *)buffer + sizeof (struct buffer);
  44152. +       ptr++)
  44153. +    unpatch_pointers (ptr);
  44154. +}
  44155. +
  44156. +static void unpatch_pointers (objptr)
  44157. +     Lisp_Object *objptr;
  44158. +{
  44159. +  register Lisp_Object obj;
  44160. +  Lisp_Object obj2;
  44161. +
  44162. +  MEnter("O+");
  44163. + loop:
  44164. +  obj = *objptr;
  44165. +
  44166. + loop2:
  44167. +  XUNMARK (obj);
  44168. +
  44169. +  switch (XGCTYPE (obj))
  44170. +    {
  44171. +    case Lisp_String:
  44172. +    M("O1");
  44173. +      *objptr = make_lispptr(objptr, *objptr);
  44174. +      break;
  44175. +
  44176. +    case Lisp_Vector:
  44177. +    case Lisp_Window:
  44178. +    case Lisp_Process:
  44179. +    case Lisp_Window_Configuration:
  44180. +    M("O2");
  44181. +      obj = *objptr = make_lispptr(objptr, *objptr);
  44182. +      {
  44183. +    register struct Lisp_Vector *ptr = XVECTOR (obj);
  44184. +    register int size;
  44185. +    struct Lisp_Vector *volatile ptr1 = ptr; /* CHFIXME */
  44186. +    register int i;
  44187. +
  44188. +    if (!(ptr->size & ARRAY_MARK_FLAG)) break;   /* Already unmarked */
  44189. +    size = ptr->size &= ~ARRAY_MARK_FLAG; /* Else unmark it */
  44190. +    for (i = 0; i < size; i++)     /* and then unmark its elements */
  44191. +      unpatch_pointers (&ptr1->contents[i]);
  44192. +      }
  44193. +      break;
  44194. +
  44195. +    case Lisp_Compiled: /* similar to vector but avoid some recursion */
  44196. +    M("O3");
  44197. +      obj = *objptr = make_lispptr(objptr, *objptr);
  44198. +      {
  44199. +    register struct Lisp_Vector *ptr = XVECTOR (obj);
  44200. +    register int size = ptr->size;
  44201. +    struct Lisp_Vector *volatile ptr1 = ptr; /* CHFIXME */
  44202. +    register int i;
  44203. +
  44204. +    if (!(size & ARRAY_MARK_FLAG)) break;   /* Already unmarked */
  44205. +    size = ptr->size &= ~ARRAY_MARK_FLAG; /* Else unmark it */
  44206. +    for (i = 0; i < size; i++)     /* and then mark its elements */
  44207. +        if (i != COMPILED_CONSTANTS)
  44208. +        unpatch_pointers (&ptr1->contents[i]);
  44209. +    objptr = (Lisp_Object *) &ptr1->contents[COMPILED_CONSTANTS];
  44210. +
  44211. +    goto loop;
  44212. +      }
  44213. +      break;
  44214. +
  44215. +    case Lisp_Symbol:
  44216. +    M("O4");
  44217. +    /* due to goto below objptr may not point to object containing
  44218. +       SYMBOL type information so let obj care for symbol type */
  44219. +      obj2 = *objptr = make_lispptr(objptr, *objptr);
  44220. +      {
  44221. +    register struct Lisp_Symbol * volatile ptr = XSYMBOL (obj2);
  44222. +    struct Lisp_Symbol *ptrx;
  44223. +
  44224. +    if (!XMARKBIT (ptr->plist)) break;
  44225. +    XUNMARK (ptr->plist);
  44226. +    unpatch_pointers ((Lisp_Object *) &ptr->value);
  44227. +    unpatch_pointers (&ptr->function);
  44228. +    unpatch_pointers (&ptr->plist);
  44229. +    unpatch_pointers ((Lisp_Object *) &ptr->name);
  44230. +    ptr->name = XSTRING (*(Lisp_Object *)&ptr->name);
  44231. +    objptr = (Lisp_Object *)&ptr->next;
  44232. +    ptr = ptr->next;
  44233. +    if (ptr)
  44234. +      {
  44235. +        ptrx = ptr;        /* Use pf ptrx avoids compiler bug on Sun */
  44236. +        XSETSYMBOL (obj, ptrx);
  44237. +
  44238. +        /* We can't goto loop here because *objptr doesn't contain an
  44239. +           actual Lisp_Object with valid datatype field.  */
  44240. +
  44241. +        goto loop2;
  44242. +      }
  44243. +      }
  44244. +      break;
  44245. +
  44246. +    case Lisp_Marker:
  44247. +    M("O5");
  44248. +     obj = *objptr = make_lispptr(objptr, *objptr);
  44249. +      {
  44250. +    struct Lisp_Marker *ptr = XMARKER (obj);
  44251. +    
  44252. +    if (!XMARKBIT (ptr->chain)) break;
  44253. +    XUNMARK (ptr->chain);
  44254. +    ptr->buffer = make_pointer (ptr->buffer);
  44255. +    unpatch_pointers (&ptr->chain);
  44256. +      }
  44257. +      break;
  44258. +
  44259. +    case Lisp_Cons:
  44260. +    case Lisp_Buffer_Local_Value:
  44261. +    case Lisp_Some_Buffer_Local_Value:
  44262. +    M("O6");
  44263. +      obj = *objptr = make_lispptr(objptr, *objptr);
  44264. +      {
  44265. +    register struct Lisp_Cons *ptr = XCONS (obj);
  44266. +    if (!XMARKBIT (ptr->car)) break;
  44267. +    XUNMARK (ptr->car);
  44268. +    unpatch_pointers (&ptr->car);
  44269. +    objptr = &ptr->cdr;
  44270. +
  44271. +    goto loop;
  44272. +      }
  44273. +
  44274. +    case Lisp_Buffer:
  44275. +    M("O7");
  44276. +      obj = *objptr = make_lispptr(objptr, *objptr);
  44277. +      if (XMARKBIT (XBUFFER (obj)->name))
  44278. +    unpatch_buffer (obj);
  44279. +      break;
  44280. +
  44281. +    case Lisp_Subr:
  44282. +    M("O8");
  44283. +    obj = *objptr = make_lispptr(objptr, *objptr);
  44284. +    {
  44285. +    struct Lisp_Subr *subr = XSUBR(obj);
  44286. +    
  44287. +    if (!(subr->min_args & 0x8000)) break;
  44288. +    subr->min_args &= ~0x8000;
  44289. +    subr->function = make_pointer(subr->function);
  44290. +    subr->symbol_name = make_pointer(subr->symbol_name);
  44291. +    subr->prompt = make_pointer(subr->prompt);
  44292. +    if ((long)subr->doc >= 0) /* Make sure that not a doc offset */
  44293. +        subr->doc = make_pointer(subr->doc);
  44294. +    break;
  44295. +    }
  44296. +
  44297. +    case Lisp_Int:
  44298. +    case Lisp_Void:
  44299. +    case Lisp_Buffer_Objfwd: break;
  44300. +
  44301. +    case Lisp_Intfwd:
  44302. +    case Lisp_Boolfwd:
  44303. +    case Lisp_Objfwd:
  44304. +    case Lisp_Internal_Stream:
  44305. +    M("O9");
  44306. +      *objptr = make_lispptr(objptr, *objptr);
  44307. +    /* Don't bother with Lisp_Buffer_Objfwd,
  44308. +       since all markable slots in current buffer marked anyway.  */
  44309. +    /* Don't need to do Lisp_Objfwd, since the places they point
  44310. +       are protected with staticpro.  */
  44311. +      break;
  44312. +
  44313. +#ifdef LISP_FLOAT_TYPE
  44314. +    case Lisp_Float:
  44315. +      M("OA");
  44316. +      obj = *objptr = make_lispptr(objptr, *objptr);
  44317. +      XUNMARK (XFLOAT (obj)->type);
  44318. +      break;
  44319. +#endif /* LISP_FLOAT_TYPE */
  44320. +
  44321. +    default:
  44322. +      abort ();
  44323. +    }
  44324. +  MLeave("O-");
  44325. +}
  44326. +
  44327. +static void unpatch_chain(void **ptr, int offset)
  44328. +{
  44329. +    while (*ptr)
  44330. +    {
  44331. +    *ptr = make_pointer(*ptr);
  44332. +    ptr = (void **)((char *)*ptr + offset);
  44333. +    }
  44334. +}
  44335. +
  44336. +/* CHFIXME: for all! */
  44337. +#define MAKE_LISPPTR(a) a = make_lispptr(&a,a)
  44338. +#define MAKE_PTR(a) a = make_pointer(a)
  44339. +
  44340. +/* Reconstructs the addresses that were patched */
  44341. +static void unpatch(void)
  44342. +{
  44343. +    Lisp_Object LO;
  44344. +    int fd, i;
  44345. +    struct string_block *sptr;
  44346. +    struct buffer *bptr;
  44347. +    struct mem_header *mem;
  44348. +    struct backtrace *backlist;
  44349. +    struct catchtag *catch;
  44350. +
  44351. +    print_ranges(); /* CHFIXME */
  44352. +
  44353. +    MInit("MLOG.unpatch");
  44354. +#ifdef DBUG
  44355. +    i = 0;
  44356. +#else
  44357. +    for (i = 0; i < staticidx; i++)
  44358. +#endif
  44359. +    {
  44360. +    staticvec[i] = make_pointer(staticvec[i]);
  44361. +    if (XMARKBIT(*staticvec[i]))
  44362. +    {
  44363. +        XUNMARK(*staticvec[i]);
  44364. +        unpatch_pointers(staticvec[i]);
  44365. +    }
  44366. +    }
  44367. +
  44368. +#ifndef DBUG
  44369. +    /* Unpatch all the pointers normally used before a dump ! */
  44370. +    unpatch_chain((void **)&cons_block, 0);
  44371. +    unpatch_chain((void **)&cons_free_list, 0);
  44372. +
  44373. +    unpatch_chain((void **)&all_vectors, 4);
  44374. +
  44375. +    unpatch_chain((void **)&symbol_block, 0);
  44376. +    unpatch_chain((void **)&symbol_free_list, 4);
  44377. +
  44378. +    unpatch_chain((void **)&marker_block, 0);
  44379. +    unpatch_chain((void **)&marker_free_list, 4);
  44380. +
  44381. +    unpatch_chain((void **)&interval_block, 0);
  44382. +    unpatch_chain((void **)&interval_free_list, 4*sizeof(long));
  44383. +        
  44384. +    /* Strings are lots of fun */
  44385. +    unpatch_chain((void **)&large_string_blocks, 0);
  44386. +    sptr = MAKE_PTR(first_string_block);
  44387. +    MAKE_PTR(current_string_block);
  44388. +    while (sptr)
  44389. +    {
  44390. +    if (sptr->next) MAKE_PTR(sptr->next);
  44391. +    if (sptr->prev) MAKE_PTR(sptr->prev);
  44392. +    sptr = sptr->next;
  44393. +    }
  44394. +
  44395. +    /* More fun with buffers */
  44396. +    bptr = MAKE_PTR(all_buffers);
  44397. +    if (bptr)
  44398. +    {
  44399. +    while (bptr->next)
  44400. +    {
  44401. +        MAKE_PTR(bptr->next);
  44402. +        bptr = bptr->next;
  44403. +    }
  44404. +    }
  44405. +    MAKE_PTR(current_buffer);
  44406. +
  44407. +#ifdef LISP_FLOAT_TYPE
  44408. +    unpatch_chain((void **) &float_block, 0);
  44409. +    unpatch_chain((void **) &float_free_list, 0);
  44410. +#endif /* LISP_FLOAT_TYPE */
  44411. +    
  44412. +#if 0 /* CHFIXME needed ? */
  44413. +    /* even more fun with 19.28 backtrace */
  44414. +    MAKE_PTR(backtrace_list);
  44415. +    for (backlist = backtrace_list; backlist; backlist = backlist->next)
  44416. +    {
  44417. +      if(backlist->next) MAKE_PTR(backlist->next);
  44418. +      
  44419. +      if (XMARKBIT (*backlist->function))
  44420. +    {
  44421. +      XUNMARK (*backlist->function);
  44422. +      unpatch_pointers(backlist->function);
  44423. +    }
  44424. +      if (backlist->nargs == UNEVALLED || backlist->nargs == MANY)
  44425. +    i = 0;
  44426. +      else
  44427. +    i = backlist->nargs - 1;
  44428. +      for (; i >= 0; i--)
  44429. +    if (XMARKBIT (backlist->args[i]))
  44430. +      {
  44431. +        XUNMARK (backlist->args[i]);
  44432. +        unpatch_pointers(&backlist->args[i]);
  44433. +      }
  44434. +    }  
  44435. +
  44436. +    MAKE_PTR(catchlist);
  44437. +    for (catch = catchlist; catch; catch = catch->next)
  44438. +    {
  44439. +      if(catch->next) MAKE_PTR(catch->next);
  44440. +    
  44441. +      unpatch_pointers (&catch->tag);
  44442. +      unpatch_pointers (&catch->val);
  44443. +      MAKE_PTR(catch->backlist);
  44444. +      MAKE_PTR(catch->handlerlist);
  44445. +    }
  44446. +#endif
  44447. +    
  44448. +/*    MAKE_PTR(gcprolist); CHFIXME */
  44449. +    MAKE_PTR(stack_copy);
  44450. +
  44451. +    MAKE_PTR(kbd_macro_buffer);
  44452. +#if 0
  44453. +    MAKE_PTR(minibuf_save_vector);
  44454. +#endif
  44455. +    MAKE_PTR(searchbuf.buffer);
  44456. +    MAKE_PTR(searchbuf.fastmap);
  44457. +    MAKE_PTR(specpdl);
  44458. +    MAKE_PTR(read_buffer);
  44459. +
  44460. +#if 0 /* CHFIXME */
  44461. +    MouseMap = make_lispptr(&MouseMap, MouseMap);
  44462. +#endif
  44463. +    MAKE_LISPPTR(current_global_map);
  44464. +    MAKE_LISPPTR(global_map);
  44465. +    MAKE_LISPPTR(meta_map);
  44466. +    MAKE_LISPPTR(control_x_map);
  44467. +
  44468. +    MAKE_LISPPTR(selected_window);
  44469. +
  44470. +    MAKE_LISPPTR(Qvariable_documentation);
  44471. +
  44472. +#ifndef MULTI_FRAME
  44473. +    /* CHFIXME: use makro */
  44474. +    MAKE_LISPPTR(the_only_frame.root_window);
  44475. +#else
  44476. +    you lose;
  44477. +#endif
  44478. +
  44479. +    MAKE_PTR(free_list);
  44480. +    mem = free_list;
  44481. +    while (mem)
  44482. +    {
  44483. +    MAKE_PTR(mem->prev);
  44484. +    MAKE_PTR(mem->next);
  44485. +    mem = mem->next;
  44486. +    }
  44487. +
  44488. +    for (i = 0; i <= 4; i++)
  44489. +    MAKE_PTR(callint_argfuns[i]);
  44490. +
  44491. +    MAKE_PTR(fail_stack.stack);
  44492. +    MAKE_PTR(regstart);
  44493. +    MAKE_PTR(regend);
  44494. +    MAKE_PTR(old_regstart);
  44495. +    MAKE_PTR(old_regend);
  44496. +    MAKE_PTR(best_regstart);
  44497. +    MAKE_PTR(best_regend);
  44498. +    MAKE_PTR(reg_info);
  44499. +    MAKE_PTR(reg_dummy);
  44500. +    MAKE_PTR(reg_info_dummy);
  44501. +    
  44502. +    for(i = 0; i < HEAD_TABLE_SIZE; i++)
  44503. +    {
  44504. +    MAKE_PTR(head_table[i].var);
  44505. +    MAKE_PTR(head_table[i].name);
  44506. +    MAKE_PTR(head_table[i].kind);
  44507. +    }
  44508. +    for(i = 0; i < SCROLL_BAR_PARTS_SIZE; i++)
  44509. +    MAKE_PTR(scroll_bar_parts[i]);
  44510. +
  44511. +    MAKE_PTR(kbd_fetch_ptr);
  44512. +    MAKE_PTR(kbd_store_ptr);
  44513. +
  44514. +    XSET(LO, Lisp_Buffer, &buffer_local_types);
  44515. +    unpatch_buffer(LO);
  44516. +    
  44517. +    MAKE_LISPPTR(Qdirectory_files);
  44518. +    MAKE_LISPPTR(Qfile_name_completion);
  44519. +    MAKE_LISPPTR(Qfile_name_all_completions);
  44520. +    MAKE_LISPPTR(Qfile_attributes);
  44521. +    MAKE_LISPPTR(Qset_visited_file_modtime);
  44522. +/*    MAKE_LISPPTR(stream_process);*/
  44523. +
  44524. +    MAKE_PTR(message_text);
  44525. +
  44526. +    /* search.c */
  44527. +    MAKE_PTR(search_regs.start);
  44528. +    MAKE_PTR(search_regs.end);
  44529. +#endif
  44530. +    MClean();
  44531. +}
  44532. +
  44533. +static undump(char *fn)
  44534. +{
  44535. +  BPTR fd;
  44536. +  long code_size;
  44537. +  char *_malloc_hunk;
  44538. +  int *_pure;
  44539. +  /*extern struct Library *FifoBase;
  44540. +  struct Library *_FifoBase = FifoBase;*/
  44541. +
  44542. +  fd = Open(fn, MODE_OLDFILE);
  44543. +  if (!fd) return 0;
  44544. +
  44545. +  Read(fd, (char *)&puresize, sizeof puresize);
  44546. +  Read(fd, (char *)&malloc_hunk_size, sizeof malloc_hunk_size);
  44547. +  _pure = dump_malloc(puresize);
  44548. +  _malloc_hunk = dump_malloc(malloc_hunk_size + pre_alloc);
  44549. +  Read(fd, (char *)&first_data, (char *)&last_data - (char *)&first_data);
  44550. +  Read(fd, (char *)&first_bss, (char *)&last_bss - (char *)&first_bss);
  44551. +  Read(fd, (char *)_pure, puresize);
  44552. +  Read(fd, (char *)_malloc_hunk, malloc_hunk_size);
  44553. +  Read(fd, (char *)&staticidx, sizeof staticidx);
  44554. +  Read(fd, (char *)staticvec, staticidx * sizeof(Lisp_Object *));
  44555. +  /*FifoBase = _FifoBase;*/
  44556. +  if (Read(fd, (char *)&code_size, sizeof code_size) != sizeof code_size ||
  44557. +      code_size != (char *)last_fn - (char *)first_fn)
  44558. +  {
  44559. +      Close(fd);
  44560. +      bailout(fn);
  44561. +  }
  44562. +
  44563. +  Close(fd);
  44564. +  malloc_hunk = _malloc_hunk;
  44565. +  pure = _pure;
  44566. +  return 1;
  44567. +}
  44568. +
  44569. +void map_out_data(char *fn)
  44570. +{
  44571. +    if (amiga_initialized) error("You can only dump once !");
  44572. +    Fgarbage_collect();
  44573. +
  44574. +#if 0 /* CHFIXME */
  44575. +    dump("EMACS-DATA.pre");
  44576. +#endif
  44577. +    patch();
  44578. +    dump(fn);
  44579. +    unpatch();
  44580. +#if 0
  44581. +    dump("EMACS-DATA.post");
  44582. +#endif
  44583. +    amiga_initialized = 1;
  44584. +}
  44585. +
  44586. +#ifndef MULTI_FRAME
  44587. +static struct x_display A_Display;
  44588. +#else
  44589. +you lose */
  44590. +#endif
  44591. +
  44592. +void map_in_data(int load)
  44593. +{
  44594. +    if (load && undump(NAME_DATA))
  44595. +    {
  44596. +    unpatch();
  44597. +#if 0 /*CHFIXME */
  44598. +    current_screen = new_screen = temp_screen = 0;
  44599. +    message_buf = 0;
  44600. +#endif
  44601. +    chars_wasted = 0;
  44602. +    copybuf = 0;
  44603. +    initialized = amiga_initialized = 1;
  44604. +    
  44605. +    /* CHFIXME: force errors if used but not patched */
  44606. +    handlerlist = (void *) -1;
  44607. +    catchlist = (void *)-1;
  44608. +        backtrace_list = (void *)-1;
  44609. +#if 0
  44610. +    FRAME_EXTERNAL_MENU_BAR(selected_frame) = 1; /* CHFIXME where to put? */
  44611. +#endif
  44612. +    }
  44613. +    else
  44614. +      {
  44615. +    malloc_hunk = dump_malloc(malloc_hunk_size + pre_alloc);
  44616. +    pure = dump_malloc(puresize);
  44617. +      }
  44618. +#ifndef MULTI_FRAME
  44619. +    FRAME_DISPLAY(selected_frame) = &A_Display;
  44620. +#else
  44621. +    you lose again.
  44622. +#endif
  44623. +    amiga_undump_reinit();
  44624. +}
  44625. +
  44626. +void
  44627. +early_init_amiga_dump()
  44628. +{
  44629. +#ifndef MULTI_FRAME
  44630. +    FRAME_DISPLAY(selected_frame) = &A_Display;
  44631. +#else
  44632. +    you lose again.
  44633. +#endif
  44634. +}
  44635. diff -ru --new-file baseline/fsf/emacs/src/amiga_dump_protos.h amiga/fsf/emacs/src/amiga_dump_protos.h
  44636. --- baseline/fsf/emacs/src/amiga_dump_protos.h    Wed Dec 31 17:00:00 1969
  44637. +++ amiga/fsf/emacs/src/amiga_dump_protos.h    Sun Oct 15 17:09:08 1995
  44638. @@ -0,0 +1,48 @@
  44639. +/* Prototypes for functions defined in
  44640. +amiga_dump.c
  44641. + */
  44642. +
  44643. +extern void * __far first_fn;
  44644. +
  44645. +extern void * __far last_fn;
  44646. +
  44647. +void cpr(void);
  44648. +
  44649. +void * dump_malloc(int );
  44650. +
  44651. +void bailout(char * );
  44652. +
  44653. +void print_ranges(void);
  44654. +
  44655. +void * hunk_pointer(void * );
  44656. +
  44657. +int hunk_lispptr(int * , int );
  44658. +
  44659. +void patch_buffer(int buf);
  44660. +
  44661. +void patch_pointers(int * objptr);
  44662. +
  44663. +void patch_chain(void ** , int );
  44664. +
  44665. +void patch(void);
  44666. +
  44667. +int dump(char * );
  44668. +
  44669. +void * make_pointer(void * );
  44670. +
  44671. +int make_lispptr(int * , int );
  44672. +
  44673. +void unpatch_buffer(int buf);
  44674. +
  44675. +void unpatch_pointers(int * objptr);
  44676. +
  44677. +void unpatch_chain(void ** , int );
  44678. +
  44679. +void unpatch(void);
  44680. +
  44681. +int undump(char * );
  44682. +
  44683. +void map_out_data(char * );
  44684. +
  44685. +void map_in_data(int );
  44686. +
  44687. diff -ru --new-file baseline/fsf/emacs/src/amiga_fns.c amiga/fsf/emacs/src/amiga_fns.c
  44688. --- baseline/fsf/emacs/src/amiga_fns.c    Wed Dec 31 17:00:00 1969
  44689. +++ amiga/fsf/emacs/src/amiga_fns.c    Sun Oct 15 17:09:10 1995
  44690. @@ -0,0 +1,547 @@
  44691. +/* Functions for the Amiga Intuition Windows system.
  44692. +   Copyright (C) 1989, 1992, 1993, 1994 Free Software Foundation, Inc.
  44693. +
  44694. +This file is part of GNU Emacs.
  44695. +
  44696. +GNU Emacs is free software; you can redistribute it and/or modify
  44697. +it under the terms of the GNU General Public License as published by
  44698. +the Free Software Foundation; either version 2, or (at your option)
  44699. +any later version.
  44700. +
  44701. +GNU Emacs is distributed in the hope that it will be useful,
  44702. +but WITHOUT ANY WARRANTY; without even the implied warranty of
  44703. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  44704. +GNU General Public License for more details.
  44705. +
  44706. +You should have received a copy of the GNU General Public License
  44707. +along with GNU Emacs; see the file COPYING.  If not, write to
  44708. +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  44709. +
  44710. +/* Adapted from xnfs.c, 08/27/94 Carsten Heyl,
  44711. +   some stuff moved from David Gays amiga_screen.c  */
  44712. +
  44713. +#include <exec/types.h>
  44714. +#include <libraries/gadtools.h>
  44715. +#include <intuition/intuition.h>
  44716. +#include <proto/exec.h>
  44717. +#include <proto/dos.h>
  44718. +#include <proto/gadtools.h>
  44719. +#include <proto/intuition.h>
  44720. +
  44721. +#include "config.h"
  44722. +#include "lisp.h"
  44723. +#include "frame.h"
  44724. +#include "amiga.h"
  44725. +
  44726. +#ifdef USE_PROTOS
  44727. +#include "protos.h"
  44728. +#endif
  44729. +
  44730. +/* CHFIXME: change more functions to amiga version */
  44731. +
  44732. +/* Evaluate this expression to rebuild the section of syms_of_xfns
  44733. +   that initializes and staticpros the symbols declared below.  Note
  44734. +   that Emacs 18 has a bug that keeps C-x C-e from being able to
  44735. +   evaluate this expression.
  44736. +
  44737. +(progn
  44738. +  ;; Accumulate a list of the symbols we want to initialize from the
  44739. +  ;; declarations at the top of the file.
  44740. +  (goto-char (point-min))
  44741. +  (search-forward "/\*&&& symbols declared here &&&*\/\n")
  44742. +  (let (symbol-list)
  44743. +    (while (looking-at "Lisp_Object \\(Q[a-z_]+\\)")
  44744. +      (setq symbol-list
  44745. +        (cons (buffer-substring (match-beginning 1) (match-end 1))
  44746. +          symbol-list))
  44747. +      (forward-line 1))
  44748. +    (setq symbol-list (nreverse symbol-list))
  44749. +    ;; Delete the section of syms_of_... where we initialize the symbols.
  44750. +    (search-forward "\n  /\*&&& init symbols here &&&*\/\n")
  44751. +    (let ((start (point)))
  44752. +      (while (looking-at "^  Q")
  44753. +    (forward-line 2))
  44754. +      (kill-region start (point)))
  44755. +    ;; Write a new symbol initialization section.
  44756. +    (while symbol-list
  44757. +      (insert (format "  %s = intern (\"" (car symbol-list)))
  44758. +      (let ((start (point)))
  44759. +    (insert (substring (car symbol-list) 1))
  44760. +    (subst-char-in-region start (point) ?_ ?-))
  44761. +      (insert (format "\");\n  staticpro (&%s);\n" (car symbol-list)))
  44762. +      (setq symbol-list (cdr symbol-list)))))
  44763. +
  44764. +  */        
  44765. +
  44766. +/*&&& symbols declared here &&&*/
  44767. +#if 0
  44768. +Lisp_Object Qauto_raise;
  44769. +Lisp_Object Qauto_lower;
  44770. +#endif
  44771. +Lisp_Object Qbackground_color;
  44772. +#if 0
  44773. +Lisp_Object Qbar;
  44774. +#endif
  44775. +Lisp_Object Qborder_color;
  44776. +Lisp_Object Qborder_width;
  44777. +#if 0
  44778. +Lisp_Object Qbox;
  44779. +Lisp_Object Qcursor_color;
  44780. +Lisp_Object Qcursor_type;
  44781. +Lisp_Object Qfont;
  44782. +#endif
  44783. +Lisp_Object Qforeground_color;
  44784. +#if 0
  44785. +Lisp_Object Qgeometry;
  44786. +Lisp_Object Qicon_left;
  44787. +Lisp_Object Qicon_top;
  44788. +Lisp_Object Qicon_type;
  44789. +Lisp_Object Qinternal_border_width;
  44790. +#endif
  44791. +Lisp_Object Qleft;
  44792. +#if 0
  44793. +Lisp_Object Qmouse_color;
  44794. +Lisp_Object Qnone;
  44795. +Lisp_Object Qparent_id;
  44796. +Lisp_Object Qsuppress_icon;
  44797. +#endif
  44798. +Lisp_Object Qtop;
  44799. +#if 0
  44800. +Lisp_Object Qundefined_color;
  44801. +Lisp_Object Qvertical_scroll_bars;
  44802. +Lisp_Object Qvisibility;
  44803. +Lisp_Object Qwindow_id;
  44804. +#endif
  44805. +Lisp_Object Qamiga_frame_parameter;
  44806. +#if 0
  44807. +Lisp_Object Quser_position;
  44808. +Lisp_Object Quser_size;
  44809. +#endif
  44810. +
  44811. +/* The below are defined in frame.c. */
  44812. +extern Lisp_Object Qheight, Qminibuffer, Qname, Qonly, Qwidth;
  44813. +extern Lisp_Object Qunsplittable, Qmenu_bar_lines;
  44814. +
  44815. +extern Lisp_Object Vwindow_system_version;
  44816. +
  44817. +
  44818. +/* Connect the frame-parameter names for X frames
  44819. +   to the ways of passing the parameter values to the window system.
  44820. +
  44821. +   The name of a parameter, as a Lisp symbol,
  44822. +   has an `amiga-frame-parameter' property which is an integer in Lisp
  44823. +   but can be interpreted as an `enum amiga_frame_parm' in C.  */
  44824. +
  44825. +enum amiga_frame_parm
  44826. +{
  44827. +  AMIGA_PARM_FOREGROUND_COLOR,
  44828. +  AMIGA_PARM_BACKGROUND_COLOR,
  44829. +  AMIGA_PARM_MOUSE_COLOR,
  44830. +  AMIGA_PARM_CURSOR_COLOR,
  44831. +  AMIGA_PARM_BORDER_COLOR,
  44832. +  AMIGA_PARM_ICON_TYPE,
  44833. +  AMIGA_PARM_FONT,
  44834. +  AMIGA_PARM_BORDER_WIDTH,
  44835. +  AMIGA_PARM_INTERNAL_BORDER_WIDTH,
  44836. +  AMIGA_PARM_NAME,
  44837. +  AMIGA_PARM_AUTORAISE,
  44838. +  AMIGA_PARM_AUTOLOWER,
  44839. +  AMIGA_PARM_VERT_SCROLL_BAR,
  44840. +  AMIGA_PARM_VISIBILITY,
  44841. +  AMIGA_PARM_MENU_BAR_LINES
  44842. +};
  44843. +
  44844. +
  44845. +struct amiga_frame_parm_table
  44846. +{
  44847. +  char *name;
  44848. +  void (*setter)( FRAME_PTR frame, Lisp_Object val, Lisp_Object oldval);
  44849. +};
  44850. +
  44851. +void amiga_set_foreground_color (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44852. +void amiga_set_background_color (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44853. +void amiga_set_mouse_color (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44854. +void amiga_set_cursor_color (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44855. +void amiga_set_border_color (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44856. +void amiga_set_cursor_type (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44857. +void amiga_set_icon_type (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44858. +void amiga_set_font (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44859. +void amiga_set_border_width (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44860. +void amiga_set_internal_border_width (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44861. +void amiga_explicitly_set_name (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44862. +void amiga_set_autoraise (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44863. +void amiga_set_autolower (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44864. +void amiga_set_vertical_scroll_bars (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44865. +void amiga_set_visibility (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44866. +void x_set_menu_bar_lines (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44867. +
  44868. +static struct amiga_frame_parm_table __far amiga_frame_parms[] =
  44869. +{
  44870. +  "foreground-color", amiga_set_foreground_color,
  44871. +  "background-color", amiga_set_background_color,
  44872. +  "mouse-color", amiga_set_mouse_color,
  44873. +  "cursor-color", amiga_set_cursor_color,
  44874. +  "border-color", amiga_set_border_color,
  44875. +  "cursor-type", amiga_set_cursor_type,
  44876. +  "icon-type", amiga_set_icon_type,
  44877. +  "font", amiga_set_font,
  44878. +  "border-width", amiga_set_border_width,
  44879. +  "internal-border-width", amiga_set_internal_border_width,
  44880. +  "name", amiga_explicitly_set_name,
  44881. +  "auto-raise", amiga_set_autoraise,
  44882. +  "auto-lower", amiga_set_autolower,
  44883. +  "vertical-scroll-bars", amiga_set_vertical_scroll_bars,
  44884. +  "visibility", amiga_set_visibility,
  44885. +  "menu-bar-lines", x_set_menu_bar_lines,
  44886. +};
  44887. +
  44888. +/* Attach the `amiga-frame-parameter' properties to
  44889. +   the Lisp symbol names of parameters relevant to X.  */
  44890. +
  44891. +init_amiga_parm_symbols ()
  44892. +{
  44893. +  int i;
  44894. +
  44895. +  for (i = 0; i < sizeof (amiga_frame_parms) / sizeof (amiga_frame_parms[0]); i++)
  44896. +    Fput (intern (amiga_frame_parms[i].name), Qamiga_frame_parameter,
  44897. +      make_number (i));
  44898. +}
  44899. +
  44900. +/* Change the parameters of FRAME as specified by ALIST.
  44901. +   If a parameter is not specially recognized, do nothing;
  44902. +   otherwise call the `amiga_set_...' function for that parameter.  */
  44903. +
  44904. +void
  44905. +x_set_frame_parameters (f, alist) /* CHFIXME: fix references in window.c */
  44906. +     FRAME_PTR f;
  44907. +     Lisp_Object alist;
  44908. +{
  44909. +  Lisp_Object tail;
  44910. +
  44911. +  /* If both of these parameters are present, it's more efficient to
  44912. +     set them both at once.  So we wait until we've looked at the
  44913. +     entire list before we set them.  */
  44914. +  Lisp_Object width, height;
  44915. +
  44916. +  /* Same here.  */
  44917. +  Lisp_Object left, top;
  44918. +
  44919. +  /* Record in these vectors all the parms specified.  */
  44920. +  Lisp_Object *parms;
  44921. +  Lisp_Object *values;
  44922. +  int i;
  44923. +  
  44924. +  i = 0;
  44925. +  for (tail = alist; CONSP (tail); tail = Fcdr (tail))
  44926. +    i++;
  44927. +
  44928. +  parms = (Lisp_Object *) alloca (i * sizeof (Lisp_Object));
  44929. +  values = (Lisp_Object *) alloca (i * sizeof (Lisp_Object));
  44930. +
  44931. +  /* Extract parm names and values into those vectors.  */
  44932. +
  44933. +  i = 0;
  44934. +  for (tail = alist; CONSP (tail); tail = Fcdr (tail))
  44935. +    {
  44936. +      Lisp_Object elt, prop, val;
  44937. +
  44938. +      elt = Fcar (tail);
  44939. +      parms[i] = Fcar (elt);
  44940. +      values[i] = Fcdr (elt);
  44941. +      i++;
  44942. +    }
  44943. +
  44944. +  width = height = top = left = Qunbound;
  44945. +
  44946. +  /* Now process them in reverse of specified order.  */
  44947. +  for (i--; i >= 0; i--)
  44948. +    {
  44949. +      Lisp_Object prop, val;
  44950. +
  44951. +      prop = parms[i];
  44952. +      val = values[i];
  44953. +
  44954. +      if (EQ (prop, Qwidth))
  44955. +    width = val;
  44956. +      else if (EQ (prop, Qheight))
  44957. +    height = val;
  44958. +      else if (EQ (prop, Qtop))
  44959. +    top = val;
  44960. +      else if (EQ (prop, Qleft))
  44961. +    left = val;
  44962. +      else
  44963. +    {
  44964. +      register Lisp_Object param_index, old_value;
  44965. +
  44966. +      param_index = Fget (prop, Qamiga_frame_parameter);
  44967. +      old_value = get_frame_param (f, prop);
  44968. +      store_frame_param (f, prop, val);
  44969. +      if (XTYPE (param_index) == Lisp_Int
  44970. +          && XINT (param_index) >= 0
  44971. +          && (XINT (param_index)
  44972. +          < sizeof (amiga_frame_parms)/sizeof (amiga_frame_parms[0])))
  44973. +        (*amiga_frame_parms[XINT (param_index)].setter)(f, val, old_value);
  44974. +    }
  44975. +    }
  44976. +
  44977. +  /* Don't die if just one of these was set.  */
  44978. +  if (EQ (left, Qunbound))
  44979. +    XSET (left, Lisp_Int, EMACS_WIN(f)->LeftEdge);
  44980. +  if (EQ (top, Qunbound))
  44981. +    XSET (top, Lisp_Int, EMACS_WIN(f)->TopEdge);
  44982. +
  44983. +  /* Don't die if just one of these was set.  */
  44984. +  if (EQ (width, Qunbound))
  44985. +    XSET (width, Lisp_Int, FRAME_WIDTH (f));
  44986. +  if (EQ (height, Qunbound))
  44987. +    XSET (height, Lisp_Int, FRAME_HEIGHT (f));
  44988. +
  44989. +#if 0 /* CHFIXME */
  44990. +  /* Don't set these parameters these unless they've been explicitly
  44991. +     specified.  The window might be mapped or resized while we're in
  44992. +     this function, and we don't want to override that unless the lisp
  44993. +     code has asked for it.
  44994. +
  44995. +     Don't set these parameters unless they actually differ from the
  44996. +     window's current parameters; the window may not actually exist
  44997. +     yet.  */
  44998. +  {
  44999. +    Lisp_Object frame;
  45000. +
  45001. +    check_frame_size (f, &height, &width);
  45002. +
  45003. +    XSET (frame, Lisp_Frame, f);
  45004. +
  45005. +    if ((NUMBERP (width) && XINT (width) != FRAME_WIDTH (f))
  45006. +    || (NUMBERP (height) && XINT (height) != FRAME_HEIGHT (f)))
  45007. +      Fset_frame_size (frame, width, height);
  45008. +    if ((NUMBERP (left) && XINT (left) != emacs_win->LeftEdge)
  45009. +    || (NUMBERP (top) && XINT (top) != emacs_win->TopEdge))
  45010. +      Fset_frame_position (frame, left, top);
  45011. +  }
  45012. +#endif
  45013. +}
  45014. +
  45015. +/* Insert a description of internally-recorded parameters of frame X
  45016. +   into the parameter alist *ALISTPTR that is to be given to the user.
  45017. +   Only parameters that are specific to the X window system
  45018. +   and whose values are not correctly recorded in the frame's
  45019. +   param_alist need to be considered here.  */
  45020. +
  45021. +x_report_frame_params (f, alistptr) /* CHFIXME: fix references in frame.c */
  45022. +     FRAME_PTR f;
  45023. +     Lisp_Object *alistptr;
  45024. +{
  45025. +  char buf[16];
  45026. +
  45027. +  store_in_alist (alistptr, Qleft, make_number (EMACS_WIN(f)->LeftEdge));
  45028. +  store_in_alist (alistptr, Qtop, make_number (EMACS_WIN(f)->TopEdge));
  45029. +#if 0 /* CHFIXME: available on the AMIGA ! */
  45030. +  store_in_alist (alistptr, Qborder_width,
  45031. +              make_number (f->display.x->border_width));
  45032. +  store_in_alist (alistptr, Qinternal_border_width,
  45033. +              make_number (f->display.x->internal_border_width));
  45034. +  sprintf (buf, "%d", FRAME_AMIGA_WINDOW (f));
  45035. +  store_in_alist (alistptr, Qwindow_id,
  45036. +              build_string (buf));
  45037. +  FRAME_SAMPLE_VISIBILITY (f);
  45038. +  store_in_alist (alistptr, Qvisibility,
  45039. +          (FRAME_VISIBLE_P (f) ? Qt
  45040. +           : FRAME_ICONIFIED_P (f) ? Qicon : Qnil));
  45041. +#endif
  45042. +}
  45043. +
  45044. +#define CHFIXMELINE() fprintf(stderr,"CHFIXME: %s %d\n", __FILE__, __LINE__)
  45045. +
  45046. +void amiga_set_foreground_color (FRAME_PTR f, Lisp_Object pen, Lisp_Object oldval)
  45047. +{
  45048. +    int fg;
  45049. +    extern int foreground; /* CHFIXME */
  45050. +    
  45051. +  check_intuition();
  45052. +  CHECK_NUMBER(pen, 0);
  45053. +
  45054. +  fg = XUINT (pen);
  45055. +  if (pen > 7) error("Pen colors must be between 0 & 7");
  45056. +  foreground = fg;
  45057. +  reset_window(f);
  45058. +}
  45059. +void amiga_set_background_color (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45060. +{
  45061. +  CHFIXMELINE();
  45062. +}
  45063. +void amiga_set_mouse_color (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45064. +{
  45065. +  CHFIXMELINE();
  45066. +}
  45067. +void amiga_set_cursor_color (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45068. +{
  45069. +  CHFIXMELINE();
  45070. +}
  45071. +void amiga_set_border_color (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45072. +{
  45073. +  CHFIXMELINE();
  45074. +}
  45075. +void amiga_set_cursor_type (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45076. +{
  45077. +  CHFIXMELINE();
  45078. +}
  45079. +void amiga_set_icon_type (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45080. +{
  45081. +  CHFIXMELINE();
  45082. +}
  45083. +void amiga_set_font (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45084. +{
  45085. +  CHFIXMELINE();
  45086. +}
  45087. +void amiga_set_border_width (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45088. +{
  45089. +  CHFIXMELINE();
  45090. +}
  45091. +void amiga_set_internal_border_width (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45092. +{
  45093. +  CHFIXMELINE();
  45094. +}
  45095. +void amiga_explicitly_set_name (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45096. +{
  45097. +  CHFIXMELINE();
  45098. +}
  45099. +void amiga_set_autoraise (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45100. +{
  45101. +  CHFIXMELINE();
  45102. +}
  45103. +void amiga_set_autolower (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45104. +{
  45105. +  CHFIXMELINE();
  45106. +}
  45107. +void amiga_set_vertical_scroll_bars (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45108. +{
  45109. +  CHFIXMELINE();
  45110. +}
  45111. +void amiga_set_visibility (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45112. +{
  45113. +  CHFIXMELINE();
  45114. +}
  45115. +
  45116. +void
  45117. +x_set_menu_bar_lines (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)/* CHFIXME: fix references in frame.c */
  45118. +{
  45119. +  int nlines;
  45120. +  int olines = FRAME_MENU_BAR_LINES (f);
  45121. +
  45122. +  fprintf(stderr,"amiga_set_menu_bar_lines\n");
  45123. +
  45124. +  /* Right now, menu bars don't work properly in minibuf-only frames;
  45125. +     most of the commands try to apply themselves to the minibuffer
  45126. +     frame itslef, and get an error because you can't switch buffers
  45127. +     in or split the minibuffer window.  */
  45128. +  if (FRAME_MINIBUF_ONLY_P (f))
  45129. +    return;
  45130. +
  45131. +  if (XTYPE (value) == Lisp_Int)
  45132. +    nlines = XINT (value);
  45133. +  else
  45134. +    nlines = 0;
  45135. +
  45136. +  FRAME_MENU_BAR_LINES (f) = 0;
  45137. +  fprintf(stderr,"\tnlines = %d\n", nlines);
  45138. +  if (nlines)
  45139. +    FRAME_EXTERNAL_MENU_BAR (f) = 1;
  45140. +  else
  45141. +    {
  45142. +#if 0 /* CHFIXME */
  45143. +      if (FRAME_EXTERNAL_MENU_BAR (f) == 1)
  45144. +      free_frame_menubar (f);
  45145. +#endif
  45146. +      FRAME_EXTERNAL_MENU_BAR (f) = 0;
  45147. +#if 0
  45148. +      f->display.x->menubar_widget = 0;
  45149. +#endif
  45150. +    }
  45151. +}
  45152. +
  45153. +void syms_of_amiga_fns(void)
  45154. +{
  45155. +  /* The section below is built by the lisp expression at the top of the file,
  45156. +     just above where these variables are declared.  */
  45157. +  /*&&& init symbols here &&&*/
  45158. +#if 0
  45159. +  Qauto_raise = intern ("auto-raise");
  45160. +  staticpro (&Qauto_raise);
  45161. +  Qauto_lower = intern ("auto-lower");
  45162. +  staticpro (&Qauto_lower);
  45163. +#endif
  45164. +  Qbackground_color = intern ("background-color");
  45165. +  staticpro (&Qbackground_color);
  45166. +#if 0
  45167. +  Qbar = intern ("bar");
  45168. +  staticpro (&Qbar);
  45169. +#endif
  45170. +  Qborder_color = intern ("border-color");
  45171. +  staticpro (&Qborder_color);
  45172. +  Qborder_width = intern ("border-width");
  45173. +  staticpro (&Qborder_width);
  45174. +#if 0
  45175. +  Qbox = intern ("box");
  45176. +  staticpro (&Qbox);
  45177. +  Qcursor_color = intern ("cursor-color");
  45178. +  staticpro (&Qcursor_color);
  45179. +  Qcursor_type = intern ("cursor-type");
  45180. +  staticpro (&Qcursor_type);
  45181. +  Qfont = intern ("font");
  45182. +  staticpro (&Qfont);
  45183. +#endif
  45184. +  Qforeground_color = intern ("foreground-color");
  45185. +  staticpro (&Qforeground_color);
  45186. +#if 0
  45187. +  Qgeometry = intern ("geometry");
  45188. +  staticpro (&Qgeometry);
  45189. +  Qicon_left = intern ("icon-left");
  45190. +  staticpro (&Qicon_left);
  45191. +  Qicon_top = intern ("icon-top");
  45192. +  staticpro (&Qicon_top);
  45193. +  Qicon_type = intern ("icon-type");
  45194. +  staticpro (&Qicon_type);
  45195. +  Qinternal_border_width = intern ("internal-border-width");
  45196. +  staticpro (&Qinternal_border_width);
  45197. +#endif
  45198. +  Qleft = intern ("left");
  45199. +  staticpro (&Qleft);
  45200. +#if 0
  45201. +  Qmouse_color = intern ("mouse-color");
  45202. +  staticpro (&Qmouse_color);
  45203. +  Qnone = intern ("none");
  45204. +  staticpro (&Qnone);
  45205. +  Qparent_id = intern ("parent-id");
  45206. +  staticpro (&Qparent_id);
  45207. +  Qsuppress_icon = intern ("suppress-icon");
  45208. +  staticpro (&Qsuppress_icon);
  45209. +#endif
  45210. +  Qtop = intern ("top");
  45211. +  staticpro (&Qtop);
  45212. +#if 0
  45213. +  Qundefined_color = intern ("undefined-color");
  45214. +  staticpro (&Qundefined_color);
  45215. +  Qvertical_scroll_bars = intern ("vertical-scroll-bars");
  45216. +  staticpro (&Qvertical_scroll_bars);
  45217. +  Qvisibility = intern ("visibility");
  45218. +  staticpro (&Qvisibility);
  45219. +  Qwindow_id = intern ("window-id");
  45220. +  staticpro (&Qwindow_id);
  45221. +#endif
  45222. +  Qamiga_frame_parameter = intern ("x-frame-parameter");
  45223. +  staticpro (&Qamiga_frame_parameter);
  45224. +#if 0
  45225. +  Quser_position = intern ("user-position");
  45226. +  staticpro (&Quser_position);
  45227. +  Quser_size = intern ("user-size");
  45228. +  staticpro (&Quser_size);
  45229. +#endif
  45230. +  /* This is the end of symbol initialization.  */
  45231. +
  45232. +  init_amiga_parm_symbols ();
  45233. +}
  45234. +
  45235. +void init_amiga_fns(void)
  45236. +{
  45237. +}
  45238. diff -ru --new-file baseline/fsf/emacs/src/amiga_fns_protos.h amiga/fsf/emacs/src/amiga_fns_protos.h
  45239. --- baseline/fsf/emacs/src/amiga_fns_protos.h    Wed Dec 31 17:00:00 1969
  45240. +++ amiga/fsf/emacs/src/amiga_fns_protos.h    Sun Oct 15 17:09:12 1995
  45241. @@ -0,0 +1,64 @@
  45242. +/* Prototypes for functions defined in
  45243. +amiga_fns.c
  45244. + */
  45245. +
  45246. +extern int Qbackground_color;
  45247. +
  45248. +extern int Qborder_color;
  45249. +
  45250. +extern int Qborder_width;
  45251. +
  45252. +extern int Qforeground_color;
  45253. +
  45254. +extern int Qleft;
  45255. +
  45256. +extern int Qtop;
  45257. +
  45258. +extern int Qamiga_frame_parameter;
  45259. +
  45260. +extern struct amiga_frame_parm_table __far amiga_frame_parms[16];
  45261. +
  45262. +int init_amiga_parm_symbols(void);
  45263. +
  45264. +void x_set_frame_parameters(int f,
  45265. +                            int alist);
  45266. +
  45267. +int x_report_frame_params(int f,
  45268. +                          int * alistptr);
  45269. +
  45270. +void amiga_set_foreground_color(int , int , int );
  45271. +
  45272. +void amiga_set_background_color(int , int , int );
  45273. +
  45274. +void amiga_set_mouse_color(int , int , int );
  45275. +
  45276. +void amiga_set_cursor_color(int , int , int );
  45277. +
  45278. +void amiga_set_border_color(int , int , int );
  45279. +
  45280. +void amiga_set_cursor_type(int , int , int );
  45281. +
  45282. +void amiga_set_icon_type(int , int , int );
  45283. +
  45284. +void amiga_set_font(int , int , int );
  45285. +
  45286. +void amiga_set_border_width(int , int , int );
  45287. +
  45288. +void amiga_set_internal_border_width(int , int , int );
  45289. +
  45290. +void amiga_explicitly_set_name(int , int , int );
  45291. +
  45292. +void amiga_set_autoraise(int , int , int );
  45293. +
  45294. +void amiga_set_autolower(int , int , int );
  45295. +
  45296. +void amiga_set_vertical_scroll_bars(int , int , int );
  45297. +
  45298. +void amiga_set_visibility(int , int , int );
  45299. +
  45300. +void x_set_menu_bar_lines(int , int , int );
  45301. +
  45302. +void syms_of_amiga_fns(void);
  45303. +
  45304. +void init_amiga_fns(void);
  45305. +
  45306. diff -ru --new-file baseline/fsf/emacs/src/amiga_malloc.c amiga/fsf/emacs/src/amiga_malloc.c
  45307. --- baseline/fsf/emacs/src/amiga_malloc.c    Wed Dec 31 17:00:00 1969
  45308. +++ amiga/fsf/emacs/src/amiga_malloc.c    Sun Oct 15 17:09:13 1995
  45309. @@ -0,0 +1,327 @@
  45310. +/* Emulation of some unix functions for emacs.
  45311. +Copyright (C) 1985, 1986, 1987, 1988 Free Software Foundation, Inc.
  45312. +
  45313. +This file is part of GNU Emacs.
  45314. +
  45315. +GNU Emacs is distributed in the hope that it will be useful,
  45316. +but WITHOUT ANY WARRANTY.  No author or distributor
  45317. +accepts responsibility to anyone for the consequences of using it
  45318. +or for whether it serves any particular purpose or works at all,
  45319. +unless he says so in writing.  Refer to the GNU Emacs General Public
  45320. +License for full details.
  45321. +
  45322. +Everyone is granted permission to copy, modify and redistribute
  45323. +GNU Emacs, but only under the conditions described in the
  45324. +GNU Emacs General Public License.   A copy of this license is
  45325. +supposed to have been given to you along with GNU Emacs so you
  45326. +can know your rights and responsibilities.  It should be in a
  45327. +file named COPYING.  Among other things, the copyright notice
  45328. +and this notice must be preserved on all copies.  */
  45329. +
  45330. +#include <exec/types.h>
  45331. +#include <exec/memory.h>
  45332. +#include <proto/exec.h>
  45333. +#include <stdlib.h>      /* malloc prototypes */
  45334. +
  45335. +#undef LONGBITS
  45336. +#include "config.h"
  45337. +#include "lisp.h"
  45338. +#include "amiga.h"
  45339. +
  45340. +/* Memory stuff */
  45341. +long far DataSegBits;
  45342. +static int DataSegFound;
  45343. +static struct mem_header *far current;
  45344. +struct mem_header *free_list;
  45345. +extern int alloca_calling;
  45346. +extern int *pure;
  45347. +long far pre_alloc;    /* amount of memory to reserve for emacs */
  45348. +char *malloc_hunk;
  45349. +long malloc_hunk_size = MALLOC_HUNK_SIZE; /* Amount of memory malloc'ed by a
  45350. +                         to-be-dumped emacs */
  45351. +long malloc_bytes_used;    /* Amount of this hunk actually used */
  45352. +static int early_malloc = TRUE;    /* Before we undump, we want system allocations */
  45353. +
  45354. +#define ADDR_OK(x) (((long)x & ~VALMASK) == DataSegBits)
  45355. +
  45356. +/* Memory allocation code */
  45357. +/* ---------------------- */
  45358. +
  45359. +static void *alloc_sys(long memsize)
  45360. +/* Effect: Allocate from AmigaOS (via AllocMem). */
  45361. +{
  45362. +  /* Allocation rounded up to multiple of 4 */
  45363. +  long size = ((memsize + 3) & ~3) + sizeof(struct mem_header);
  45364. +  struct mem_header *mem;
  45365. +
  45366. +  if (!DataSegFound)
  45367. +    {
  45368. +      /* Find page containing Pure data. All data used by emacs must be
  45369. +     on the same page (As a page is 2^26 bytes, this shouldn't be too
  45370. +     unlikely). */
  45371. +      DataSegBits = (long)&first_data & ~VALMASK;
  45372. +      if (!(ADDR_OK(first_fn) && ADDR_OK(last_fn) &&
  45373. +        ADDR_OK(&first_data) && ADDR_OK(&last_data) &&
  45374. +        ADDR_OK(&first_bss) && ADDR_OK(&last_bss)))
  45375. +    _fail("I can't handle your memory configuration");
  45376. +      DataSegFound = TRUE;
  45377. +    }
  45378. +
  45379. +  mem = AllocMem(size, 0);
  45380. +  if (!mem) return 0;
  45381. +  /* All memory *must* be allocated on the same page ! */
  45382. +  if (!ADDR_OK(mem))
  45383. +    {
  45384. +      FreeMem(mem, size);
  45385. +      return 0;
  45386. +    }
  45387. +  if (current) current->prev = mem;
  45388. +  mem->next = current;
  45389. +  mem->prev = 0;
  45390. +  current = mem;
  45391. +  mem->size = size;
  45392. +
  45393. +  return mem + 1;
  45394. +}
  45395. +
  45396. +static void free_sys(char *p)
  45397. +{
  45398. +  struct mem_header *old = (struct mem_header *)p - 1;
  45399. +
  45400. +  if (old == current)
  45401. +    {
  45402. +      current = current->next;
  45403. +      if (current) current->prev = 0;
  45404. +    }
  45405. +  else
  45406. +    {
  45407. +      old->prev->next = old->next;
  45408. +      if (old->next) old->next->prev = old->prev;
  45409. +    }
  45410. +  FreeMem(old, old->size);
  45411. +}
  45412. +
  45413. +void __stdargs _MemCleanup(void)
  45414. +{
  45415. +  struct mem_header *next;
  45416. +
  45417. +  while (current)
  45418. +    {
  45419. +      next = current->next;
  45420. +      FreeMem(current, current->size);
  45421. +      current = next;
  45422. +    }
  45423. +}
  45424. +
  45425. +static void *alloc_hunk(long memsize)
  45426. +/* Effect: Allocates from the malloc hunk (which is dumped to disk).
  45427. +*/
  45428. +{
  45429. +  /* Allocation rounded up to multiple of 4 */
  45430. +  long size = ((memsize + 3) & ~3) + sizeof(struct mem_header);
  45431. +  /* Find a free block in the memory list */
  45432. +  struct mem_header *scan = free_list->next;
  45433. +
  45434. +  while (scan->size > 0)
  45435. +    {
  45436. +      if (size < scan->size)    /* Found ! */
  45437. +    {
  45438. +      long end;
  45439. +
  45440. +      /* Split block if big enough */
  45441. +      if (size + sizeof(struct mem_header) + 8 > scan->size)
  45442. +        {
  45443. +          /* Remove block from list */
  45444. +          scan->prev->next = scan->next;
  45445. +          scan->next->prev = scan->prev;
  45446. +        }
  45447. +      else
  45448. +        {
  45449. +          /* Split block */
  45450. +          struct mem_header *new = (struct mem_header *)((char *)scan + size);
  45451. +
  45452. +          new->prev = scan->prev;
  45453. +          new->next = scan->next;
  45454. +          scan->prev->next = new;
  45455. +          scan->next->prev = new;
  45456. +          new->size = scan->size - size;
  45457. +          scan->size = size;
  45458. +        }
  45459. +      if (!amiga_initialized)
  45460. +        {
  45461. +          end = (char *)scan - (char *)free_list + scan->size +
  45462. +        sizeof(long) + sizeof(struct mem_header);
  45463. +          if (end > malloc_bytes_used) malloc_bytes_used = end;
  45464. +        }
  45465. +      return scan + 1;
  45466. +    }
  45467. +      scan = scan->next;
  45468. +    }
  45469. +  return 0;
  45470. +}
  45471. +
  45472. +static void free_hunk(char *p)
  45473. +{
  45474. +  struct mem_header *old = (struct mem_header *)p - 1, *scan = free_list;
  45475. +
  45476. +  do scan = scan->next; while (scan < old);
  45477. +
  45478. +  /* Check for merges (potentially with both sides) */
  45479. +  if ((char *)scan->prev + scan->prev->size == (char *)old)
  45480. +    if ((char *)old + old->size == (char *)scan)
  45481. +      {
  45482. +    /* Merge all 3 blocks together */
  45483. +    scan->prev->size += old->size + scan->size;
  45484. +    scan->next->prev = scan->prev;
  45485. +    scan->prev->next = scan->next;
  45486. +      }
  45487. +    else            /* Merge with previous block */
  45488. +      scan->prev->size += old->size;
  45489. +  else if ((char *)old + old->size == (char *)scan)
  45490. +    {
  45491. +      /* Merge with next block */
  45492. +      old->size += scan->size;
  45493. +      scan->prev->next = old;
  45494. +      scan->next->prev = old;
  45495. +      old->prev = scan->prev;
  45496. +      old->next = scan->next;
  45497. +    }
  45498. +  else                /* Add a new block */
  45499. +    {
  45500. +      old->next = scan;
  45501. +      old->prev = scan->prev;
  45502. +      scan->prev->next = old;
  45503. +      scan->prev = old;
  45504. +    }
  45505. +}
  45506. +
  45507. +void *__halloc(unsigned long size)
  45508. +{
  45509. +  if (early_malloc) return alloc_sys(size);
  45510. +
  45511. +  if (!amiga_initialized)
  45512. +    if (alloca_calling)
  45513. +      {
  45514. +    alloca_calling = 0;
  45515. +    return alloc_sys(size);
  45516. +      }
  45517. +    else
  45518. +      {
  45519. +    void *mem = alloc_hunk(size);
  45520. +
  45521. +    if (!mem) 
  45522. +      {
  45523. +        char buf[128];
  45524. +        sprintf (buf, "Emacs dump: ran out of memory for malloc. \n"
  45525. +             "Can't alloc %ld bytes (%ld in use - out of %ld).\n"
  45526. +             "See the -malloc option for more information.\n",
  45527. +             size, malloc_bytes_used, malloc_hunk_size);
  45528. +        _fail(buf);
  45529. +      }
  45530. +    return mem;
  45531. +      }
  45532. +  else
  45533. +    {
  45534. +      alloca_calling = 0;
  45535. +      if (pre_alloc)
  45536. +    {
  45537. +      void *mem;
  45538. +
  45539. +      if (mem = alloc_hunk(size)) return mem;
  45540. +    }
  45541. +      return alloc_sys(size);
  45542. +    }
  45543. +}
  45544. +
  45545. +void *malloc(unsigned int size)
  45546. +{
  45547. +  return __halloc(size);
  45548. +}
  45549. +
  45550. +void free(void *p)
  45551. +{
  45552. +  struct mem_header *old = (struct mem_header *)p - 1;
  45553. +
  45554. +  if ((char *)p >= malloc_hunk &&
  45555. +      (char *)p <= malloc_hunk + malloc_hunk_size + pre_alloc)
  45556. +    {
  45557. +      if (!amiga_initialized || pre_alloc) free_hunk(p);
  45558. +    }
  45559. +  else free_sys(p);
  45560. +}
  45561. +
  45562. +void *calloc(unsigned int n, unsigned int size)
  45563. +{
  45564. +  char *t;
  45565. +  long rsize = n * size;
  45566. +
  45567. +  t = malloc(rsize);
  45568. +  if (t) memset (t, 0, rsize);
  45569. +
  45570. +  return t;
  45571. +}
  45572. +
  45573. +void *realloc(void *p, unsigned int size)
  45574. +{
  45575. +  char *new = malloc(size);
  45576. +  struct mem_header *old = (struct mem_header *)p - 1;
  45577. +
  45578. +  if (new)
  45579. +    {
  45580. +      long minsize;
  45581. +      long oldsize = old->size - sizeof(struct mem_header);
  45582. +
  45583. +      if (size < oldsize) minsize = size;
  45584. +      else minsize = oldsize;
  45585. +
  45586. +      memcpy(new, p, minsize);
  45587. +    }
  45588. +  free(p);
  45589. +  return new;
  45590. +}
  45591. +
  45592. +void emacs_malloc_init(void)
  45593. +{
  45594. +  struct mem_header *end_sentinel, *new_end, *new_block;
  45595. +
  45596. +  early_malloc = FALSE;        /* We now have a malloc hunk */
  45597. +
  45598. +  /* Set up the memory allocation in the malloc hunk */
  45599. +  free_list = (struct mem_header *)malloc_hunk;
  45600. +  end_sentinel = (struct mem_header *)((char *)free_list + malloc_hunk_size
  45601. +                       - sizeof(struct mem_header));
  45602. +  if (!amiga_initialized)
  45603. +    {
  45604. +      /* Before dumping */
  45605. +      free_list->next = free_list + 1;
  45606. +      free_list->prev = 0;
  45607. +      free_list->size = 0;    /* Prevents merges with this pseudo-block */
  45608. +      free_list[1].prev = free_list;
  45609. +      free_list[1].next = end_sentinel;
  45610. +      free_list[1].size =
  45611. +    malloc_hunk_size - 2 * sizeof(struct mem_header) - sizeof(long);
  45612. +      /* The - sizeof(long) prevents any merges with end_sentinel */
  45613. +
  45614. +      end_sentinel->size = 0;
  45615. +      end_sentinel->prev = free_list + 1;
  45616. +      end_sentinel->next = 0;
  45617. +
  45618. +      malloc_bytes_used = 0;
  45619. +    }
  45620. +  else if (pre_alloc)
  45621. +    {
  45622. +      /* After having undumped extend malloc block */
  45623. +      /* Move end_sentinel: */
  45624. +      new_end = (struct mem_header *)((char *)free_list + malloc_hunk_size +
  45625. +                      pre_alloc - sizeof(struct mem_header));
  45626. +      new_end->size = 0;
  45627. +      new_end->next = 0;
  45628. +      new_end->prev = end_sentinel->prev;
  45629. +      end_sentinel->prev->next = new_end;
  45630. +
  45631. +      /* Add extra memory (pre_alloc bytes) */
  45632. +      new_block = (struct mem_header *)((char *)end_sentinel - sizeof(long));
  45633. +      new_block->size = pre_alloc;
  45634. +      free_hunk((char *)(new_block + 1));
  45635. +    }
  45636. +}
  45637. diff -ru --new-file baseline/fsf/emacs/src/amiga_malloc_protos.h amiga/fsf/emacs/src/amiga_malloc_protos.h
  45638. --- baseline/fsf/emacs/src/amiga_malloc_protos.h    Wed Dec 31 17:00:00 1969
  45639. +++ amiga/fsf/emacs/src/amiga_malloc_protos.h    Sun Oct 15 17:09:15 1995
  45640. @@ -0,0 +1,44 @@
  45641. +/* Prototypes for functions defined in
  45642. +amiga_malloc.c
  45643. + */
  45644. +
  45645. +extern long __far DataSegBits;
  45646. +
  45647. +extern int DataSegFound;
  45648. +
  45649. +extern struct mem_header * __far current;
  45650. +
  45651. +extern struct mem_header * free_list;
  45652. +
  45653. +extern long __far pre_alloc;
  45654. +
  45655. +extern char * malloc_hunk;
  45656. +
  45657. +extern long malloc_hunk_size;
  45658. +
  45659. +extern long malloc_bytes_used;
  45660. +
  45661. +extern int early_malloc;
  45662. +
  45663. +void * alloc_sys(long );
  45664. +
  45665. +void free_sys(void * );
  45666. +
  45667. +void _MemCleanup(void);
  45668. +
  45669. +void * alloc_hunk(long );
  45670. +
  45671. +void free_hunk(void * );
  45672. +
  45673. +void * __halloc(unsigned long );
  45674. +
  45675. +void * malloc(unsigned int );
  45676. +
  45677. +void free(void * );
  45678. +
  45679. +void * calloc(unsigned int, unsigned int );
  45680. +
  45681. +void * realloc(void * , unsigned int );
  45682. +
  45683. +void emacs_malloc_init(void);
  45684. +
  45685. diff -ru --new-file baseline/fsf/emacs/src/amiga_menu.c amiga/fsf/emacs/src/amiga_menu.c
  45686. --- baseline/fsf/emacs/src/amiga_menu.c    Wed Dec 31 17:00:00 1969
  45687. +++ amiga/fsf/emacs/src/amiga_menu.c    Sun Oct 15 17:09:17 1995
  45688. @@ -0,0 +1,127 @@
  45689. +/* Amiga menu bar related stuff.
  45690. +   Copyright (C) 1986, 1988, 1993, 1994 Free Software Foundation, Inc.
  45691. +
  45692. +This file is part of GNU Emacs.
  45693. +
  45694. +GNU Emacs is free software; you can redistribute it and/or modify
  45695. +it under the terms of the GNU General Public License as published by
  45696. +the Free Software Foundation; either version 1, or (at your option)
  45697. +any later version.
  45698. +
  45699. +GNU Emacs is distributed in the hope that it will be useful,
  45700. +but WITHOUT ANY WARRANTY; without even the implied warranty of
  45701. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  45702. +GNU General Public License for more details.
  45703. +
  45704. +You should have received a copy of the GNU General Public License
  45705. +along with GNU Emacs; see the file COPYING.  If not, write to
  45706. +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  45707. +
  45708. +/* Original Amiga version by David Gay, 
  45709. + * Emacs 19 version by Carsten Heyl,
  45710. + * took lot of code from xmenu.c
  45711. + */
  45712. +
  45713. +#include <exec/types.h>
  45714. +#include <libraries/gadtools.h>
  45715. +#include <intuition/intuition.h>
  45716. +#include <proto/exec.h>
  45717. +#include <proto/dos.h>
  45718. +#include <proto/gadtools.h>
  45719. +#include <proto/intuition.h>
  45720. +#include "config.h"
  45721. +#include "lisp.h"
  45722. +#include "frame.h"
  45723. +#include "amiga.h"
  45724. +
  45725. +#ifdef USE_PROTOS
  45726. +#include "protos.h"
  45727. +#endif
  45728. +
  45729. +#ifndef GTMN_NewLookMenus
  45730. +#define GTMN_NewLookMenus    GT_TagBase+67
  45731. +#endif
  45732. +
  45733. +#if 0
  45734. +static struct Menu *emacs_menu;
  45735. +static char *emacs_menu_strings;
  45736. +static APTR win_vi;
  45737. +#endif
  45738. +struct Library *GadToolsBase;
  45739. +
  45740. +static void Famiga_delete_menus(FRAME_PTR f);
  45741. +
  45742. +void suspend_menus(FRAME_PTR f)
  45743. +{
  45744. +  if (EMACS_WIN(f))
  45745. +    {
  45746. +      ClearMenuStrip(EMACS_WIN(f));
  45747. +      if (EMACS_VI(f))
  45748. +    {
  45749. +      FreeVisualInfo(EMACS_VI(f));
  45750. +      EMACS_VI(f) = 0;
  45751. +    }
  45752. +    }
  45753. +}
  45754. +
  45755. +int resume_menus(FRAME_PTR f)
  45756. +{
  45757. +  if (EMACS_WIN(f) && EMACS_MENU(f))
  45758. +    {
  45759. +      EMACS_VI(f) = GetVisualInfo(EMACS_WIN(f)->WScreen, TAG_END);
  45760. +
  45761. +      if (!EMACS_VI(f) || !LayoutMenus(EMACS_MENU(f), EMACS_VI(f),
  45762. +                  GTMN_NewLookMenus, 1L,
  45763. +                  TAG_END))
  45764. +    {
  45765. +      if (EMACS_VI(f)) FreeVisualInfo(EMACS_VI(f));
  45766. +      Famiga_delete_menus(f);
  45767. +
  45768. +      return FALSE;
  45769. +    }
  45770. +      SetMenuStrip(EMACS_WIN(f), EMACS_MENU(f));
  45771. +    }
  45772. +  return TRUE;
  45773. +}
  45774. +
  45775. +static 
  45776. +void Famiga_delete_menus(FRAME_PTR f)
  45777. +{
  45778. +    check_intuition();
  45779. +
  45780. +    suspend_menus(f);
  45781. +    if (EMACS_MENU(f)) FreeMenus(EMACS_MENU(f));
  45782. +    EMACS_MENU(f) = 0;
  45783. +    if (EMACS_MENU_STRINGS(f)) free(EMACS_MENU_STRINGS(f));
  45784. +    EMACS_MENU_STRINGS(f) = 0;
  45785. +}
  45786. +
  45787. +
  45788. +void syms_of_amiga_fns(void);
  45789. +void init_amiga_fns(void);
  45790. +void syms_of_amiga_xmenu(void);
  45791. +void init_amiga_xmenu(void);
  45792. +
  45793. +void syms_of_amiga_menu(void)
  45794. +{
  45795. +    syms_of_amiga_fns();
  45796. +    syms_of_amiga_xmenu();
  45797. +}
  45798. +
  45799. +void init_amiga_menu(void)
  45800. +{
  45801. +    GadToolsBase = OpenLibrary("gadtools.library", 0);
  45802. +    if (!GadToolsBase) _fail("gadtools.library required");
  45803. +    init_amiga_fns();
  45804. +}
  45805. +
  45806. +void cleanup_amiga_menu(void)
  45807. +{
  45808. +#ifdef MULTI_FRAME
  45809. +  you lose
  45810. +#endif
  45811. +  suspend_menus(selected_frame);
  45812. +  if (EMACS_MENU(f)) Famiga_delete_menus(selected_frame);
  45813. +  if (GadToolsBase) CloseLibrary(GadToolsBase);
  45814. +}
  45815. +
  45816. diff -ru --new-file baseline/fsf/emacs/src/amiga_menu_protos.h amiga/fsf/emacs/src/amiga_menu_protos.h
  45817. --- baseline/fsf/emacs/src/amiga_menu_protos.h    Wed Dec 31 17:00:00 1969
  45818. +++ amiga/fsf/emacs/src/amiga_menu_protos.h    Sun Oct 15 17:09:18 1995
  45819. @@ -0,0 +1,18 @@
  45820. +/* Prototypes for functions defined in
  45821. +amiga_menu.c
  45822. + */
  45823. +
  45824. +extern struct Library * GadToolsBase;
  45825. +
  45826. +void suspend_menus(int );
  45827. +
  45828. +int resume_menus(int );
  45829. +
  45830. +void Famiga_delete_menus(int );
  45831. +
  45832. +void syms_of_amiga_menu(void);
  45833. +
  45834. +void init_amiga_menu(void);
  45835. +
  45836. +void cleanup_amiga_menu(void);
  45837. +
  45838. diff -ru --new-file baseline/fsf/emacs/src/amiga_processes.c amiga/fsf/emacs/src/amiga_processes.c
  45839. --- baseline/fsf/emacs/src/amiga_processes.c    Wed Dec 31 17:00:00 1969
  45840. +++ amiga/fsf/emacs/src/amiga_processes.c    Sun Oct 15 17:09:20 1995
  45841. @@ -0,0 +1,98 @@
  45842. +#include <exec/types.h>
  45843. +#include <exec/execbase.h>
  45844. +#include <exec/memory.h>
  45845. +#include <dos/dos.h>
  45846. +#include <dos/dosextens.h>
  45847. +#include <dos/dostags.h>
  45848. +#include <proto/exec.h>
  45849. +#include <proto/dos.h>
  45850. +#include <clib/alib_protos.h>
  45851. +#include <signal.h>
  45852. +#undef signal
  45853. +#include <ios1.h>
  45854. +#include <string.h>
  45855. +#include <errno.h>
  45856. +#include <stdio.h>
  45857. +#include <internal/vars.h>
  45858. +
  45859. +#include "config.h"
  45860. +#include "lisp.h"
  45861. +#include "amiga.h"
  45862. +#include "emacssignal.h"
  45863. +
  45864. +#ifdef USE_PROTOS
  45865. +#include "protos.h"
  45866. +#endif
  45867. +
  45868. +extern struct ExecBase *SysBase;
  45869. +
  45870. +int amiga_process_stack_size;
  45871. +
  45872. +/* A few emacs support functions */
  45873. +/* ----------------------------- */
  45874. +
  45875. +wait_for_termination (pid)
  45876. +     int pid;
  45877. +{
  45878. +  while (1)
  45879. +    {
  45880. +      sigsetmask (sigmask (SIGCHLD));
  45881. +      if (0 > kill (pid, 0))
  45882. +        {
  45883. +      sigsetmask (SIGEMPTYMASK);
  45884. +      break;
  45885. +    }
  45886. +      sigpause (SIGEMPTYMASK);
  45887. +    }
  45888. +}
  45889. +
  45890. +char *amiga_path(void)
  45891. +{
  45892. +  char *path, *pp, name[128];
  45893. +  int pathsize;
  45894. +  struct CommandLineInterface *cli;
  45895. +  BPTR lock;
  45896. +  long l, *lp, nlen;
  45897. +
  45898. +  pathsize = 128;
  45899. +  path = (char *)xmalloc(pathsize);
  45900. +
  45901. +  strcpy(path, ".");
  45902. +  pp = path + 1;
  45903. +
  45904. +  if (!(cli = (struct CommandLineInterface *)((long)_us->pr_CLI << 2)))
  45905. +    return path;
  45906. +
  45907. +  l = (long)cli->cli_CommandDir;
  45908. +  while (l) {
  45909. +    *pp++ = ',';
  45910. +    l <<= 2;
  45911. +    lp = (long *)l;
  45912. +    lock = (BPTR)*(lp + 1);
  45913. +    NameFromLock(lock, name, 128);
  45914. +    nlen = strlen(name);
  45915. +    if (pp + nlen + 5 >= path + pathsize)
  45916. +      {
  45917. +    char *newpath;
  45918. +
  45919. +    pathsize = 2 * pathsize + nlen;
  45920. +    newpath = (char *)xrealloc(path);
  45921. +    pp = newpath + (pp - path);
  45922. +    path = newpath;
  45923. +      }
  45924. +    memcpy(pp, name, nlen);
  45925. +    pp += nlen;
  45926. +    l = *lp;
  45927. +  }
  45928. +  /* Use of +5 above guarantees that there is enough space for c: */
  45929. +  strcpy(pp, ",c:");
  45930. +
  45931. +  return path;
  45932. +}
  45933. +
  45934. +void syms_of_amiga_processes(void)
  45935. +{
  45936. +  amiga_process_stack_size = 0;
  45937. +  DEFVAR_INT("amiga-process-stack-size", &amiga_process_stack_size,
  45938. +     "Size of stack for called processes. 0 means same size as emacs stack.");
  45939. +}
  45940. diff -ru --new-file baseline/fsf/emacs/src/amiga_rexx.c amiga/fsf/emacs/src/amiga_rexx.c
  45941. --- baseline/fsf/emacs/src/amiga_rexx.c    Wed Dec 31 17:00:00 1969
  45942. +++ amiga/fsf/emacs/src/amiga_rexx.c    Sun Oct 15 17:09:22 1995
  45943. @@ -0,0 +1,463 @@
  45944. +/* low level ARexx code for use in amiga version of Emacs.
  45945. +   Copyright (C) 1993 Christian E. Hopps.
  45946. +
  45947. +This file is part of GNU Emacs.
  45948. +
  45949. +GNU Emacs is free software; you can redistribute it and/or modify
  45950. +it under the terms of the GNU General Public License as published by
  45951. +the Free Software Foundation; either version 1, or (at your option)
  45952. +any later version.
  45953. +
  45954. +GNU Emacs is distributed in the hope that it will be useful,
  45955. +but WITHOUT ANY WARRANTY; without even the implied warranty of
  45956. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  45957. +GNU General Public License for more details.
  45958. +
  45959. +You should have received a copy of the GNU General Public License
  45960. +along with GNU Emacs; see the file COPYING.  If not, write to
  45961. +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  45962. +
  45963. +#include "SimpleRexx.h"
  45964. +#include <proto/exec.h>
  45965. +#include "config.h"
  45966. +#include "lisp.h"
  45967. +
  45968. +#include "amiga.h"
  45969. +
  45970. +#ifdef USE_PROTOS
  45971. +#include "protos.h"
  45972. +#endif
  45973. +
  45974. +#define XLRXMSG(x) ((struct LispRexxMsg *) XPNTR((x)))
  45975. +#define XSETLRXMSG(x,v) (XSET((x), Lisp_Int, v))
  45976. +
  45977. +static AREXXCONTEXT far handle;
  45978. +static int amiga_arexx_initialized;
  45979. +
  45980. +/* This structure should be allocated with emacs_malloc() its pointer will be */
  45981. +/* used as an msgid. (emacs XUINT())*/
  45982. +struct LispRexxMsg {
  45983. +  struct MinNode  lrm_Node;              /* A node for tracking messages. */
  45984. +  struct RexxMsg *lrm_Msg;              /* The actual Rexx Msg. */
  45985. +  ULONG  lrm_Flags;
  45986. +};
  45987. +/* Flags for LispRexxMessage indicating what to do with it. */
  45988. +#define LRMF_SENTCMD (1L << 0)              /* this msg originated here. */
  45989. +#define LRMF_DOERRORS (1L << 1)              /* handle error replies */
  45990. +#define LRMF_DORESULTS (1L << 2)          /* handle result strings */
  45991. +
  45992. +struct LispRexxList {
  45993. +    struct MinList lrl_List;
  45994. +    int    lrl_Count;
  45995. +};
  45996. +
  45997. +struct LispRexxList pending;              /* The list of pending */
  45998. +                          /* (outgoing) Rexx Messages. */
  45999. +struct LispRexxList returned;              /* The list of pending */
  46000. +                          /* (outgoing) Rexx Messages */
  46001. +                          /* that have been received. */
  46002. +struct LispRexxList incoming;              /* The message that are */
  46003. +                          /* incoming to Emacs (sent */
  46004. +                          /* from some other rexx host. */
  46005. +
  46006. +/* allocate a rexx message properly */
  46007. +Lisp_Object alloc_rexx_msg(ULONG flags)
  46008. +{
  46009. +    Lisp_Object rm = Qnil;
  46010. +    struct LispRexxMsg *lrm = (struct LispRexxMsg *)malloc(sizeof(*lrm));
  46011. +    if(lrm) {
  46012. +    lrm->lrm_Flags = flags;
  46013. +    XSETLRXMSG(rm,lrm);
  46014. +    return(rm);
  46015. +    }
  46016. +    return(Qnil);
  46017. +}
  46018. +
  46019. +/* free an arexx message allocated with alloc_arexx_msg() */
  46020. +void free_rexx_msg (Lisp_Object rm)
  46021. +{
  46022. +    if(!NILP(rm)) {
  46023. +    void *mem = XLRXMSG(rm);
  46024. +    free(mem);
  46025. +    }
  46026. +}
  46027. +
  46028. +/* The next 2 functions imlement FIFO lists. */
  46029. +
  46030. +/* add LispRexxMsg to a LispRexxLisp Tail. */
  46031. +void add_rexx_msg_to_tail(struct LispRexxList *rl, Lisp_Object rm)
  46032. +{
  46033. +    AddTail((struct List *)rl,(struct Node *)XPNTR(rm));
  46034. +    rl->lrl_Count++;
  46035. +}
  46036. +
  46037. +/* remove LispRexxMsg from head of a LispRexxLisp. */
  46038. +Lisp_Object remove_rexx_msg_from_head(struct LispRexxList *rl)
  46039. +{
  46040. +    Lisp_Object rm = (Lisp_Object)RemHead((struct List *)rl);
  46041. +    if(rm != 0) {
  46042. +    rl->lrl_Count--;
  46043. +    return(rm);
  46044. +    } else {
  46045. +        return Qnil;
  46046. +    }
  46047. +}
  46048. +
  46049. +void remove_rexx_msg(struct LispRexxList *rl, Lisp_Object rm)
  46050. +{
  46051. +    Remove((struct Node *)XPNTR(rm));
  46052. +    rl->lrl_Count--;
  46053. +}
  46054. +
  46055. +
  46056. +/* find a rexx message on a list given an msgid (ptr) */
  46057. +int is_rexx_msgid_on_list(struct LispRexxList *rl,
  46058. +                    Lisp_Object id)
  46059. +{
  46060. +    struct MinNode *mn = rl->lrl_List.mlh_Head;
  46061. +    for(mn; mn->mln_Succ; mn = mn->mln_Succ) {
  46062. +    Lisp_Object cmpid = Qnil;
  46063. +    XSETLRXMSG(cmpid,mn);
  46064. +    if( EQ(cmpid,id)) {
  46065. +        return(1);
  46066. +    }
  46067. +    }
  46068. +    return(0);
  46069. +}
  46070. +
  46071. +Lisp_Object find_rexx_msg_on_list(struct LispRexxList *rl,
  46072. +                  struct RexxMsg *msg)
  46073. +{
  46074. +    Lisp_Object pnt = Qnil;
  46075. +    struct MinNode *mn = rl->lrl_List.mlh_Head;
  46076. +    for(mn; mn->mln_Succ; mn = mn->mln_Succ) {
  46077. +    if( ((struct LispRexxMsg *)mn)->lrm_Msg == msg) {
  46078. +        XSETLRXMSG(pnt,mn);
  46079. +    }
  46080. +    }
  46081. +    return(pnt);
  46082. +}
  46083. +
  46084. +/* This function is given a RexxMsg and it goes and find (or doesn't) the */
  46085. +/* corisponding pending message, removes it from the list and sets up the lisp */
  46086. +/* list for return values.  if it is not found nil is returned. (it deals with */
  46087. +/* the errors for incoming messages properly.  Some thought is needed on how to */
  46088. +/* handle errors from replied sent commands that were not asking for results. */
  46089. +Lisp_Object handle_rexx_msg_replied(struct RexxMsg *msg)
  46090. +{
  46091. +    Lisp_Object rm = find_rexx_msg_on_list(&pending, msg);
  46092. +    if(!NILP(rm)) {
  46093. +    /* Process the command.  If it was requesting results strings handle */
  46094. +    /* them otherwise just delete. */
  46095. +    struct LispRexxMsg *lrm = XLRXMSG(rm);
  46096. +    remove_rexx_msg(&pending, rm);
  46097. +
  46098. +    if(msg->rm_Result1 == 0) {
  46099. +        if(lrm->lrm_Flags & LRMF_DORESULTS) {
  46100. +        /* add to returned so that result can be fetched. */
  46101. +        add_rexx_msg_to_tail(&returned,rm);
  46102. +        } else {
  46103. +        /* simply delete rexx message. */
  46104. +        DeleteARexxMsg(handle,msg);
  46105. +        free_rexx_msg(rm);
  46106. +        }
  46107. +    } else {
  46108. +        /* an error occured with our message. */
  46109. +        if(lrm->lrm_Flags & LRMF_DOERRORS) {
  46110. +        /* add to returned so that error can be fetched. */
  46111. +        add_rexx_msg_to_tail(&returned,rm);
  46112. +        } else {
  46113. +        /* simply delete rexx message. */
  46114. +        DeleteARexxMsg(handle,msg);
  46115. +        free_rexx_msg(rm);
  46116. +        }
  46117. +    }
  46118. +    } else {
  46119. +    /* This should never happen we received a rexx message reply */
  46120. +    /* that we never sent out. */
  46121. +    DeleteARexxMsg(handle,msg);
  46122. +    }
  46123. +}
  46124. +
  46125. +/* This function takes incoming messages and place them on the incoming msg */
  46126. +/* list.  */
  46127. +Lisp_Object handle_rexx_msg_received(struct RexxMsg *msg)
  46128. +{
  46129. +    Lisp_Object rm = alloc_rexx_msg(LRMF_DORESULTS|LRMF_DOERRORS);
  46130. +    if(!NILP(rm)) {
  46131. +    /* Add message to incoming list. */
  46132. +    struct LispRexxMsg *lrm = XLRXMSG(rm);
  46133. +    lrm->lrm_Msg = msg;              /* set msg pointer. */
  46134. +    add_rexx_msg_to_tail(&incoming,rm);
  46135. +    } else {
  46136. +    /* This should never happen we received a rexx message but ran out of */
  46137. +    /* memory.  Set last error msg. and reply with fail. */
  46138. +    SetARexxLastError(handle, msg, "Out of emacs memory.");
  46139. +    ReplyARexxMsg(handle, msg, 0, 20);
  46140. +    }
  46141. +}
  46142. +
  46143. +/* Almost the same as old one, but we now call handle_pending_arexx_reply() for */
  46144. +/* replied messages that we sent, so that we can setup result strings and such. */
  46145. +int check_arexx(int force, int kbd)
  46146. +{
  46147. +    struct RexxMsg *msg;
  46148. +    int msg_received = FALSE;
  46149. +    while (msg = GetARexxMsg(handle)) {
  46150. +    msg_received = TRUE;
  46151. +    if(msg->rm_Node.mn_Node.ln_Type == NT_REPLYMSG)    {
  46152. +        /* This is a reply to a rexx command we send out. */
  46153. +        handle_rexx_msg_replied(msg);
  46154. +    } else {
  46155. +        handle_rexx_msg_received(msg);
  46156. +    }
  46157. +    }
  46158. +    if ((kbd && amiga_arexx_initialized)) {
  46159. +    /* if we got a message or we have some out, or we have some waiting to */
  46160. +    /* be processes then enque the Key sequence that will call the rexx */
  46161. +    /* message handler.  We obviously don't do this for returned commands :^) */
  46162. +    if ((msg_received || force && incoming.lrl_Count > 0) &&
  46163. +        get_ttycount() == 0) {
  46164. +        enque(AMIGASEQ, FALSE, FALSE); enque('X', FALSE, FALSE);
  46165. +    }
  46166. +    }
  46167. +    return msg_received;
  46168. +}
  46169. +
  46170. +DEFUN ("amiga-arexx-wait", Famiga_arexx_wait, Samiga_arexx_wait, 0, 0, 0,
  46171. +       "Wait for an ARexx event (command or reply) before proceeding.")
  46172. +    ()
  46173. +{
  46174. +    while (!check_arexx(FALSE, FALSE)) Wait(ARexxSignal(handle));
  46175. +}
  46176. +
  46177. +DEFUN ("amiga-arexx-check-command",
  46178. +       Famiga_arexx_check_command, Samiga_arexx_check_command, 1, 1, 0,
  46179. +       "Return t if command ID has finished, nil otherwise.")
  46180. +    (id)
  46181. +Lisp_Object id;
  46182. +{
  46183. +    CHECK_NUMBER(id,0);
  46184. +
  46185. +    if(is_rexx_msgid_on_list(&pending,id)) {
  46186. +    /* still on pending return false. */
  46187. +    return Qnil;
  46188. +    } else if(is_rexx_msgid_on_list(&returned,id)) {
  46189. +    /* is waiting to be processed return true. */
  46190. +    return Qt;
  46191. +    }
  46192. +
  46193. +    /* is nowhere to be found. error. */
  46194. +    error("id not found.");
  46195. +    return Qnil;
  46196. +}
  46197. +
  46198. +DEFUN ("amiga-arexx-get-next-msg", Famiga_arexx_get_next_msg,
  46199. +       Samiga_get_next_msg, 0, 0, 0,
  46200. +"Returns the oldest arexx msg sent to emacs rexx port.\n\
  46201. +When you are through with this message call (amiga-arexx-reply).\n\
  46202. +if the msg is not replied this function will continue to\n\
  46203. +return that msg until it has been replied to.")
  46204. +  ()
  46205. +{
  46206. +    struct RexxMsg *rmsg;
  46207. +
  46208. +    check_arexx(FALSE, FALSE);
  46209. +    if (incoming.lrl_Count) {
  46210. +    struct RexxMsg *msg = ((struct LispRexxMsg *)
  46211. +                   incoming.lrl_List.mlh_Head)->lrm_Msg;
  46212. +    return build_string(ARG0(msg));
  46213. +    }
  46214. +    /* nothing to be gotten. */
  46215. +    return Qnil;
  46216. +}
  46217. +
  46218. +DEFUN("amiga-arexx-get-msg-results", Famiga_arexx_get_msg_results,
  46219. +      Samiga_arexx_get_msg_results, 1,1,0,
  46220. +"Returns the results from MSGID. will be a list of the form:\n\
  46221. +  (msgid resultcode secondary)\n\n\
  46222. +If resultcode is 0 then secondary will be a string or nil.\n\
  46223. +else resulcode will be greater than 0 and secondary will be\n\
  46224. +an error-code (int).\n\n\
  46225. +If MSGID has not yet completed nil is returned.\n\
  46226. +if MSGID has been dealt with or is invalid and error will occur.")
  46227. +    (msgid)
  46228. +Lisp_Object msgid;
  46229. +{
  46230. +    CHECK_NUMBER(msgid,0);
  46231. +
  46232. +    if(is_rexx_msgid_on_list(&returned,msgid)) {
  46233. +    /* msgid has completed build list and delete LispRexxMsg. */
  46234. +    struct LispRexxMsg *lrm = XLRXMSG(msgid);
  46235. +    Lisp_Object rc, error_or_string, ret;
  46236. +    struct RexxMsg *msg = lrm->lrm_Msg;
  46237. +
  46238. +    remove_rexx_msg(&returned,msgid);
  46239. +
  46240. +    rc = make_number(msg->rm_Result1);
  46241. +    if(msg->rm_Result1 == 0) {
  46242. +        error_or_string = msg->rm_Result2 ? build_string((char *) msg->rm_Result2) : 0;
  46243. +    } else {
  46244. +        /* error occurred */
  46245. +        error_or_string = make_number(msg->rm_Result2); /* save error code. */
  46246. +    }
  46247. +    free_rexx_msg(msgid);              /* free our rexx msg. */
  46248. +    DeleteARexxMsg(handle,msg);          /* free ARexx msg proper */
  46249. +
  46250. +    /* build lisp list. */
  46251. +    ret = Fcons( msgid, Fcons( rc, Fcons(error_or_string, Qnil)));
  46252. +    if(NILP(ret)) {
  46253. +        error("Couldn't get memory.");
  46254. +    }
  46255. +    return(ret);
  46256. +    } else if(is_rexx_msgid_on_list(&pending,msgid)) {
  46257. +    return Qnil;                  /* this msgid has not yet completed. */
  46258. +    } else {
  46259. +    error("Unknown MSGID.");
  46260. +    return Qnil;
  46261. +    }
  46262. +}
  46263. +
  46264. +DEFUN ("amiga-arexx-reply", Famiga_arexx_reply, Samiga_arexx_reply,
  46265. +       2, 2, 0,
  46266. +"Replies to the first arexx message (the one got via amiga-arexx-get-event)\n\
  46267. +with RC as return code.\n\
  46268. +If RC=0, TEXT is the result, otherwise it is the error text. It can be nil.")
  46269. +    (rc, text)
  46270. +Lisp_Object rc, text;
  46271. +{
  46272. +    int retcode, ok = TRUE;
  46273. +    char *result;
  46274. +    struct RexxMsg *rmsg;
  46275. +    Lisp_Object rm = remove_rexx_msg_from_head(&incoming);
  46276. +    struct LispRexxMsg *lrm = XLRXMSG(rm);
  46277. +
  46278. +    if (NILP(rm))
  46279. +    error("No ARexx message to reply to.");
  46280. +
  46281. +    rmsg = lrm->lrm_Msg;
  46282. +
  46283. +    CHECK_NUMBER(rc, 0);
  46284. +    retcode = XINT(rc);
  46285. +
  46286. +    if (!NILP (text)) {
  46287. +    CHECK_STRING(text, 0);
  46288. +    result = XSTRING (text)->data;
  46289. +    } else {
  46290. +    result = 0;
  46291. +    }
  46292. +    if (retcode && result)
  46293. +    ok = SetARexxLastError(handle, rmsg, result);
  46294. +    ReplyARexxMsg(handle, rmsg, result, retcode);
  46295. +
  46296. +    if (!ok)
  46297. +    error("Failed to set ARexx error message.");
  46298. +
  46299. +    return Qnil;
  46300. +}
  46301. +
  46302. +Lisp_Object send_rexx_command(Lisp_Object str, Lisp_Object as_file,
  46303. +                  ULONG flags)
  46304. +{
  46305. +    struct RexxMsg *rmsg;
  46306. +    int i;
  46307. +    Lisp_Object id, rm;
  46308. +    struct LispRexxMsg *lrm;
  46309. +
  46310. +    rm = alloc_rexx_msg(flags);
  46311. +    if(NILP(rm)) {
  46312. +    error("Failed to send command to ARexx.");
  46313. +    return Qnil;
  46314. +    }
  46315. +
  46316. +    CHECK_STRING (str, 0);
  46317. +    if (!(rmsg = SendARexxMsg(handle, XSTRING (str)->data,!NILP (as_file),
  46318. +                  (flags & LRMF_DORESULTS ? 1 : 0)))) {
  46319. +    free_rexx_msg(rm);
  46320. +    error("Failed to send command to ARexx.");
  46321. +    return Qnil;
  46322. +    }
  46323. +    lrm = XLRXMSG(rm);
  46324. +    lrm->lrm_Msg = rmsg;              /* set rexx message pointer. */
  46325. +    add_rexx_msg_to_tail(&pending,rm);          /* add to pending list. */
  46326. +
  46327. +    return(rm);
  46328. +}
  46329. +
  46330. +DEFUN ("amiga-arexx-send-command", Famiga_arexx_send_command,
  46331. +       Samiga_arexx_send_command, 1, 2, 0,
  46332. +"Sends a command to ARexx for execution.\n\
  46333. +If the second arg is non-nil, the command is directly interpreted.\n\
  46334. +Returns an integer that uniquely identifies this message.  This must\n\
  46335. +then be used to get the results from the command.\n\
  46336. +NOTE: this is very different from old way things worked.\n\
  46337. +      earlier versions of emacs discarded successful results\n\
  46338. +      and errors always got replied to becuase they caused failures\n\
  46339. +      Neither of these are true now.\
  46340. +This function is also no longer interactive.\n\
  46341. +Use (amiga-arexx-do-command)\n")
  46342. +    (str, as_file)
  46343. +Lisp_Object str, as_file;
  46344. +{
  46345. +    return(send_rexx_command(str,as_file,
  46346. +                 LRMF_DORESULTS|
  46347. +                 LRMF_DOERRORS|
  46348. +                 LRMF_SENTCMD));
  46349. +}
  46350. +
  46351. +void init_amiga_rexx(void)
  46352. +{
  46353. +    extern ULONG inputsig;
  46354. +    int i;
  46355. +
  46356. +    handle = InitARexx("Emacs", "elx");
  46357. +    inputsig |= ARexxSignal(handle);
  46358. +
  46359. +    /* init exec lists. */
  46360. +    NewList((struct List *)&incoming.lrl_List);
  46361. +    incoming.lrl_Count = 0;
  46362. +
  46363. +    NewList((struct List *)&pending.lrl_List);
  46364. +    pending.lrl_Count = 0;
  46365. +
  46366. +    NewList((struct List *)&returned.lrl_List);
  46367. +    returned.lrl_Count = 0;
  46368. +}
  46369. +
  46370. +void cleanup_amiga_rexx(void)
  46371. +{
  46372. +    /* Delete and reply all rexx messages we have gotten. */
  46373. +    Lisp_Object rm = remove_rexx_msg_from_head(&returned);
  46374. +    while(!NILP(rm)) {
  46375. +    struct LispRexxMsg *lrm = XLRXMSG(rm);
  46376. +    DeleteARexxMsg(handle,lrm->lrm_Msg);
  46377. +    free_rexx_msg(rm);
  46378. +    rm = remove_rexx_msg_from_head(&returned);
  46379. +    }
  46380. +
  46381. +    rm = remove_rexx_msg_from_head(&incoming);
  46382. +    while(!NILP(rm)) {
  46383. +    struct LispRexxMsg *lrm = XLRXMSG(rm);
  46384. +    ReplyARexxMsg(handle, lrm->lrm_Msg, 0, 20);
  46385. +    free_rexx_msg(rm);
  46386. +    rm = remove_rexx_msg_from_head(&incoming);
  46387. +    }
  46388. +
  46389. +    /* Free the rest of rexx, will wait for pending msgs to return */
  46390. +    FreeARexx(handle);
  46391. +}
  46392. +
  46393. +void syms_of_amiga_rexx(void)
  46394. +{
  46395. +    DEFVAR_BOOL ("amiga-arexx-initialized", &amiga_arexx_initialized,
  46396. +         "Set this to t when Emacs is ready to respond to ARexx messages.\n"
  46397. +         "(ie C-\ X causes all pending ARexx messages to be answered)");
  46398. +    amiga_arexx_initialized = 0;
  46399. +
  46400. +    defsubr(&Samiga_arexx_send_command);
  46401. +    defsubr(&Samiga_arexx_reply);
  46402. +    defsubr(&Samiga_get_next_msg);
  46403. +    defsubr(&Samiga_arexx_get_msg_results);
  46404. +    defsubr(&Samiga_arexx_check_command);
  46405. +    defsubr(&Samiga_arexx_wait);
  46406. +}
  46407. diff -ru --new-file baseline/fsf/emacs/src/amiga_rexx_protos.h amiga/fsf/emacs/src/amiga_rexx_protos.h
  46408. --- baseline/fsf/emacs/src/amiga_rexx_protos.h    Wed Dec 31 17:00:00 1969
  46409. +++ amiga/fsf/emacs/src/amiga_rexx_protos.h    Sun Oct 15 17:09:24 1995
  46410. @@ -0,0 +1,66 @@
  46411. +/* Prototypes for functions defined in
  46412. +amiga_rexx.c
  46413. + */
  46414. +
  46415. +extern void * __far handle;
  46416. +
  46417. +extern int amiga_arexx_initialized;
  46418. +
  46419. +extern struct LispRexxList pending;
  46420. +
  46421. +extern struct LispRexxList returned;
  46422. +
  46423. +extern struct LispRexxList incoming;
  46424. +
  46425. +int alloc_rexx_msg(unsigned long );
  46426. +
  46427. +void free_rexx_msg(int );
  46428. +
  46429. +void add_rexx_msg_to_tail(struct LispRexxList * , int );
  46430. +
  46431. +int remove_rexx_msg_from_head(struct LispRexxList * );
  46432. +
  46433. +void remove_rexx_msg(struct LispRexxList * , int );
  46434. +
  46435. +int is_rexx_msgid_on_list(struct LispRexxList * , int );
  46436. +
  46437. +int find_rexx_msg_on_list(struct LispRexxList * , struct RexxMsg * );
  46438. +
  46439. +int handle_rexx_msg_replied(struct RexxMsg * );
  46440. +
  46441. +int handle_rexx_msg_received(struct RexxMsg * );
  46442. +
  46443. +int check_arexx(int , int );
  46444. +
  46445. +extern struct Lisp_Subr Samiga_arexx_wait;
  46446. +
  46447. +int Famiga_arexx_wait(void);
  46448. +
  46449. +extern struct Lisp_Subr Samiga_arexx_check_command;
  46450. +
  46451. +int Famiga_arexx_check_command(int );
  46452. +
  46453. +extern struct Lisp_Subr Samiga_get_next_msg;
  46454. +
  46455. +int Famiga_arexx_get_next_msg(void);
  46456. +
  46457. +extern struct Lisp_Subr Samiga_arexx_get_msg_results;
  46458. +
  46459. +int Famiga_arexx_get_msg_results(int );
  46460. +
  46461. +extern struct Lisp_Subr Samiga_arexx_reply;
  46462. +
  46463. +int Famiga_arexx_reply(int , int );
  46464. +
  46465. +int send_rexx_command(int , int , unsigned long );
  46466. +
  46467. +extern struct Lisp_Subr Samiga_arexx_send_command;
  46468. +
  46469. +int Famiga_arexx_send_command(int , int );
  46470. +
  46471. +void init_amiga_rexx(void);
  46472. +
  46473. +void cleanup_amiga_rexx(void);
  46474. +
  46475. +void syms_of_amiga_rexx(void);
  46476. +
  46477. diff -ru --new-file baseline/fsf/emacs/src/amiga_screen.c amiga/fsf/emacs/src/amiga_screen.c
  46478. --- baseline/fsf/emacs/src/amiga_screen.c    Wed Dec 31 17:00:00 1969
  46479. +++ amiga/fsf/emacs/src/amiga_screen.c    Sun Oct 15 17:09:26 1995
  46480. @@ -0,0 +1,1854 @@
  46481. +#include "config.h"
  46482. +#include "lisp.h"
  46483. +#include "termchar.h"
  46484. +#include "dispextern.h"
  46485. +#include "termhooks.h"
  46486. +#include "frame.h"
  46487. +
  46488. +#include <stdio.h>
  46489. +#include <string.h>
  46490. +#include <stddef.h>
  46491. +#include <sys/time.h>
  46492. +#include <internal/devices.h>
  46493. +#include <internal/vars.h>
  46494. +
  46495. +#define min(x,y) ((x) > (y) ? (y) : (x))
  46496. +#define max(x,y) ((x) < (y) ? (y) : (x))
  46497. +
  46498. +#undef LONGBITS
  46499. +
  46500. +#include <exec/types.h>
  46501. +#include <exec/interrupts.h>
  46502. +#include <devices/input.h>
  46503. +#include <devices/inputevent.h>
  46504. +#include <intuition/intuitionbase.h>
  46505. +#include <intuition/intuition.h>
  46506. +#include <devices/conunit.h>
  46507. +#include <devices/inputevent.h>
  46508. +#include <graphics/gfxbase.h>
  46509. +#include <graphics/gfxmacros.h>
  46510. +#include <utility/hooks.h>
  46511. +#include <workbench/startup.h>
  46512. +#include <workbench/workbench.h>
  46513. +#include <libraries/asl.h>
  46514. +
  46515. +#include <proto/exec.h>
  46516. +#include <proto/dos.h>
  46517. +#include <proto/intuition.h>
  46518. +#include <proto/graphics.h>
  46519. +#include <proto/console.h>
  46520. +#include <proto/diskfont.h>
  46521. +#include <proto/wb.h>
  46522. +#include <proto/asl.h>
  46523. +
  46524. +/* this is defined for those unlucky enough
  46525. + * not to have the 3.0 headers  -ch3/16/93. */
  46526. +#ifndef WA_NewLookMenus
  46527. +#define WA_NewLookMenus (WA_Dummy + 0x30)
  46528. +#endif
  46529. +
  46530. +#include "amiga.h"
  46531. +
  46532. +#ifdef USE_PROTOS
  46533. +#include "protos.h"
  46534. +#endif
  46535. +
  46536. +void screen_puts(FRAME_PTR f, char *str, unsigned int len);
  46537. +
  46538. +/* CHFIXME: amiga.h */
  46539. +extern int map_menu_selection(int menu_num, int item_num, int subitem_num, Lisp_Object *subprefixes);
  46540. +
  46541. +#define SHIFT_MASK (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)
  46542. +#define CONTROL_MASK IEQUALIFIER_CONTROL
  46543. +/* CHFIXME: check other usages of META_MASK for need of NO_SNAP_MASK */
  46544. +#define META_MASK (IEQUALIFIER_LALT)
  46545. +/* CHFIXME: need input from others if using
  46546. + * IEQUALIFIER_RELATIVEMOUSE make something fail
  46547. + * IEQUALIFIER_RELATIVEMOUSE is set on normal typing but not
  46548. + * when snapped characters are inserted (e.g. via snap or powersnap)
  46549. + * these snappers use LALT as qualifier but don\'t want it to mean
  46550. + * META
  46551. + */
  46552. +#define NO_SNAP_MASK (IEQUALIFIER_RELATIVEMOUSE)
  46553. +
  46554. +struct GfxBase *GfxBase;
  46555. +struct IntuitionBase *IntuitionBase;
  46556. +struct Library *DiskfontBase, *KeymapBase, *WorkbenchBase;
  46557. +
  46558. +static char intkey_code, intkey_qualifier;
  46559. +static struct IOStdReq *input_req;
  46560. +static struct Interrupt int_handler_hook;
  46561. +static int hooked;
  46562. +
  46563. +static struct MsgPort *wbport;
  46564. +static struct AppWindow *emacs_app_win;
  46565. +static struct AppIcon *emacs_icon;
  46566. +
  46567. +struct Library *ConsoleDevice;
  46568. +static struct TextFont *font;
  46569. +static int font_opened;
  46570. +/* The reset string resets the console, turns off scrolling and sets up
  46571. +   the foreground & background colors. */
  46572. +#define CONSOLE_RESET "\x1b""c\x9b>1l\x9b""3%d;4%d;>%dm"
  46573. +static char reset_string[20]; /* Must be big enough for
  46574. +              printf(CONSOLE_RESET, foreground, background, background);
  46575. +              (0 <= foreground, background <= 7) */
  46576. +
  46577. +/* These are the pen numbers for emacs window's base colors */
  46578. +int foreground = 1, background = 0;
  46579. +
  46580. +/* Current window, and its main characteristics */
  46581. +#if 0
  46582. +struct Window *EMACS_WIN(f);
  46583. +#endif
  46584. +WORD emacs_x = 0, emacs_y = 0, emacs_w = 640, emacs_h = 200;
  46585. +char *emacs_screen_name;
  46586. +/* a storage area for the name of the screen last opened on */
  46587. +char emacs_screen_name_storage[MAXPUBSCREENNAME+1];
  46588. +int emacs_backdrop = 0;        /* Use backdrop window ? */
  46589. +
  46590. +/* Current window size: */
  46591. +#define EMACS_X(f) (EMACS_WIN(f) ? EMACS_WIN(f)->LeftEdge : emacs_x)
  46592. +#define EMACS_Y(f) (EMACS_WIN(f) ? EMACS_WIN(f)->TopEdge : emacs_y)
  46593. +#define EMACS_W(f) (EMACS_WIN(f) ? EMACS_WIN(f)->Width : emacs_w)
  46594. +#define EMACS_H(f) (EMACS_WIN(f) ? EMACS_WIN(f)->Height : emacs_h)
  46595. +
  46596. +/* used for setting the color of standout text  -ch3/16/93. */
  46597. +int inverse_fill_pen = 8, inverse_text_pen = 8;
  46598. +
  46599. +/* IO request for all console io. */
  46600. +#ifndef MULTI_FRAME
  46601. +static struct IOStdReq *emacs_console;
  46602. +#else
  46603. +you lose
  46604. +#endif
  46605. +
  46606. +#define emacs_icon_width 57
  46607. +#define emacs_icon_height 55
  46608. +#define emacs_icon_num_planes 1
  46609. +#define emacs_icon_words_per_plane 220
  46610. +
  46611. +UWORD chip emacs_icon_data[1][55][4] = {
  46612. +  {
  46613. +    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  46614. +    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  46615. +    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0fe0,0x6000,
  46616. +    0x0000,0x0000,0x0060,0x6000,0x0000,0x0000,0x0fff,0xe000,
  46617. +    0x0000,0x0000,0x1800,0x2000,0x0000,0x0000,0x13ff,0xa000,
  46618. +    0x0000,0x0000,0x1400,0xa000,0x0000,0x0000,0x3600,0xa000,
  46619. +    0x0000,0x0000,0x0000,0xa000,0x0000,0x0000,0x0c00,0xa000,
  46620. +    0x0000,0x0000,0x1e00,0xa000,0x0000,0x0000,0x0c00,0xa000,
  46621. +    0x0000,0x0000,0x0000,0xa000,0x0000,0x0000,0x2100,0xa000,
  46622. +    0x0000,0x0000,0x3300,0xa000,0x0000,0x0000,0x0c00,0xa000,
  46623. +    0x003f,0xffff,0xffff,0xb000,0x001f,0xffff,0xffff,0x8000,
  46624. +    0x004e,0x0000,0x0001,0xf000,0x00c6,0x00f0,0x0001,0x8000,
  46625. +    0x00c6,0x0100,0x0001,0x8000,0x0006,0x0103,0x9201,0x8000,
  46626. +    0x0006,0x013a,0x5201,0x8000,0x00c6,0x010a,0x5201,0x8000,
  46627. +    0x00c6,0x010a,0x5601,0x8000,0x0086,0x00f2,0x4a01,0x8000,
  46628. +    0x0006,0x0000,0x0001,0x8000,0x0046,0x0000,0x0001,0x8000,
  46629. +    0x00c6,0x7c00,0x0001,0x8000,0x00c6,0x4000,0x0001,0x8000,
  46630. +    0x0006,0x41d8,0xc319,0x8000,0x0006,0x7925,0x24a1,0x8000,
  46631. +    0x00c6,0x4125,0x2419,0x8000,0x01c6,0x4125,0x2485,0x8000,
  46632. +    0x0086,0x7d24,0xd319,0x8000,0x0007,0x0000,0x0003,0x8000,
  46633. +    0x0003,0xffe3,0xffff,0x0000,0x0081,0xfff7,0xfffe,0x0000,
  46634. +    0x01c0,0x0036,0x0000,0x0000,0x0180,0x0014,0x0f80,0x0000,
  46635. +    0x0000,0x0014,0x1040,0x0000,0x0000,0x0014,0x2720,0x0000,
  46636. +    0x0000,0x0012,0x28a0,0x0000,0x0080,0x000a,0x48a0,0x0000,
  46637. +    0x01c0,0x0009,0x90a0,0x0000,0x0180,0x0004,0x20a0,0x0000,
  46638. +    0x0000,0x0003,0xc0a0,0x0000,0x0000,0x0000,0x00a0,0x0000,
  46639. +    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  46640. +    0x0000,0x0000,0x0000,0x0000
  46641. +  },
  46642. +};
  46643. +
  46644. +struct Image far emacs_icon_image = {
  46645. +  0, 0,
  46646. +  emacs_icon_width, emacs_icon_height, emacs_icon_num_planes,
  46647. +  (UWORD *)emacs_icon_data,
  46648. +  3, 0,
  46649. +  0
  46650. +};
  46651. +
  46652. +static struct DiskObject far emacs_icon_object = {
  46653. +  0, 0,
  46654. +  { 0, 0, 0, emacs_icon_width, emacs_icon_height, 0, 0, 0, (APTR)&emacs_icon_image },
  46655. +  0, 0, 0,
  46656. +  NO_ICON_POSITION, NO_ICON_POSITION
  46657. +};
  46658. +
  46659. +static struct Hook background_hook;
  46660. +
  46661. +#define TRY_NEW_MOUSE /* CHFIXME */
  46662. +
  46663. +#define EVENTSIZE 32
  46664. +
  46665. +static struct event {
  46666. +  ULONG class;
  46667. +  UWORD code, qual;
  46668. +  WORD x, y;
  46669. +} events[EVENTSIZE];
  46670. +static int event_num, event_in, event_out;
  46671. +
  46672. +static struct wbevent {
  46673. +  struct wbevent *next;
  46674. +  char file[1];
  46675. +} *wbevents;
  46676. +
  46677. +Lisp_Object Vamiga_mouse_pos;
  46678. +Lisp_Object Vamiga_mouse_item;
  46679. +extern Lisp_Object MouseMap;
  46680. +int amiga_remap_bsdel;
  46681. +int amiga_remap_numeric_keypad;
  46682. +int amiga_mouse_initialized;
  46683. +int amiga_wb_initialized;
  46684. +int emacs_iconified;
  46685. +static int mouse_event; /* set if mouse_event happened */
  46686. +
  46687. +int
  46688. +mouse_event_pending()
  46689. +{
  46690. +    return mouse_event>0;
  46691. +}
  46692. +void
  46693. +reset_mouse_event_pending()
  46694. +{
  46695. +    mouse_event = 0;
  46696. +}
  46697. +
  46698. +void
  46699. +set_mouse_event_pending()
  46700. +{
  46701. +    mouse_event = 1;
  46702. +}
  46703. +
  46704. +static int amiga_pos_x(FRAME_PTR f, int x)
  46705. +{
  46706. +  return (x - EMACS_WIN(f)->BorderLeft) / EMACS_WIN(f)->RPort->Font->tf_XSize;
  46707. +}
  46708. +
  46709. +static int amiga_pos_y(FRAME_PTR f, int y)
  46710. +{
  46711. +  return (y - EMACS_WIN(f)->BorderTop) / EMACS_WIN(f)->RPort->Font->tf_YSize;
  46712. +}
  46713. +
  46714. +void
  46715. +glyph_to_pixel_coords(FRAME_PTR f, int col, int row, int *pixcol, int *pixrow)
  46716. +{
  46717. +    *pixcol = (col * EMACS_WIN(f)->RPort->Font->tf_XSize) + EMACS_WIN(f)->BorderLeft;
  46718. +    *pixrow = (row * EMACS_WIN(f)->RPort->Font->tf_YSize) + EMACS_WIN(f)->BorderTop;
  46719. +}
  46720. +
  46721. +/* Given a pixel position (PIX_X, PIX_Y) on the frame F, return
  46722. +   glyph co-ordinates in (*X, *Y).  Set *BOUNDS to the rectangle
  46723. +   that the glyph at X, Y occupies, if BOUNDS != 0.
  46724. +   If NOCLIP is nonzero, do not force the value into range.  */
  46725. +
  46726. +void
  46727. +pixel_to_glyph_coords(FRAME_PTR f, int pixcol, int pixrow, int *col, int *row,
  46728. +              void *bounds, int noclip)
  46729. +{
  46730. +    int acol, arow;
  46731. +
  46732. +    /* Arrange for the division in amiga_pos_x etc. to round down
  46733. +       even for negative valuse. */
  46734. +    if(pixcol < 0)
  46735. +    pixcol -= EMACS_WIN(f)->RPort->Font->tf_XSize -1; /* CHFIXME: use FONT_WIDTH */
  46736. +    if(pixrow < 0)
  46737. +    pixrow -= EMACS_WIN(f)->RPort->Font->tf_YSize -1; /* CHFIXME: use FONT_HEIGH */
  46738. +    acol = amiga_pos_x(f, pixcol);
  46739. +    arow = amiga_pos_y(f, pixrow);
  46740. +    /* no bounds if not MULTI_FRAME */
  46741. +    if(!noclip)
  46742. +    {
  46743. +    if(acol < 0) acol = 0;
  46744. +    if(arow < 0) arow = 0;
  46745. +    if(acol > FRAME_WIDTH(f)) acol = FRAME_WIDTH(f);
  46746. +    if(arow > FRAME_HEIGHT(f)) arow = FRAME_HEIGHT(f);
  46747. +    }
  46748. +    *col = acol;
  46749. +    *row = arow;
  46750. +}
  46751. +
  46752. +extern int waiting_for_input; /* CHFIXME */
  46753. +extern int frame_garbaged;
  46754. +
  46755. +static void amiga_change_size(FRAME_PTR f)
  46756. +{
  46757. +  int new_height = amiga_pos_y(f, EMACS_WIN(f)->Height - EMACS_WIN(f)->BorderBottom);
  46758. +  int new_width = amiga_pos_x(f, EMACS_WIN(f)->Width - EMACS_WIN(f)->BorderRight);
  46759. +
  46760. +  /* Is this true for Emacs 19.28?
  46761. +     I consider that refreshes are possible during a select, which is
  46762. +     true for the current state of emacs */
  46763. +  change_frame_size(selected_frame, new_height, new_width, 0,
  46764. +            !selecting && !waiting_for_input);
  46765. +
  46766. +  /* Force redisplay */
  46767. +  SET_FRAME_GARBAGED(selected_frame);
  46768. +}
  46769. +
  46770. +/* Get terminal size from system.
  46771. +   Store number of lines into *heightp and width into *widthp.
  46772. +   If zero is stored, the value is not valid.  */
  46773. +
  46774. +void amiga_get_window_size (FRAME_PTR f, int *widthp, int *heightp)
  46775. +{
  46776. +  if (EMACS_WIN(f))
  46777. +    {
  46778. +      *heightp = amiga_pos_y(f, EMACS_WIN(f)->Height - EMACS_WIN(f)->BorderBottom);
  46779. +      *widthp = amiga_pos_x(f, EMACS_WIN(f)->Width - EMACS_WIN(f)->BorderRight);
  46780. +    }
  46781. +  else
  46782. +    {
  46783. +      *heightp = 0;
  46784. +      *widthp = 0;
  46785. +    }
  46786. +}
  46787. +
  46788. +static int set_min_size(struct Window *win, struct TextFont *font,
  46789. +            WORD *minw, WORD *minh)
  46790. +{
  46791. +  *minw = 11 * font->tf_XSize + win->BorderLeft + win->BorderRight;
  46792. +  *minh = 4 * font->tf_YSize + win->BorderTop + win->BorderBottom;
  46793. +
  46794. +  return (int)WindowLimits(win, *minw, *minh, 0, 0);
  46795. +}
  46796. +
  46797. +struct fill
  46798. +{
  46799. +  struct Layer *layer;
  46800. +  struct Rectangle bounds;
  46801. +  WORD offsetx, offsety;
  46802. +};
  46803. +
  46804. +/* __interrupt disables stack checking.   -ch3/19/93. */
  46805. +static ULONG __asm __saveds __interrupt
  46806. +fill_background(register __a2 struct RastPort *obj,
  46807. +        register __a1 struct fill *msg)
  46808. +{
  46809. +  struct Layer *l;
  46810. +
  46811. +  SetAPen(obj, background);
  46812. +  SetDrMd(obj, JAM1);
  46813. +  SetAfPt(obj, 0, 0);
  46814. +  SetWrMsk(obj, 0xff);
  46815. +  /* Gross hack starts here */
  46816. +  l = obj->Layer;
  46817. +  obj->Layer = 0;
  46818. +  /* Stops */
  46819. +  RectFill(obj, msg->bounds.MinX, msg->bounds.MinY,
  46820. +       msg->bounds.MaxX, msg->bounds.MaxY);
  46821. +  /* Starts again */
  46822. +  obj->Layer = l;
  46823. +  /* And finally dies */
  46824. +
  46825. +  return 0;
  46826. +}
  46827. +
  46828. +static void clear_window(FRAME_PTR f)
  46829. +{
  46830. +  SetAPen(EMACS_WIN(f)->RPort, background);
  46831. +  RectFill(EMACS_WIN(f)->RPort, EMACS_WIN(f)->BorderLeft, EMACS_WIN(f)->BorderTop,
  46832. +       EMACS_WIN(f)->Width - EMACS_WIN(f)->BorderRight - 1,
  46833. +       EMACS_WIN(f)->Height - EMACS_WIN(f)->BorderBottom - 1);
  46834. +}
  46835. +
  46836. +static int make_reset_string(void)
  46837. +{
  46838. +  sprintf(reset_string, CONSOLE_RESET, foreground, background, background);
  46839. +}
  46840. +
  46841. +void reset_window(FRAME_PTR f)
  46842. +{
  46843. +  make_reset_string();
  46844. +  if (EMACS_WIN(f))
  46845. +    {
  46846. +      screen_puts (f, reset_string, strlen(reset_string));
  46847. +      clear_window(f);
  46848. +      amiga_change_size (f);
  46849. +    }
  46850. +}
  46851. +
  46852. +static void close_app_win(void)
  46853. +{
  46854. +  if (emacs_app_win)
  46855. +    {
  46856. +      struct AppMessage *msg;
  46857. +
  46858. +      RemoveAppWindow(emacs_app_win); /* What can I do if it fails ?! */
  46859. +      while (msg = (struct AppMessage *)GetMsg(wbport)) ReplyMsg(msg);
  46860. +    }
  46861. +}
  46862. +
  46863. +#ifdef MULTI_FRAME
  46864. +you lose!
  46865. +#endif
  46866. +
  46867. +static int close_emacs_window(FRAME_PTR f)
  46868. +{
  46869. +  close_app_win();
  46870. +  inputsig &= ~(1L << EMACS_WIN(f)->UserPort->mp_SigBit);
  46871. +  _device_close(emacs_console);
  46872. +  if(EMACS_WIN(f))
  46873. +    {
  46874. +      /* put title back the way it should be   -ch3/19/93. */
  46875. +      ShowTitle(EMACS_WIN(f)->WScreen, !emacs_backdrop);
  46876. +    }
  46877. +  CloseWindow(EMACS_WIN(f));
  46878. +  emacs_console = 0;
  46879. +  EMACS_WIN(f) = 0;
  46880. +  ConsoleDevice = 0;
  46881. +}
  46882. +
  46883. +/* We need this function because we do not always have the string
  46884. + * for the screen we opened on. for example LockPubScreen(NULL);
  46885. + * This function will get the name by looping through all public
  46886. + * screens looking for the one that matches ours. -ch3/20/93 */
  46887. +
  46888. +char *get_screen_name(struct Screen *this, char *namebuf)
  46889. +{
  46890. +  struct PubScreenNode *pubscreens =
  46891. +    (struct PubScreenNode *)LockPubScreenList()->lh_Head;
  46892. +
  46893. +  while (pubscreens->psn_Node.ln_Succ)
  46894. +    {
  46895. +      if (pubscreens->psn_Screen == this)
  46896. +    {
  46897. +      strcpy(namebuf, pubscreens->psn_Node.ln_Name);
  46898. +      UnlockPubScreenList();
  46899. +      return namebuf;
  46900. +    }
  46901. +      pubscreens = (struct PubScreenNode *)pubscreens->psn_Node.ln_Succ;
  46902. +    }
  46903. +  /* Failed to find screen */
  46904. +  namebuf[0] = '\0';
  46905. +  UnlockPubScreenList();
  46906. +
  46907. +  return 0;
  46908. +}
  46909. +
  46910. +enum open_emacs_win_ret { ok, no_screen, no_window };
  46911. +
  46912. +/* added two parameters to eliminate the need for the global
  46913. + * which was causing some unwanted effect (bugs). -ch3/19/93 */
  46914. +
  46915. +static enum open_emacs_win_ret
  46916. +open_emacs_window(FRAME_PTR f, UWORD x, UWORD y, UWORD w, UWORD h, int backdrop,
  46917. +          char *pubscreen_name)
  46918. +     /* Open or reopen emacs window */
  46919. +{
  46920. +  WORD minw, minh;
  46921. +  struct Screen *new_screen;
  46922. +  struct Window *new_win;
  46923. +  struct IOStdReq *new_console;
  46924. +  int no_backdrop = !backdrop;
  46925. +
  46926. +  new_screen = LockPubScreen(pubscreen_name);
  46927. +
  46928. +  if (!new_screen)
  46929. +    return no_screen;
  46930. +
  46931. +  /* removed newwindow structure, and added as tag
  46932. +   * items so that we can change them easier. -ch3/16/93. */
  46933. +
  46934. +  new_win = OpenWindowTags(0, WA_Left, x, WA_Top, y,
  46935. +                  WA_Width, w, WA_Height, h,    /* Static items */
  46936. +                  WA_AutoAdjust, 1, WA_NewLookMenus, 1,
  46937. +                  WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_RAWKEY |
  46938. +                            IDCMP_MOUSEBUTTONS| IDCMP_NEWSIZE |
  46939. +                            IDCMP_MENUPICK | IDCMP_MENUHELP,
  46940. +                  WA_PubScreen, new_screen,
  46941. +#if 0 /* CHFIXME: debugging aid */
  46942. +                  WA_BackFill, &background_hook,
  46943. +#endif
  46944. +                  WA_MenuHelp, 1, WA_Activate, 1,
  46945. +                  WA_SimpleRefresh, 1,
  46946. +                  WA_MaxWidth, -1, WA_MaxHeight, -1,
  46947. +                  WA_Backdrop, backdrop,    /* changing items */
  46948. +                  WA_Borderless, backdrop,
  46949. +                  WA_CloseGadget, no_backdrop,
  46950. +                  WA_SizeGadget, no_backdrop,
  46951. +                  WA_DragBar, no_backdrop,
  46952. +                  WA_DepthGadget, no_backdrop,
  46953. +                  WA_Title, no_backdrop ?
  46954. +                   "GNU Emacs 19.28, Amiga port "VERS : 0,
  46955. +                              TAG_END, 0);
  46956. +
  46957. +  UnlockPubScreen(0L, new_screen);
  46958. +
  46959. +  if (new_win)
  46960. +    {
  46961. +      /* if emacs_backdrop then the screen title will show BEHIND the window
  46962. +     -ch3/16/93. */
  46963. +      ShowTitle(new_screen, !emacs_backdrop);
  46964. +      SetFont(new_win->RPort, font);
  46965. +
  46966. +      if (set_min_size(new_win, font, &minw, &minh) &&
  46967. +      (new_console = (struct IOStdReq *)
  46968. +       _device_open("console.device", CONU_CHARMAP, CONFLAG_NODRAW_ON_NEWSIZE,
  46969. +            (APTR)new_win, sizeof(*new_win),
  46970. +            sizeof(struct IOStdReq))))
  46971. +    {
  46972. +      inputsig |= 1L << new_win->UserPort->mp_SigBit;
  46973. +      ConsoleDevice = (struct Library *)new_console->io_Device;
  46974. +#if 0 /* CHFIXME */
  46975. +      emacs_app_win = AddAppWindowA(0, 0, new_win, wbport, 0);
  46976. +#endif
  46977. +      /* Copy the info into permanent storage */
  46978. +      EMACS_WIN(f) = new_win;
  46979. +      emacs_console = new_console;
  46980. +
  46981. +      /* fetch the name of the current screen -ch3/19/93 */
  46982. +      emacs_screen_name = get_screen_name(EMACS_WIN(f)->WScreen,
  46983. +                          emacs_screen_name_storage);
  46984. +
  46985. +      emacs_backdrop = backdrop;
  46986. +
  46987. +      reset_window(f);
  46988. +
  46989. +      return ok;
  46990. +    }
  46991. +      CloseWindow(new_win);
  46992. +    }
  46993. +  return no_window;
  46994. +}
  46995. +
  46996. +void force_window(FRAME_PTR f)
  46997. +{
  46998. +  if (!EMACS_WIN(f) && !emacs_iconified)
  46999. +    {
  47000. +      if (open_emacs_window(f, emacs_x, emacs_y, emacs_w, emacs_h, emacs_backdrop,
  47001. +                emacs_screen_name) != ok)
  47002. +    {
  47003. +      /* Try to return to defaults (Workbench, etc) */
  47004. +      if (open_emacs_window(f, 0, 0, 640, 200, 0, 0) != ok)
  47005. +          _fail("I've lost my window ! Exiting.");
  47006. +    }
  47007. +      resume_menus(f);
  47008. +    }
  47009. +}
  47010. +
  47011. +
  47012. +#define X_left  0xff51
  47013. +#define X_up    0xff52
  47014. +#define X_right 0xff53
  47015. +#define X_down  0xff54
  47016. +#define X_help  0xff6a    /* X11 code of the help key */
  47017. +#define X_f1    0xffbe     /* X11 code of f1 (f2, ..., f35 follow) */
  47018. +
  47019. +/* returns:
  47020. + *    -2 if msg is not class RAWKEY
  47021. + *    same as RawKeyConvert otherwise:
  47022. + *    buffer length if <= kbsize
  47023. + *    -1 else
  47024. + *
  47025. + * fkeyflags[x] will be set to a function key if any
  47026. + * the decoding is done ala x (see keyboard.c)
  47027. + */
  47028. +static DeadKeyConvert(struct IntuiMessage *msg, UBYTE *kbuffer, USHORT *fkeyflags,
  47029. +              int kbsize,
  47030. +              struct KeyMap *kmap)
  47031. +{
  47032. +  static struct InputEvent ievent = {0, IECLASS_RAWKEY, 0, 0, 0};
  47033. +  int extra = 0, res;
  47034. +
  47035. +  if (msg->Class != RAWKEY)
  47036. +  {
  47037. +#if 0
  47038. +      fprintf(stderr,"msg->Class = %d\n", (int) msg->Class);
  47039. +#endif
  47040. +      return (-2);
  47041. +  }
  47042. +
  47043. +  /* Do some keymapping ourselves to make emacs users happy */
  47044. +
  47045. +  switch(msg->Code)
  47046. +  {
  47047. + case 0x40:
  47048. +      /* Ctrl-space becomes Ctrl-@ */
  47049. +      if (msg->Qualifier & CONTROL_MASK)
  47050. +      {
  47051. +      *kbuffer = 0;
  47052. +      *fkeyflags = 0;
  47053. +      return 1;
  47054. +      }
  47055. +      break;
  47056. + case 0x41:
  47057. +      /* Backspace becomes DEL */
  47058. +      if (amiga_remap_bsdel)
  47059. +      {
  47060. +      *kbuffer = 0177;
  47061. +      *fkeyflags = 0;
  47062. +      return 1;
  47063. +      }
  47064. +      break;
  47065. + case 0x46:
  47066. +      /* And DEL becomes CTRL-D */
  47067. +      if (amiga_remap_bsdel)
  47068. +      {
  47069. +      *kbuffer = 04;
  47070. +      *fkeyflags = 0;
  47071. +      return 1;
  47072. +      }
  47073. +      break;
  47074. + case 0x4C: /* Up arrow */
  47075. +      *kbuffer = 0;
  47076. +      *fkeyflags = X_up;
  47077. +      return 1;
  47078. + case 0x4D: /* Down arrow */
  47079. +      *kbuffer = 0;
  47080. +      *fkeyflags = X_down;
  47081. +      return 1;
  47082. + case 0x4E: /* Forward arrow */
  47083. +      *kbuffer = 0;
  47084. +      *fkeyflags = X_right;
  47085. +      return 1;
  47086. + case 0x4F: /* Backward arrow */
  47087. +      *kbuffer = 0;
  47088. +      *fkeyflags = X_left;
  47089. +      return 1;
  47090. + case 0x50:
  47091. + case 0x51:
  47092. + case 0x52:
  47093. + case 0x53:
  47094. + case 0x54:
  47095. + case 0x55:
  47096. + case 0x56:
  47097. + case 0x57:
  47098. + case 0x58:
  47099. + case 0x59:
  47100. +      /* Map function keys to X equivalent */
  47101. +      *kbuffer = 0;
  47102. +      *fkeyflags = msg->Code - 0x50 + X_f1;
  47103. +      return 1;
  47104. + case 0x5F:
  47105. +      /* Map help key */
  47106. +      *kbuffer = 0;
  47107. +      *fkeyflags = X_help;
  47108. +      return 1;
  47109. +default:
  47110. +      break;
  47111. +  }
  47112. +  /* CHFIXME: may be replaced with kp-XXX symbols */
  47113. +  /* Stick numeric pad prefix in front of numeric keypad chars */
  47114. +  if (msg->Qualifier & IEQUALIFIER_NUMERICPAD && amiga_remap_numeric_keypad)
  47115. +    {
  47116. +      *kbuffer++ = 'x' & 037;
  47117. +      *fkeyflags++=0;
  47118. +      *kbuffer++ = '^' & 037;
  47119. +      *fkeyflags++=0;
  47120. +      *kbuffer++ = 'K';
  47121. +      *fkeyflags++=0;
  47122. +      kbsize -= 3;
  47123. +      extra = 3;
  47124. +    }
  47125. +
  47126. +  /* pack input event */
  47127. +  ievent.ie_Code = msg->Code;
  47128. +
  47129. +  /* Ignore meta in decoding keys when not snapping */
  47130. +  /* CHFIXME: if() needed below, too? */
  47131. +  if(msg->Qualifier & NO_SNAP_MASK)
  47132. +    ievent.ie_Qualifier = msg->Qualifier & ~META_MASK;
  47133. +  else
  47134. +    ievent.ie_Qualifier = msg->Qualifier;
  47135. +
  47136. +  /* get previous codes from location pointed to by IAddress
  47137. +   *  this pointer is valid until IntuiMessage is replied.
  47138. +   */
  47139. +  ievent.ie_position.ie_addr = *((APTR *)msg->IAddress);
  47140. +  ievent.ie_position.ie_dead.ie_prev1DownQual &= ~META_MASK;
  47141. +  ievent.ie_position.ie_dead.ie_prev2DownQual &= ~META_MASK;
  47142. +
  47143. +  res = RawKeyConvert(&ievent, kbuffer, kbsize, kmap);
  47144. +  if(res > 0)
  47145. +  {
  47146. +      int i;
  47147. +      
  47148. +      for(i = 0; i < res; i++)
  47149. +      *fkeyflags++ = 0;
  47150. +  }
  47151. +  return res ? res + extra : 0;
  47152. +}
  47153. +
  47154. +void add_wbevent(struct WBArg *wbarg)
  47155. +{
  47156. +  char filename[256];
  47157. +
  47158. +  if (wbarg->wa_Lock && NameFromLock(wbarg->wa_Lock, filename, 256))
  47159. +    {
  47160. +      struct wbevent *event;
  47161. +
  47162. +      if (wbarg->wa_Name) AddPart(filename, wbarg->wa_Name, 256);
  47163. +      if (event = (struct wbevent *)malloc(offsetof(struct wbevent, file) +
  47164. +                       strlen(filename) + 1))
  47165. +    {
  47166. +      event->next = wbevents;
  47167. +      strcpy(event->file, filename);
  47168. +      wbevents = event;
  47169. +    }
  47170. +    }
  47171. +}
  47172. +
  47173. +void get_mouse_char_pos(FRAME_PTR f, int *last_x, int *last_y)
  47174. +{
  47175. +    int x, y;
  47176. +    
  47177. +    if(EMACS_WIN(f))
  47178. +    {
  47179. +    x = EMACS_WIN(f) -> MouseX;
  47180. +    y = EMACS_WIN(f) -> MouseY;
  47181. +    if((x < 0) ||
  47182. +       (x > EMACS_WIN(f)->Width) ||
  47183. +       (y < 0) ||
  47184. +       (y > EMACS_WIN(f)->Height))
  47185. +    {
  47186. +        x = -1;
  47187. +        y = -1;
  47188. +    }
  47189. +    else
  47190. +    {
  47191. +        x = amiga_pos_x(f,x);
  47192. +        y = amiga_pos_y(f,y);
  47193. +    }
  47194. +    *last_x = x;
  47195. +    *last_y = y;
  47196. +    }
  47197. +    else
  47198. +    {
  47199. +    *last_x = -1;
  47200. +    *last_y = -1;
  47201. +    }
  47202. +}
  47203. +    
  47204. +void check_window(FRAME_PTR f, int force)
  47205. +{
  47206. +#ifdef TRY_NEW_MOUSE
  47207. +  struct input_event event;
  47208. +  struct timeval tv;
  47209. +#endif
  47210. +  ULONG class;
  47211. +  USHORT code, qualifier;
  47212. +  UWORD mx, my;
  47213. +  unsigned char buf[32];
  47214. +  /* fkey will be set to a value != 0 if a function key event should be created */ 
  47215. +  /* fkey needs to hold X key symbols 0xffXX */
  47216. +  USHORT fkey[32]; 
  47217. +  int buflen, deiconify, i;
  47218. +  struct IntuiMessage *msg;
  47219. +  int mouse_event = FALSE, wb_event = FALSE;
  47220. +  struct AppMessage *amsg;
  47221. +
  47222. +  force_window(f);
  47223. +
  47224. +  if (EMACS_WIN(f))
  47225. +    while (msg = (struct IntuiMessage *)GetMsg(EMACS_WIN(f)->UserPort))
  47226. +      {
  47227. +    class = msg->Class;
  47228. +    code = msg->Code;
  47229. +    qualifier = msg->Qualifier;
  47230. +    mx = msg->MouseX; my = msg->MouseY;
  47231. +    buflen = DeadKeyConvert(msg, buf, fkey, 32, 0);
  47232. +    ReplyMsg(msg);
  47233. +#if 0
  47234. +    fprintf(stderr,"class: 0x%08lx, code: 0x%08lx, qual: 0x%04x\n",
  47235. +        (int) class,
  47236. +        (int) code,
  47237. +        (int) qualifier);
  47238. +#endif
  47239. +    switch (class)
  47240. +      {
  47241. +      case IDCMP_CLOSEWINDOW: {
  47242. +        enque(030, FALSE, FALSE); enque(03, FALSE, FALSE); /* ^X^C */ /* CHFIXME: map to delete_window */
  47243. +        break;
  47244. +      }
  47245. +      case IDCMP_RAWKEY: {
  47246. +        if (buflen > 0)
  47247. +          {
  47248. +        unsigned char *sbuf = buf;
  47249. +        USHORT *sfkey = fkey;
  47250. +        int meta = (qualifier & META_MASK) && (qualifier & NO_SNAP_MASK);
  47251. +        int qual = (qualifier & SHIFT_MASK) ? shift_modifier : 0 +
  47252. +                   (qualifier & CONTROL_MASK) ? ctrl_modifier : 0 +
  47253. +               (meta) ? meta_modifier : 0;
  47254. +        
  47255. +        do
  47256. +            if(*sfkey)
  47257. +            {
  47258. +            /* provide full emacs qualifier mask for function keys */
  47259. +            enque(*sfkey++, qual, 1);
  47260. +            sbuf++;
  47261. +            }
  47262. +            else
  47263. +            {
  47264. +            /* Don't set META on CSI */
  47265. +            enque(*sbuf++, meta, 0);
  47266. +            sfkey++;
  47267. +            }
  47268. +        while (--buflen);
  47269. +          }
  47270. +        break;
  47271. +      }
  47272. +      case IDCMP_NEWSIZE:
  47273. +        amiga_change_size(f);
  47274. +        set_mouse_event_pending(); /* signal "input available" to get display redrawn */
  47275. +        break;
  47276. +      case IDCMP_MENUHELP:
  47277. +        break; /* CHFIXME */
  47278. +      case IDCMP_MENUPICK: 
  47279. +        if (code == MENUNULL) break;
  47280. +        {
  47281. +          int i;
  47282. +          Lisp_Object prefixes[3];
  47283. +          int menu_num = MENUNUM(code);
  47284. +          int item_num = ITEMNUM(code);
  47285. +          int subitem_num = SUBNUM(code);
  47286. +
  47287. +          if((menu_num != NOMENU)
  47288. +         && (item_num != NOITEM)
  47289. +         && map_menu_selection(menu_num, item_num, subitem_num, prefixes))
  47290. +        {
  47291. +          
  47292. +          event.kind = menu_bar_event;
  47293. +          event.code = 0;
  47294. +          event.modifiers = 0;
  47295. +          event.x = 0;
  47296. +          event.y = 0;
  47297. +          event.frame_or_window = Qmenu_bar;
  47298. +          gettimeofday (&tv, NULL);
  47299. +          event.timestamp = tv.tv_usec;
  47300. +          kbd_buffer_store_event (&event);
  47301. +          for(i = 0; i < 3; i++)
  47302. +            {
  47303. +              if(NILP(prefixes[i]))
  47304. +            break;
  47305. +              /* CHFIXME: rethink validness of these values! */
  47306. +              event.frame_or_window = prefixes[i]; 
  47307. +              gettimeofday (&tv, NULL);
  47308. +              event.timestamp = tv.tv_usec;
  47309. +              kbd_buffer_store_event (&event);
  47310. +            }
  47311. +          set_mouse_event_pending(); /* get emacs to read the input queue */
  47312. +          }
  47313. +          
  47314. +        }
  47315. +        break; /* CHFIXME: add menu code */
  47316. +      case IDCMP_MOUSEBUTTONS: {
  47317. +#ifdef TRY_NEW_MOUSE
  47318. +          int but, down;
  47319. +          switch(code)
  47320. +          {
  47321. +      case SELECTDOWN: but = 0; down = 1; break;
  47322. +      case SELECTUP: but = 0; down = 0; break;
  47323. +      case MIDDLEDOWN: but = 1; down = 1; break;
  47324. +      case MIDDLEUP: but = 1; down = 0; break;
  47325. +      case MENUDOWN: but = 2; down = 1; break;
  47326. +      case MENUUP: but = 2; down = 0; break;
  47327. +      default: but = -1; break;
  47328. +          }
  47329. +#if 0
  47330. +          fprintf(stderr,"Mouse: button %d, down = %d\n", but, down);
  47331. +#endif
  47332. +          if(but >= 0)
  47333. +          {
  47334. +          event.kind = mouse_click;
  47335. +          event.code = but;
  47336. +          event.modifiers = ((qualifier & META_MASK) ? meta_modifier : 0)
  47337. +              + ((qualifier & SHIFT_MASK) ? shift_modifier : 0)
  47338. +              + ((qualifier & CONTROL_MASK) ? ctrl_modifier : 0)
  47339. +              + (down ? down_modifier : up_modifier);
  47340. +#if 1/* keyboard.c uses pixel_to_glyph, so we need original pos */
  47341. +          event.x = mx;
  47342. +          event.y = my;
  47343. +#else
  47344. +          event.x = amiga_pos_x(mx);
  47345. +          event.y = amiga_pos_y(my);
  47346. +#endif
  47347. +          event.frame_or_window = selected_frame;
  47348. +          gettimeofday (&tv, NULL);
  47349. +          event.timestamp = tv.tv_usec;
  47350. +          kbd_buffer_store_event (&event);
  47351. +          set_mouse_event_pending();
  47352. +          }
  47353. +#else
  47354. +        mouse_event = TRUE;
  47355. +        if (event_num == EVENTSIZE) break;
  47356. +
  47357. +        events[event_in].class = class;
  47358. +        events[event_in].code = code;
  47359. +        events[event_in].qual = qualifier;
  47360. +        events[event_in].x = mx;
  47361. +        events[event_in].y = my;
  47362. +        event_num++;
  47363. +        event_in = (event_in + 1) % EVENTSIZE;
  47364. +#endif
  47365. +        break;
  47366. +      }
  47367. +      }
  47368. +      }
  47369. +  /* Handle App requests */
  47370. +  while (amsg = (struct AppMessage *)GetMsg(wbport))
  47371. +      switch (amsg->am_Type)
  47372. +    {
  47373. +    case AMTYPE_APPICON: case AMTYPE_APPWINDOW:
  47374. +      /* Add an event for all these files */
  47375. +      for (i = 0; i < amsg->am_NumArgs; i++) add_wbevent(amsg->am_ArgList + i);
  47376. +      wb_event = TRUE;
  47377. +      /* Reply to the message, and deiconify if was icon */
  47378. +      deiconify = amsg->am_Type == AMTYPE_APPICON;
  47379. +      ReplyMsg(amsg);
  47380. +      if (deiconify && emacs_icon)
  47381. +        /* Reopen window */
  47382. +        if (open_emacs_window(f, emacs_x, emacs_y, emacs_w, emacs_h, emacs_backdrop,
  47383. +                  emacs_screen_name) == ok)
  47384. +          {
  47385. +        resume_menus(f);
  47386. +        RemoveAppIcon(emacs_icon);
  47387. +        emacs_icon = 0;
  47388. +        emacs_iconified = 0;
  47389. +          }
  47390. +      break;
  47391. +    default: ReplyMsg(amsg); break;
  47392. +    }
  47393. +
  47394. +  if (amiga_mouse_initialized && (force && event_num > 0 || mouse_event))
  47395. +    {
  47396. +      enque(AMIGASEQ, FALSE, FALSE); enque('M', FALSE, FALSE);
  47397. +    }
  47398. +  if (amiga_wb_initialized && (force && wbevents || wb_event))
  47399. +    {
  47400. +      enque(AMIGASEQ, FALSE, FALSE); enque('W', FALSE, FALSE);
  47401. +    }
  47402. +}
  47403. +
  47404. +void setup_intchar(char intchar)
  47405. +{
  47406. +  char cqbuf[2];
  47407. +
  47408. +  if (MapANSI(&intchar, 1, cqbuf, 1, 0) == 1)
  47409. +    {
  47410. +      intkey_code = cqbuf[0];
  47411. +      intkey_qualifier = cqbuf[1];
  47412. +    }
  47413. +  else
  47414. +    {
  47415. +      /* Default is CTRL-G in usa0 keymap */
  47416. +      intkey_code = 0x24;
  47417. +      intkey_qualifier = IEQUALIFIER_CONTROL;
  47418. +    }
  47419. +}
  47420. +
  47421. +/* Hack to detect interrupt char as soon as it is pressed */
  47422. +/* __interrupt disables stack checking.  -ch3/19/93.*/
  47423. +static long __saveds __interrupt __asm
  47424. +int_handler(register __a0 struct InputEvent *ev)
  47425. +{
  47426. +  struct InputEvent *ep, *laste;
  47427. +  static struct InputEvent retkey;
  47428. +  ULONG lock = LockIBase(0);
  47429. +#ifndef MULTI_FRAME
  47430. +  FRAME_PTR f;
  47431. +#else
  47432. +  you lose, make loop of frames? 
  47433. +#endif
  47434. +  
  47435. +  if (EMACS_WIN(f) && IntuitionBase->ActiveWindow == EMACS_WIN(f))
  47436. +    {
  47437. +      laste = 0;
  47438. +
  47439. +      /* run down the list of events to see if they pressed the magic key */
  47440. +      for (ep = ev; ep; laste = ep, ep = ep->ie_NextEvent)
  47441. +    if (ep->ie_Class == IECLASS_RAWKEY &&
  47442. +        (ep->ie_Qualifier & 0xff) == intkey_qualifier &&
  47443. +        ep->ie_Code == intkey_code)
  47444. +      {
  47445. +        /* Remove this key from input sequence */
  47446. +        if (laste) laste->ie_NextEvent = ep->ie_NextEvent;
  47447. +        else ev = ep->ie_NextEvent;
  47448. +
  47449. +        Vquit_flag = Qt;
  47450. +        Signal(_us, SIGBREAKF_CTRL_C);
  47451. +      }
  47452. +    }
  47453. +  UnlockIBase(lock);
  47454. +
  47455. +  /* pass on the pointer to the event */
  47456. +  return (long)ev;
  47457. +}
  47458. +
  47459. +#if 0
  47460. +DEFUN ("amiga-mouse-events", Famiga_mouse_events, Samiga_mouse_events, 0, 0, 0,
  47461. +       "Return number of pending mouse events from Intuition.")
  47462. +     ()
  47463. +{
  47464. +  register Lisp_Object tem;
  47465. +
  47466. +  check_intuition ();
  47467. +
  47468. +  XSET (tem, Lisp_Int, event_num);
  47469. +
  47470. +  return tem;
  47471. +}
  47472. +
  47473. +DEFUN ("amiga-proc-mouse-event", Famiga_proc_mouse_event, Samiga_proc_mouse_event,
  47474. +       0, 0, 0,
  47475. +       "Pulls a mouse event out of the mouse event buffer and dispatches\n\
  47476. +the appropriate function to act upon this event.")
  47477. +()
  47478. +{
  47479. +  register Lisp_Object mouse_cmd;
  47480. +  register char com_letter;
  47481. +  register char key_mask;
  47482. +  register Lisp_Object tempx;
  47483. +  register Lisp_Object tempy;
  47484. +  extern Lisp_Object get_keyelt ();
  47485. +  extern int meta_prefix_char;
  47486. +  struct event *ev;
  47487. +  int posx, posy;
  47488. +
  47489. +  check_intuition ();
  47490. +
  47491. +  if (event_num) {
  47492. +    ev = &events[event_out];
  47493. +    event_out = (event_out + 1) % EVENTSIZE;
  47494. +    event_num--;
  47495. +    if (ev->class == MOUSEBUTTONS)
  47496. +      {
  47497. +    switch (ev->code)
  47498. +      {
  47499. +      case SELECTDOWN: com_letter = 2; break;
  47500. +      case SELECTUP: com_letter = 6; break;
  47501. +      case MIDDLEDOWN: com_letter = 1; break;
  47502. +      case MIDDLEUP: com_letter = 5; break;
  47503. +      case MENUDOWN: com_letter = 0; break;
  47504. +      case MENUUP: com_letter = 4; break;
  47505. +      default: com_letter = 3; break;
  47506. +      }
  47507. +    posx = amiga_pos_x(f,ev->x);
  47508. +    posy = amiga_pos_y(f,ev->y);
  47509. +    XSET (tempx, Lisp_Int, min (FRAME_WIDTH (selected_frame)-1, max (0, posx)));
  47510. +    XSET (tempy, Lisp_Int, min (FRAME_HEIGHT (selected_frame)-1, max (0, posy)));
  47511. +      }
  47512. +    else
  47513. +      {
  47514. +    /* Must be Menu Pick or Help */
  47515. +    com_letter = ev->class == IDCMP_MENUPICK ? 3 : 7;
  47516. +
  47517. +    /* The parameters passed describe the selected item */
  47518. +    XSET (tempx, Lisp_Int, MENUNUM(ev->code));
  47519. +    XSET (tempy, Lisp_Int, ITEMNUM(ev->code));
  47520. +      }
  47521. +    if (ev->qual & META_MASK) com_letter |= 0x20;
  47522. +    if (ev->qual & SHIFT_MASK) com_letter |= 0x10;
  47523. +    if (ev->qual & CONTROL_MASK) com_letter |= 0x40;
  47524. +
  47525. +    Vamiga_mouse_pos = Fcons (tempx, Fcons (tempy, Qnil));
  47526. +    Vamiga_mouse_item = make_number (com_letter);
  47527. +#if 0 /* CHFIXME */
  47528. +    mouse_cmd = get_keyelt (access_keymap (MouseMap, com_letter));
  47529. +    if (NILP (mouse_cmd)) {
  47530. +      bitch_at_user ();
  47531. +      Vamiga_mouse_pos = Qnil;
  47532. +    }
  47533. +    else return call1 (mouse_cmd, Vamiga_mouse_pos);
  47534. +#else
  47535. +    return Qnil;
  47536. +#endif
  47537. +  }
  47538. +  return Qnil;
  47539. +}
  47540. +
  47541. +DEFUN ("amiga-get-mouse-event", Famiga_get_mouse_event, Samiga_get_mouse_event,
  47542. +       1, 1, 0,
  47543. +       "Get next mouse event out of mouse event buffer (com-letter (x y)).\n\
  47544. +ARG non-nil means return nil immediately if no pending event;\n\
  47545. +otherwise, wait for an event.")
  47546. +(arg)
  47547. +Lisp_Object arg;
  47548. +{
  47549. +  register char com_letter;
  47550. +  register char key_mask;
  47551. +
  47552. +  register Lisp_Object tempx;
  47553. +  register Lisp_Object tempy;
  47554. +  struct event *ev;
  47555. +  int posx, posy;
  47556. +
  47557. +  check_intuition ();
  47558. +
  47559. +  if (NILP (arg))
  47560. +    {
  47561. +      amiga_consume_input();
  47562. +      while (!event_num)
  47563. +    {
  47564. +      int rfds = 1;
  47565. +
  47566. +      select(1, &rfds, 0, 0, 0);
  47567. +      amiga_consume_input();
  47568. +    }
  47569. +    }
  47570. +  /*** ??? Surely you don't mean to busy wait??? */
  47571. +
  47572. +  if (event_num) {
  47573. +    ev = &events[event_out];
  47574. +    event_out = (event_out + 1) % EVENTSIZE;
  47575. +    event_num--;
  47576. +    switch (ev->code)
  47577. +      {
  47578. +      case SELECTDOWN: com_letter = 2; break;
  47579. +      case SELECTUP: com_letter = 6; break;
  47580. +      case MIDDLEDOWN: com_letter = 1; break;
  47581. +      case MIDDLEUP: com_letter = 5; break;
  47582. +      case MENUDOWN: com_letter = 0; break;
  47583. +      case MENUUP: com_letter = 4; break;
  47584. +      default: com_letter = 3; break;
  47585. +      }
  47586. +    if (ev->qual & META_MASK) com_letter |= 0x20;
  47587. +    if (ev->qual & SHIFT_MASK) com_letter |= 0x10;
  47588. +    if (ev->qual & CONTROL_MASK) com_letter |= 0x40;
  47589. +
  47590. +    posx = amiga_pos_x(f,ev->x);
  47591. +    posy = amiga_pos_y(f,ev->y);
  47592. +    XSET (tempx, Lisp_Int, min (FRAME_WIDTH (selected_frame)-1, max (0, posx)));
  47593. +    XSET (tempy, Lisp_Int, min (FRAME_HEIGHT (selected_frame)-1, max (0, posy)));
  47594. +
  47595. +    Vamiga_mouse_pos = Fcons (tempx, Fcons (tempy, Qnil));
  47596. +    Vamiga_mouse_item = make_number (com_letter);
  47597. +    return Fcons (com_letter, Fcons (Vamiga_mouse_pos, Qnil));
  47598. +  }
  47599. +  return Qnil;
  47600. +}
  47601. +#endif
  47602. +
  47603. +DEFUN ("amiga-get-wb-event", Famiga_get_wb_event, Samiga_get_wb_event,
  47604. +       1, 1, 0,
  47605. +       "Get next Workbench event out of workbench event buffer (a file name).\n\
  47606. +ARG non-nil means return nil immediately if no pending event;\n\
  47607. +otherwise, wait for an event.")
  47608. +(arg)
  47609. +Lisp_Object arg;
  47610. +{
  47611. +  Lisp_Object file;
  47612. +  struct wbevent *ev;
  47613. +
  47614. +  check_intuition ();
  47615. +
  47616. +  if (NILP (arg))
  47617. +    {
  47618. +      amiga_consume_input();
  47619. +      while (!wbevents)
  47620. +    {
  47621. +      int rfds = 1;
  47622. +
  47623. +      select(1, &rfds, 0, 0, 0);
  47624. +      amiga_consume_input();
  47625. +    }
  47626. +    }
  47627. +  /*** ??? Surely you don't mean to busy wait??? */
  47628. +
  47629. +  if (wbevents) {
  47630. +    file = build_string(wbevents->file);
  47631. +    ev = wbevents;
  47632. +    wbevents = wbevents->next;
  47633. +    free(ev);
  47634. +    return file;
  47635. +  }
  47636. +  return Qnil;
  47637. +}
  47638. +
  47639. +DEFUN("amiga-set-foreground-color", Famiga_set_foreground_color,
  47640. +      Samiga_set_foreground_color, 1, 1, "nPen number: ",
  47641. +      "Use PEN as foreground color")
  47642. +     (pen)
  47643. +{
  47644. +  int fg;
  47645. +
  47646. +  check_intuition();
  47647. +  CHECK_NUMBER(pen, 0);
  47648. +
  47649. +  fg = XUINT (pen);
  47650. +  if (pen > 7) error("Pen colors must be between 0 & 7");
  47651. +  foreground = fg;
  47652. +  reset_window(selected_frame);
  47653. +  return Qnil;
  47654. +}
  47655. +
  47656. +DEFUN("amiga-set-background-color", Famiga_set_background_color,
  47657. +      Samiga_set_background_color, 1, 1, "nPen number: ",
  47658. +      "Use PEN as background color")
  47659. +     (pen)
  47660. +{
  47661. +  int bg;
  47662. +
  47663. +  check_intuition();
  47664. +  CHECK_NUMBER(pen, 0);
  47665. +
  47666. +  bg = XUINT (pen);
  47667. +  if (pen > 7) error("Pen colors must be between 0 & 7");
  47668. +  background = bg;
  47669. +  reset_window(selected_frame);
  47670. +  return Qnil;
  47671. +}
  47672. +
  47673. +DEFUN("amiga-set-inverse-fill-pen", Famiga_set_inverse_fill_pen,
  47674. +      Samiga_set_inverse_fill_pen, 1, 1, "nPen number: ",
  47675. +      "Use PEN's color for inverse fills (0-7 or 8 for reverse)")
  47676. +     (pen)
  47677. +{
  47678. +  int ifp = 8;
  47679. +
  47680. +  check_intuition();
  47681. +  CHECK_NUMBER(pen, 0);
  47682. +
  47683. +  ifp = XUINT (pen);
  47684. +  if (pen > 8)
  47685. +    error("choices are from 0 to 8");
  47686. +  inverse_fill_pen = ifp;
  47687. +  reset_window(selected_frame);
  47688. +  return Qnil;
  47689. +}
  47690. +
  47691. +DEFUN("amiga-set-inverse-text-pen", Famiga_set_inverse_text_pen,
  47692. +      Samiga_set_inverse_text_pen, 1, 1, "nPen number: ",
  47693. +      "Use PEN's color for inverse fills (0-7 or 8 for reverse)")
  47694. +     (pen)
  47695. +{
  47696. +  int itp = 8;
  47697. +
  47698. +  check_intuition();
  47699. +  CHECK_NUMBER(pen, 0);
  47700. +
  47701. +  itp = XUINT (pen);
  47702. +  if (pen > 8)
  47703. +    error("choices are from 0 to 8");
  47704. +  inverse_text_pen = itp;
  47705. +  reset_window(selected_frame);
  47706. +  return Qnil;
  47707. +}
  47708. +
  47709. +DEFUN("amiga-set-font", Famiga_set_font, Samiga_set_font, 2, 2,
  47710. +      "sFont: \n\
  47711. +nSize: ",
  47712. +      "Set font used for window to FONT with given HEIGHT.\n\
  47713. +The font used must be non-proportional.")
  47714. +(wfont, height)
  47715. +{
  47716. +  struct TextAttr attr;
  47717. +  struct TextFont *newfont;
  47718. +  char *fname;
  47719. +  struct Lisp_String *fstr;
  47720. +  WORD minw, minh, oldmw, oldmh;
  47721. +  FRAME_PTR f = selected_frame; /* CHFIXME? */
  47722. +  
  47723. +  CHECK_STRING (wfont, 0);
  47724. +  CHECK_NUMBER (height, 0);
  47725. +
  47726. +  check_intuition();
  47727. +
  47728. +  fstr = XSTRING (wfont);
  47729. +  fname = (char *)alloca (fstr->size + 6);
  47730. +  strcpy (fname, fstr->data);
  47731. +  strcat (fname, ".font");
  47732. +  attr.ta_Name = fname;
  47733. +  attr.ta_YSize = XFASTINT (height);
  47734. +  attr.ta_Style = 0;
  47735. +  attr.ta_Flags = 0;
  47736. +  newfont = OpenDiskFont (&attr);
  47737. +
  47738. +  if (!newfont)
  47739. +    error ("Font %s %d not found", fstr->data, XFASTINT (height));
  47740. +  if (newfont->tf_Flags & FPF_PROPORTIONAL)
  47741. +    {
  47742. +      CloseFont(newfont);
  47743. +      error ("Font %s %d is proportional", fstr->data, XFASTINT (height));
  47744. +    }
  47745. +
  47746. +  if (EMACS_WIN(f))
  47747. +    {
  47748. +      if (!set_min_size(EMACS_WIN(f), newfont, &minw, &minh))
  47749. +    {
  47750. +      CloseFont(newfont);
  47751. +      if (!set_min_size(EMACS_WIN(f), font, &oldmw, &oldmh))
  47752. +        _fail("Failed to restore old font, exiting.");
  47753. +      error("Window is too small for this font, need at least %d(w) by %d(h)",
  47754. +        minw, minh);
  47755. +    }
  47756. +      SetFont(EMACS_WIN(f)->RPort, newfont);
  47757. +    }
  47758. +  if (font_opened) CloseFont(font);
  47759. +  font_opened = TRUE;
  47760. +  font = newfont;
  47761. +  reset_window(f);
  47762. +  return Qnil;
  47763. +}
  47764. +
  47765. +DEFUN("amiga-set-geometry", Famiga_set_geometry, Samiga_set_geometry, 4, MANY, 0,
  47766. +      "Set Emacs window geometry and screen.\n\
  47767. +First 4 parameters are the (X,Y) position of the top-left corner of the window\n\
  47768. +and its WIDTH and HEIGHT. These must be big enough for an 11x4 characters window.\n\
  47769. +If nil is given for any of these, that means to keep the same value as before.\n\
  47770. +The optional argument SCREEN specifies which screen to use, nil stands for the\n\
  47771. +same screen as the window is on, t stands for the default public screen (normally\n\
  47772. +the Workbench), a string specifies a given public screen.\n\
  47773. +If optional argument BACKDROP is t, a backdrop window is used.")
  47774. +  (nargs, args)
  47775. +    int nargs;
  47776. +    Lisp_Object *args;
  47777. +{
  47778. +  Lisp_Object x, y, w, h, scr = Qnil, backdrop = Qnil;
  47779. +  int opened;
  47780. +  WORD tempx, tempy, tempw, temph;
  47781. +  char *screen_name;
  47782. +  int use_backdrop;
  47783. +  FRAME_PTR f = selected_frame; /* CHFIXME */
  47784. +
  47785. +  if (nargs > 6) error("Too many arguments to amiga-set-geometry");
  47786. +  x = args[0]; y = args[1]; w = args[2]; h = args[3];
  47787. +  if (nargs > 4)
  47788. +    {
  47789. +      scr = args[4];
  47790. +      if (nargs > 5) backdrop = args[5];
  47791. +    }
  47792. +
  47793. +  check_intuition();
  47794. +
  47795. +  if (!NILP (x))
  47796. +    {
  47797. +      CHECK_NUMBER(x, 0);
  47798. +      tempx = XUINT(x);
  47799. +    }
  47800. +  else tempx = EMACS_X();
  47801. +  if (!NILP (y))
  47802. +    {
  47803. +      CHECK_NUMBER(y, 0);
  47804. +      tempy = XUINT(y);
  47805. +    }
  47806. +  else tempy = EMACS_Y();
  47807. +  if (!NILP (w))
  47808. +    {
  47809. +      CHECK_NUMBER(w, 0);
  47810. +      tempw = XUINT(w);
  47811. +    }
  47812. +  else tempw = EMACS_W();
  47813. +  if (!NILP (h))
  47814. +    {
  47815. +      CHECK_NUMBER(h, 0);
  47816. +      temph = XUINT(h);
  47817. +    }
  47818. +  else temph = EMACS_H();
  47819. +
  47820. +  use_backdrop = !NILP(backdrop);
  47821. +
  47822. +  if (scr == Qt) screen_name = 0; /* set to zero for def. */
  47823. +  else if (!NILP (scr))
  47824. +    {
  47825. +      CHECK_STRING (scr, 0);
  47826. +      screen_name = XSTRING (scr)->data;
  47827. +    }
  47828. +  else screen_name = emacs_screen_name;
  47829. +
  47830. +  if (EMACS_WIN(f))
  47831. +    {
  47832. +      struct Window *old_win = EMACS_WIN(f);
  47833. +      struct IOStdReq *old_console = emacs_console;
  47834. +
  47835. +      suspend_menus(f);
  47836. +      opened = open_emacs_window(f, tempx, tempy, tempw, temph, use_backdrop,
  47837. +                 screen_name);
  47838. +      if (opened != ok)
  47839. +    {
  47840. +      resume_menus(f);
  47841. +
  47842. +      if (opened == no_window) error("Failed to open desired window");
  47843. +      else if (screen_name)
  47844. +        error("Unknown public screen %s", screen_name);
  47845. +      else error("The default screen wasn't found !?");
  47846. +    }
  47847. +
  47848. +      _device_close(old_console);
  47849. +      CloseWindow(old_win);
  47850. +      if (!resume_menus(f)) error("Failed to recover menus (No memory?)");
  47851. +    }
  47852. +  else /* No window, set defaults */
  47853. +    {
  47854. +      emacs_screen_name = screen_name;
  47855. +      if (screen_name)
  47856. +    {
  47857. +      emacs_screen_name_storage[MAXPUBSCREENNAME] = '\0';
  47858. +      strncpy(emacs_screen_name_storage, screen_name, MAXPUBSCREENNAME);
  47859. +    }
  47860. +      emacs_x = tempx;
  47861. +      emacs_y = tempy;
  47862. +      emacs_w = tempw;
  47863. +      emacs_h = temph;
  47864. +      emacs_backdrop = use_backdrop;
  47865. +    }
  47866. +  return Qnil;
  47867. +}
  47868. +
  47869. +
  47870. +/* The next 2 functions are very usefull for writing
  47871. + * arexx/lisp functions that interact with other programs
  47872. + * that will be sharing the same screen.  -ch3/19/93. */
  47873. +
  47874. +DEFUN("amiga-get-window-geometry",
  47875. +      Famiga_get_window_geometry, Samiga_get_window_geometry, 0, 0, 0,
  47876. +      "Get Emacs window geometry.\n\
  47877. +a list returned is of the form:  (iconified x y width height backdrop)\n\
  47878. +where x, y, width, height are integers, backdrop is t or nil and iconified\n\
  47879. +is t if the window is iconified and nil otherwise")
  47880. +()
  47881. +{
  47882. +  Lisp_Object x, y, w, h, b, i;
  47883. +
  47884. +  XSET(x, Lisp_Int, EMACS_X());
  47885. +  XSET(y, Lisp_Int, EMACS_Y());
  47886. +  XSET(w, Lisp_Int, EMACS_W());
  47887. +  XSET(h, Lisp_Int, EMACS_H());
  47888. +  b = emacs_backdrop ? Qt : Qnil;
  47889. +  i = emacs_iconified ? Qt : Qnil;
  47890. +
  47891. +  return Fcons(i, Fcons(x, Fcons(y, Fcons(w, Fcons(h, Fcons(b, Qnil))))));
  47892. +}
  47893. +
  47894. +DEFUN("amiga-get-screen-geometry",
  47895. +      Famiga_get_screen_geometry, Samiga_get_screen_geometry, 0, 0, 0,
  47896. +      "Get geometry of the screen emacs window resides on.\n\
  47897. +a list returned is of the form:  (name x y width height)\n\
  47898. +where name is a string, x, y, width, height are integers.\n\
  47899. +Only the public screen name is returned if the window is not currently open.\n\
  47900. +In this last case, the name may be nil if the window will be opened on the\n\
  47901. +default public screen.")
  47902. +()
  47903. +{
  47904. +  Lisp_Object name;
  47905. +
  47906. +  if (emacs_screen_name) name = Qnil;
  47907. +  else name = build_string(emacs_screen_name);
  47908. +
  47909. +  if(EMACS_WIN(f))
  47910. +    {
  47911. +      struct Screen *s = EMACS_WIN(f)->WScreen;
  47912. +      Lisp_Object x, y, w, h;
  47913. +
  47914. +      XSET(x, Lisp_Int, s->LeftEdge);
  47915. +      XSET(y, Lisp_Int, s->TopEdge);
  47916. +      XSET(w, Lisp_Int, s->Width);
  47917. +      XSET(h, Lisp_Int, s->Height);
  47918. +
  47919. +      return Fcons(name, Fcons(x, Fcons(y, Fcons(w, Fcons(h, Qnil)))));
  47920. +    }
  47921. +  return Fcons(name, Qnil);
  47922. +}
  47923. +
  47924. +DEFUN("amiga-iconify", Famiga_iconify, Samiga_iconify, 0, 0, "",
  47925. +      "Toggle the emacs iconification state.")
  47926. +()
  47927. +{
  47928. +    FRAME_PTR f = selected_frame; /* CHFIXME */
  47929. +    
  47930. +  check_intuition();
  47931. +
  47932. +  if (emacs_iconified)
  47933. +    {
  47934. +      /* Deiconify */
  47935. +
  47936. +      /* Reopen window */
  47937. +      if (open_emacs_window(f, emacs_x, emacs_y, emacs_w, emacs_h, emacs_backdrop,
  47938. +                emacs_screen_name) != ok)
  47939. +    error("Failed to deiconify (No memory?)");
  47940. +      resume_menus(f);
  47941. +
  47942. +      RemoveAppIcon(emacs_icon);
  47943. +      emacs_icon = 0;
  47944. +      emacs_iconified = 0;
  47945. +    }
  47946. +  else
  47947. +    if (emacs_icon = AddAppIconA(0, 0, "Emacs", wbport, 0, &emacs_icon_object, 0))
  47948. +      {
  47949. +    if (EMACS_WIN(f))
  47950. +      {
  47951. +        /* Close window */
  47952. +        emacs_x = EMACS_X(); emacs_y = EMACS_Y();
  47953. +        emacs_w = EMACS_W(); emacs_h = EMACS_H();
  47954. +        suspend_menus(f);
  47955. +        close_emacs_window(f);
  47956. +      }
  47957. +    emacs_iconified = 1;
  47958. +      }
  47959. +    else error("Iconify attempt failed\n");
  47960. +
  47961. +  return Qnil;
  47962. +}
  47963. +
  47964. +DEFUN("amiga-set-icon-pos", Famiga_set_icon_pos, Samiga_set_icon_pos, 2, 2,
  47965. +"nX position: \n\
  47966. +nY position: ",
  47967. +      "Set the X Y position of the icon for emacs when iconified.")
  47968. +  (Lisp_Object x, Lisp_Object y)
  47969. +{
  47970. +  long xpos, ypos;
  47971. +
  47972. +  if (NILP (x)) emacs_icon_object.do_CurrentX = NO_ICON_POSITION;
  47973. +  else
  47974. +    {
  47975. +      CHECK_NUMBER (x, 0);
  47976. +      emacs_icon_object.do_CurrentX = XINT(x);
  47977. +    }
  47978. +  if (NILP (y)) emacs_icon_object.do_CurrentY = NO_ICON_POSITION;
  47979. +  else
  47980. +    {
  47981. +      CHECK_NUMBER (y, 0);
  47982. +      emacs_icon_object.do_CurrentY = XINT(y);
  47983. +    }
  47984. +
  47985. +  return Qnil;
  47986. +}
  47987. +
  47988. +struct EClockVal scount[16], ecount[16];
  47989. +long total[16], counting[16], nb[16], susp[16];
  47990. +
  47991. +void start_count(int n)
  47992. +{
  47993. +  nb[n]++;
  47994. +  if (counting[n]) printf("Restarted %d\n", n);
  47995. +  counting[n] = 1;
  47996. +  /*ReadEClock(&scount[n]);*/
  47997. +}
  47998. +
  47999. +void stop_count(int n)
  48000. +{
  48001. +  if (counting[n])
  48002. +    {
  48003. +      /*ReadEClock(&ecount[n]);*/
  48004. +      counting[n] = 0;
  48005. +
  48006. +      total[n] += ecount[n].ev_lo - scount[n].ev_lo;
  48007. +    }
  48008. +}
  48009. +
  48010. +void suspend_count(int n)
  48011. +{
  48012. +  if (counting[n] && susp[n]++ == 0)
  48013. +    {
  48014. +      /*ReadEClock(&ecount[n]);*/
  48015. +      total[n] += ecount[n].ev_lo - scount[n].ev_lo;
  48016. +    }
  48017. +}
  48018. +
  48019. +void resume_count(int n)
  48020. +{
  48021. +  if (counting[n] && --susp[n] == 0) /*ReadEClock(&scount[n])*/;
  48022. +}
  48023. +
  48024. +disp_counts(void)
  48025. +{
  48026. +  int i;
  48027. +
  48028. +  for (i = 0; i < 16; i++)
  48029. +    {
  48030. +      printf("%d(%d) ", total[i], nb[i]);
  48031. +      total[i] = nb[i] = 0;
  48032. +    }
  48033. +  printf("\n");
  48034. +}
  48035. +
  48036. +void screen_puts(FRAME_PTR f, char *str, unsigned int len)
  48037. +{
  48038. +  if (EMACS_WIN(f))
  48039. +    {
  48040. +      int i;
  48041. +
  48042. +      emacs_console->io_Command = CMD_WRITE;
  48043. +      emacs_console->io_Data    = (APTR)str;
  48044. +      emacs_console->io_Length  = len;
  48045. +
  48046. +      /*    start_count(0);
  48047. +        for (i = 1; i <= 6; i++) suspend_count(i);*/
  48048. +      DoIO(emacs_console); 
  48049. +      /*    for (i = 1; i <= 6; i++) resume_count(i);
  48050. +        stop_count(0);*/
  48051. +    }
  48052. +}
  48053. +
  48054. +DEFUN ("amiga-activate-window", Famiga_activate_window, Samiga_activate_window, 0, 0, 0,
  48055. +       "Makes emacs window the currently active one.")
  48056. +     ()
  48057. +{
  48058. +  if(EMACS_WIN(f)) {
  48059. +    ActivateWindow(EMACS_WIN(f));
  48060. +    return Qnil;
  48061. +  }
  48062. +  error("No window to make active.");
  48063. +  return Qnil;
  48064. +}
  48065. +
  48066. +void
  48067. +Aframe_raise_lower(FRAME_PTR f, int raise)
  48068. +{
  48069. +    if(raise)
  48070. +    {
  48071. +    if(EMACS_WIN(f))
  48072. +        WindowToFront(EMACS_WIN(f));
  48073. +    }
  48074. +    else
  48075. +    {
  48076. +    if(EMACS_WIN(f))
  48077. +        WindowToBack(EMACS_WIN(f));
  48078. +    }
  48079. +}
  48080. +
  48081. +DEFUN ("amiga-window-to-front", Famiga_window_to_front, Samiga_window_to_front, 0, 0, 0,
  48082. +       "Pulls the emacs window to the front (including screen)")
  48083. +     ()
  48084. +{
  48085. +  if(EMACS_WIN(f)) {
  48086. +    WindowToFront(EMACS_WIN(f));
  48087. +    ScreenToFront(EMACS_WIN(f)->WScreen);
  48088. +    return Qnil;
  48089. +  }
  48090. +  error("No window to pull to the front.");
  48091. +  return Qnil;
  48092. +}
  48093. +
  48094. +DEFUN ("amiga-window-to-back", Famiga_window_to_back, Samiga_window_to_back, 0, 0, 0,
  48095. +       "Pushes the emacs window to the back (including screen)")
  48096. +     ()
  48097. +{
  48098. +  if(EMACS_WIN(f)) {
  48099. +    WindowToBack(EMACS_WIN(f));
  48100. +    ScreenToBack(EMACS_WIN(f)->WScreen);
  48101. +    return Qnil;
  48102. +  }
  48103. +  error("No window to push back.");
  48104. +  return Qnil;
  48105. +}
  48106. +
  48107. +DEFUN ("amiga-popup-font-request", Famiga_popup_font_request, Samiga_popup_font_request, 0, 0, 0,
  48108. +       "Open an ASL Font Requester and return the value as cons of font name and font size.")
  48109. +     ()
  48110. +{
  48111. +    LONG Top = 0, Left = 0;
  48112. +    Lisp_Object RetVal = Qnil;
  48113. +    struct FontRequester *Req;
  48114. +
  48115. +    if(EMACS_WIN(f))
  48116. +    {
  48117. +    Top = EMACS_WIN(f)->TopEdge + EMACS_WIN(f)->MouseY - 75;
  48118. +    Left = EMACS_WIN(f)->LeftEdge + EMACS_WIN(f)->MouseX - 160;
  48119. +    AslBase = OpenLibrary("asl.library", 0);
  48120. +    if(AslBase)
  48121. +    {
  48122. +        Req = AllocAslRequestTags(ASL_FontRequest,
  48123. +                      ASL_Hail, "Emacs Font Request",
  48124. +                      ASL_FuncFlags, FONF_FIXEDWIDTH,
  48125. +                      TAG_DONE);
  48126. +        if(Req)
  48127. +        {
  48128. +        if(AslRequestTags(Req,
  48129. +                  ASL_TopEdge, Top,
  48130. +                  ASL_LeftEdge, Left,
  48131. +                  ASL_Height, 250, TAG_DONE))
  48132. +        {
  48133. +            char *s;
  48134. +
  48135. +            s = strstr(Req->fo_Attr.ta_Name, ".font");
  48136. +            if(s)
  48137. +            RetVal = Fcons(make_string(Req->fo_Attr.ta_Name,
  48138. +                           s - Req->fo_Attr.ta_Name),
  48139. +                       make_number(Req->fo_Attr.ta_YSize));
  48140. +        }
  48141. +        FreeAslRequest(Req);
  48142. +        }
  48143. +        CloseLibrary(AslBase);
  48144. +    }
  48145. +    }
  48146. +    return RetVal;
  48147. +}
  48148. +
  48149. +#ifdef USE_SCROLL_BARS
  48150. +/*
  48151. + * Lisp_ScrollBar is a Lisp_Vector
  48152. + */ 
  48153. +struct Lisp_ScrollBar
  48154. +{
  48155. +    int size;
  48156. +    struct Lisp_ScrollBar *next;
  48157. +    Lisp_Object window;
  48158. +    Lisp_Object 
  48159. +};
  48160. +
  48161. +/* Arrange for all scroll bars on FRAME to be removed at the next call
  48162. +   to `*judge_scroll_bars_hook'.  A scroll bar may be spared if
  48163. +   `*redeem_scroll_bar_hook' is applied to its window before the judgement. 
  48164. +
  48165. +   This should be applied to each frame each time its window tree is
  48166. +   redisplayed, even if it is not displaying scroll bars at the moment;
  48167. +   if the HAS_SCROLL_BARS flag has just been turned off, only calling
  48168. +   this and the judge_scroll_bars_hook will get rid of them.
  48169. +
  48170. +   If non-zero, this hook should be safe to apply to any frame,
  48171. +   whether or not it can support scroll bars, and whether or not it is
  48172. +   currently displaying them.  */
  48173. +
  48174. +void
  48175. +Acondemn_scroll_bars(FRAME_PTR f)
  48176. +{
  48177. +    FRAME_CONDEMNED_SCROLL_BARS(f) = FRAME_SCROLL_BARS(f);
  48178. +    FRAME_SCROLL_BARS(f) = Qnil;
  48179. +}
  48180. +
  48181. +/* Unmark WINDOW's scroll bar for deletion in this judgement cycle.
  48182. +   Note that it's okay to redeem a scroll bar that is not condemned.  */
  48183. +
  48184. +void
  48185. +Aredeem_scroll_bar(struct window *w)
  48186. +{
  48187. +    FRAME_PTR f = WINDOW_FRAME(w);
  48188. +
  48189. +    
  48190. +}
  48191. +
  48192. +/* Remove all scroll bars on FRAME that haven't been saved since the
  48193. +   last call to `*condemn_scroll_bars_hook'.  
  48194. +
  48195. +   This should be applied to each frame after each time its window
  48196. +   tree is redisplayed, even if it is not displaying scroll bars at the
  48197. +   moment; if the HAS_SCROLL_BARS flag has just been turned off, only
  48198. +   calling this and condemn_scroll_bars_hook will get rid of them.
  48199. +
  48200. +   If non-zero, this hook should be safe to apply to any frame,
  48201. +   whether or not it can support scroll bars, and whether or not it is
  48202. +   currently displaying them.  */
  48203. +void Ajudge_scroll_bars(FRAME_PTR f)
  48204. +{
  48205. +}
  48206. +#endif /* USE_SCROLL_BARS */
  48207. +
  48208. +void syms_of_amiga_screen(void)
  48209. +{
  48210. +  DEFVAR_LISP ("amiga-mouse-item", &Vamiga_mouse_item,
  48211. +           "Encoded representation of last mouse click, corresponding to\n\
  48212. +numerical entries in amiga-mouse-map.");
  48213. +  Vamiga_mouse_item = Qnil;
  48214. +  DEFVAR_LISP ("amiga-mouse-pos", &Vamiga_mouse_pos,
  48215. +           "Current x-y position of mouse by row, column as specified by font.");
  48216. +  Vamiga_mouse_pos = Qnil;
  48217. +
  48218. +  DEFVAR_BOOL ("amiga-remap-bsdel", &amiga_remap_bsdel,
  48219. +           "*If true, map DEL to Ctrl-D and Backspace to DEL. \n\
  48220. +This is the most convenient (and default) setting. If nil, don't remap.");
  48221. +  amiga_remap_bsdel = 1;
  48222. +
  48223. +  DEFVAR_BOOL ("amiga-remap-numeric-keypad", &amiga_remap_numeric_keypad,
  48224. +           "*If true, numeric keypad keys are prefixed with C-x C-^ K.\n\
  48225. +This enables you to remap them, but causes problems with functions like\n\
  48226. +isearch-forward-regexp on some keyboards. Default to true.");
  48227. +  amiga_remap_numeric_keypad = 1;
  48228. +
  48229. +  DEFVAR_BOOL ("amiga-mouse-initialized", &amiga_mouse_initialized,
  48230. +           "Set to true once lisp has been setup to process mouse commands.\n\
  48231. +No mouse processing request (C-X C-^ M) will be queued while this is nil.");
  48232. +  amiga_mouse_initialized = 0;
  48233. +
  48234. +  DEFVAR_BOOL ("amiga-wb-initialized", &amiga_wb_initialized,
  48235. +           "Set to true once lisp has been setup to process workbench commands.\n\
  48236. +No workbench processing request (C-X C-^ W) will be queued while this is nil.");
  48237. +  amiga_mouse_initialized = 0;
  48238. +
  48239. +#if 0
  48240. +  defsubr (&Samiga_mouse_events);
  48241. +  defsubr (&Samiga_proc_mouse_event);
  48242. +  defsubr (&Samiga_get_mouse_event);
  48243. +#endif
  48244. +  defsubr (&Samiga_get_wb_event);
  48245. +  defsubr (&Samiga_set_font);
  48246. +  defsubr (&Samiga_set_geometry);
  48247. +  defsubr (&Samiga_set_background_color);
  48248. +  defsubr (&Samiga_set_foreground_color);
  48249. +  defsubr (&Samiga_iconify);
  48250. +  defsubr (&Samiga_set_icon_pos);
  48251. +
  48252. +  /* New functions  -ch3/19/93. */
  48253. +  defsubr (&Samiga_set_inverse_text_pen);
  48254. +  defsubr (&Samiga_set_inverse_fill_pen);
  48255. +  defsubr (&Samiga_window_to_front);
  48256. +  defsubr (&Samiga_window_to_back);
  48257. +  defsubr (&Samiga_activate_window);
  48258. +  defsubr (&Samiga_get_window_geometry);
  48259. +  defsubr (&Samiga_get_screen_geometry);
  48260. +
  48261. +  /* New functions -Alph08/24/94 */
  48262. +  defsubr (&Samiga_popup_font_request);
  48263. +}
  48264. +
  48265. +void init_amiga_screen(void)
  48266. +{
  48267. +  event_num = event_in = event_out = 0;
  48268. +
  48269. +  if (!((IntuitionBase = (struct IntuitionBase *)
  48270. +     OpenLibrary("intuition.library", 37L)) &&
  48271. +    (GfxBase = (struct GfxBase *)OpenLibrary("graphics.library", 0L)) &&
  48272. +    (DiskfontBase = OpenLibrary("diskfont.library", 0L)) &&
  48273. +    (WorkbenchBase = OpenLibrary("workbench.library", 37)) &&
  48274. +    (KeymapBase = OpenLibrary("keymap.library", 36)) &&
  48275. +    (input_req = (struct IOStdReq *)_device_open("input.device", 0, 0, 0, 0,
  48276. +                             sizeof(struct IOStdReq)))))
  48277. +    _fail("Need version 2.04 and diskfont.library!");
  48278. +
  48279. +  if (!(wbport = CreateMsgPort())) no_memory();
  48280. +
  48281. +  /* Add Ctrl-G detector */
  48282. +  int_handler_hook.is_Data = 0;
  48283. +  int_handler_hook.is_Code = (void *)int_handler;
  48284. +  int_handler_hook.is_Node.ln_Pri = 100; /* 100 not 127 is the standard value
  48285. +                      * for input stream handlers.  -ch3/19/93. */
  48286. +  /* it is standard for interrupts to have names  -ch3/19/93.*/
  48287. +  int_handler_hook.is_Node.ln_Name = "GNU Emacs CTRL-G handler";
  48288. +  input_req->io_Command = IND_ADDHANDLER;
  48289. +  input_req->io_Data = (APTR)&int_handler_hook;
  48290. +
  48291. +  /* wasn't checking for error. -ch3/19/93. */
  48292. +#if 1 /* CHFIXME make debugging life a bit more easy */
  48293. +  hooked = FALSE;
  48294. +#else
  48295. +  if(0 == DoIO(input_req))
  48296. +    hooked = TRUE;
  48297. +  else
  48298. +    {
  48299. +      hooked = FALSE;
  48300. +      _fail("couldn't get input handler hook for CTRL-G");
  48301. +    }
  48302. +#endif
  48303. +  inputsig |= 1L << wbport->mp_SigBit;
  48304. +
  48305. +  background_hook.h_Entry = (ULONG (*)()) fill_background; /* added cast. */
  48306. +  font = GfxBase->DefaultFont;
  48307. +
  48308. +  init_amiga_menu();
  48309. +}
  48310. +
  48311. +void cleanup_amiga_screen(void)
  48312. +{
  48313. +  if (hooked)
  48314. +    {
  48315. +      input_req->io_Command = IND_REMHANDLER;
  48316. +      input_req->io_Data = (APTR)&int_handler_hook;
  48317. +      DoIO(input_req);
  48318. +    }
  48319. +  close_app_win();
  48320. +  if (wbport) DeleteMsgPort(wbport);
  48321. +  cleanup_amiga_menu();
  48322. +  _device_close(emacs_console);
  48323. +#ifdef MULTI_FRAME
  48324. +  you lose
  48325. +#endif
  48326. +  if (EMACS_WIN(f)) CloseWindow(EMACS_WIN(f));
  48327. +  if (font_opened) CloseFont(font);
  48328. +  if (IntuitionBase) CloseLibrary(IntuitionBase);
  48329. +  if (GfxBase) CloseLibrary(GfxBase);
  48330. +  if (DiskfontBase) CloseLibrary(DiskfontBase);
  48331. +  if (WorkbenchBase) CloseLibrary(WorkbenchBase);
  48332. +  if (KeymapBase) CloseLibrary(KeymapBase);
  48333. +  _device_close(input_req);
  48334. +}
  48335. diff -ru --new-file baseline/fsf/emacs/src/amiga_screen_protos.h amiga/fsf/emacs/src/amiga_screen_protos.h
  48336. --- baseline/fsf/emacs/src/amiga_screen_protos.h    Wed Dec 31 17:00:00 1969
  48337. +++ amiga/fsf/emacs/src/amiga_screen_protos.h    Sun Oct 15 17:09:28 1995
  48338. @@ -0,0 +1,238 @@
  48339. +/* Prototypes for functions defined in
  48340. +amiga_screen.c
  48341. + */
  48342. +
  48343. +extern struct GfxBase * GfxBase;
  48344. +
  48345. +extern struct IntuitionBase * IntuitionBase;
  48346. +
  48347. +extern struct Library * DiskfontBase;
  48348. +
  48349. +extern struct Library * KeymapBase;
  48350. +
  48351. +extern struct Library * WorkbenchBase;
  48352. +
  48353. +extern char intkey_code;
  48354. +
  48355. +extern char intkey_qualifier;
  48356. +
  48357. +extern struct IOStdReq * input_req;
  48358. +
  48359. +extern struct Interrupt int_handler_hook;
  48360. +
  48361. +extern int hooked;
  48362. +
  48363. +extern struct MsgPort * wbport;
  48364. +
  48365. +extern struct AppWindow * emacs_app_win;
  48366. +
  48367. +extern struct AppIcon * emacs_icon;
  48368. +
  48369. +extern struct Library * ConsoleDevice;
  48370. +
  48371. +extern struct TextFont * font;
  48372. +
  48373. +extern int font_opened;
  48374. +
  48375. +extern char reset_string[20];
  48376. +
  48377. +extern int foreground;
  48378. +
  48379. +extern int background;
  48380. +
  48381. +extern short emacs_x;
  48382. +
  48383. +extern short emacs_y;
  48384. +
  48385. +extern short emacs_w;
  48386. +
  48387. +extern short emacs_h;
  48388. +
  48389. +extern char * emacs_screen_name;
  48390. +
  48391. +extern char emacs_screen_name_storage[140];
  48392. +
  48393. +extern int emacs_backdrop;
  48394. +
  48395. +extern int inverse_fill_pen;
  48396. +
  48397. +extern int inverse_text_pen;
  48398. +
  48399. +extern struct IOStdReq * emacs_console;
  48400. +
  48401. +extern unsigned short __chip emacs_icon_data[1][55][4];
  48402. +
  48403. +extern struct Image __far emacs_icon_image;
  48404. +
  48405. +extern struct DiskObject __far emacs_icon_object;
  48406. +
  48407. +extern struct Hook background_hook;
  48408. +
  48409. +extern struct event events[32];
  48410. +
  48411. +extern int event_num;
  48412. +
  48413. +extern int event_in;
  48414. +
  48415. +extern int event_out;
  48416. +
  48417. +extern struct wbevent * wbevents;
  48418. +
  48419. +extern int Vamiga_mouse_pos;
  48420. +
  48421. +extern int Vamiga_mouse_item;
  48422. +
  48423. +extern int amiga_remap_bsdel;
  48424. +
  48425. +extern int amiga_remap_numeric_keypad;
  48426. +
  48427. +extern int amiga_mouse_initialized;
  48428. +
  48429. +extern int amiga_wb_initialized;
  48430. +
  48431. +extern int emacs_iconified;
  48432. +
  48433. +extern int mouse_event;
  48434. +
  48435. +int mouse_event_pending(void);
  48436. +
  48437. +void reset_mouse_event_pending(void);
  48438. +
  48439. +void set_mouse_event_pending(void);
  48440. +
  48441. +int amiga_pos_x(int , int );
  48442. +
  48443. +int amiga_pos_y(int , int );
  48444. +
  48445. +void glyph_to_pixel_coords(int , int , int , int * , int * );
  48446. +
  48447. +void pixel_to_glyph_coords(int , int , int , int * , int * , void * , int );
  48448. +
  48449. +void amiga_change_size(int );
  48450. +
  48451. +void amiga_get_window_size(int , int * , int * );
  48452. +
  48453. +int set_min_size(struct Window * , struct TextFont * , short * , short * );
  48454. +
  48455. +unsigned long __asm __interrupt __saveds fill_background(register __a2 struct RastPort * , register __a1 struct fill * );
  48456. +
  48457. +void clear_window(int );
  48458. +
  48459. +int make_reset_string(void);
  48460. +
  48461. +void reset_window(int );
  48462. +
  48463. +void close_app_win(void);
  48464. +
  48465. +int close_emacs_window(int );
  48466. +
  48467. +char * get_screen_name(struct Screen * , char * );
  48468. +
  48469. +enum open_emacs_win_ret open_emacs_window(int , unsigned short , unsigned short , unsigned short , unsigned short , int , char * );
  48470. +
  48471. +void force_window(int );
  48472. +
  48473. +int DeadKeyConvert(struct IntuiMessage * , unsigned char * , unsigned short * , int , struct KeyMap * );
  48474. +
  48475. +void add_wbevent(struct WBArg * );
  48476. +
  48477. +void get_mouse_char_pos(int , int * , int * );
  48478. +
  48479. +void check_window(int , int );
  48480. +
  48481. +void setup_intchar(char );
  48482. +
  48483. +long __asm __interrupt __saveds int_handler(register __a0 struct InputEvent * );
  48484. +
  48485. +extern struct Lisp_Subr Samiga_get_wb_event;
  48486. +
  48487. +int Famiga_get_wb_event(int );
  48488. +
  48489. +extern struct Lisp_Subr Samiga_set_foreground_color;
  48490. +
  48491. +int Famiga_set_foreground_color(int );
  48492. +
  48493. +extern struct Lisp_Subr Samiga_set_background_color;
  48494. +
  48495. +int Famiga_set_background_color(int );
  48496. +
  48497. +extern struct Lisp_Subr Samiga_set_inverse_fill_pen;
  48498. +
  48499. +int Famiga_set_inverse_fill_pen(int );
  48500. +
  48501. +extern struct Lisp_Subr Samiga_set_inverse_text_pen;
  48502. +
  48503. +int Famiga_set_inverse_text_pen(int );
  48504. +
  48505. +extern struct Lisp_Subr Samiga_set_font;
  48506. +
  48507. +int Famiga_set_font(int , int );
  48508. +
  48509. +extern struct Lisp_Subr Samiga_set_geometry;
  48510. +
  48511. +int Famiga_set_geometry(int , int * );
  48512. +
  48513. +extern struct Lisp_Subr Samiga_get_window_geometry;
  48514. +
  48515. +int Famiga_get_window_geometry(void);
  48516. +
  48517. +extern struct Lisp_Subr Samiga_get_screen_geometry;
  48518. +
  48519. +int Famiga_get_screen_geometry(void);
  48520. +
  48521. +extern struct Lisp_Subr Samiga_iconify;
  48522. +
  48523. +int Famiga_iconify(void);
  48524. +
  48525. +extern struct Lisp_Subr Samiga_set_icon_pos;
  48526. +
  48527. +int Famiga_set_icon_pos(int , int );
  48528. +
  48529. +extern struct EClockVal scount[16];
  48530. +
  48531. +extern struct EClockVal ecount[16];
  48532. +
  48533. +extern long total[16];
  48534. +
  48535. +extern long counting[16];
  48536. +
  48537. +extern long nb[16];
  48538. +
  48539. +extern long susp[16];
  48540. +
  48541. +void start_count(int );
  48542. +
  48543. +void stop_count(int );
  48544. +
  48545. +void suspend_count(int );
  48546. +
  48547. +void resume_count(int );
  48548. +
  48549. +int disp_counts(void);
  48550. +
  48551. +void screen_puts(int , char * , unsigned int );
  48552. +
  48553. +extern struct Lisp_Subr Samiga_activate_window;
  48554. +
  48555. +int Famiga_activate_window(void);
  48556. +
  48557. +void Aframe_raise_lower(int , int );
  48558. +
  48559. +extern struct Lisp_Subr Samiga_window_to_front;
  48560. +
  48561. +int Famiga_window_to_front(void);
  48562. +
  48563. +extern struct Lisp_Subr Samiga_window_to_back;
  48564. +
  48565. +int Famiga_window_to_back(void);
  48566. +
  48567. +extern struct Lisp_Subr Samiga_popup_font_request;
  48568. +
  48569. +int Famiga_popup_font_request(void);
  48570. +
  48571. +void syms_of_amiga_screen(void);
  48572. +
  48573. +void init_amiga_screen(void);
  48574. +
  48575. +void cleanup_amiga_screen(void);
  48576. +
  48577. diff -ru --new-file baseline/fsf/emacs/src/amiga_serial.c amiga/fsf/emacs/src/amiga_serial.c
  48578. --- baseline/fsf/emacs/src/amiga_serial.c    Wed Dec 31 17:00:00 1969
  48579. +++ amiga/fsf/emacs/src/amiga_serial.c    Sun Oct 15 17:09:30 1995
  48580. @@ -0,0 +1,78 @@
  48581. +#include <exec/types.h>
  48582. +#include <devices/serial.h>
  48583. +#include <stdio.h>
  48584. +#include <internal/devices.h>
  48585. +
  48586. +#include <proto/exec.h>
  48587. +#include <proto/dos.h>
  48588. +
  48589. +#include "amiga.h"
  48590. +
  48591. +#ifdef USE_PROTOS
  48592. +#include "config.h"
  48593. +#include "lisp.h"
  48594. +#include "protos.h"
  48595. +#endif
  48596. +
  48597. +static struct MsgPort  *SerReadPort;
  48598. +static struct IOExtSer *SerReadRequest, *SerWriteRequest;
  48599. +static char ser_inbuf[2];
  48600. +char *far serial_device = "serial.device";
  48601. +long far serial_unit;
  48602. +
  48603. +void init_amiga_serial(void)
  48604. +{
  48605. +    if ((SerWriteRequest = (struct IOExtSer *)
  48606. +     _device_open(serial_device, serial_unit, 0L,
  48607. +              0L, 0, sizeof(struct IOExtSer))) &&
  48608. +    (SerReadPort = CreateMsgPort()) &&
  48609. +    (SerReadRequest  = (struct IOExtSer *)CreateIORequest(SerReadPort, sizeof (struct IOExtSer))))
  48610. +    {
  48611. +    SerReadRequest->IOSer.io_Device = SerWriteRequest->IOSer.io_Device;
  48612. +    SerReadRequest->IOSer.io_Unit = SerWriteRequest->IOSer.io_Unit;
  48613. +    ser_inbuf[1]=0;
  48614. +    SerReadRequest->IOSer.io_Command = CMD_READ;
  48615. +    SerWriteRequest->IOSer.io_Command = CMD_WRITE;
  48616. +    SerReadRequest->IOSer.io_Length = 1;
  48617. +    SerReadRequest->IOSer.io_Data = &ser_inbuf[0];
  48618. +    SendIO(SerReadRequest);
  48619. +
  48620. +    inputsig |= 1L << SerReadPort->mp_SigBit;
  48621. +    }
  48622. +    else _fail("No memory or serial.device missing");
  48623. +}
  48624. +
  48625. +void cleanup_amiga_serial(void)
  48626. +{
  48627. +    if (SerReadRequest)
  48628. +    {
  48629. +    AbortIO(SerReadRequest);
  48630. +    WaitIO(SerReadRequest);
  48631. +    DeleteIORequest(SerReadRequest);
  48632. +    }
  48633. +    if (SerReadPort) DeletePort(SerReadPort);
  48634. +    _device_close(SerWriteRequest);
  48635. +}
  48636. +
  48637. +void check_serial(int force)
  48638. +{
  48639. +    while (CheckIO(SerReadRequest))
  48640. +    {
  48641. +    int c = ser_inbuf[0];
  48642. +    SendIO(SerReadRequest);
  48643. +    enque(c, FALSE, FALSE);
  48644. +    }
  48645. +}
  48646. +
  48647. +void serial_puts(char *str, int len)
  48648. +{
  48649. +
  48650. +    SerWriteRequest->IOSer.io_Length = len;
  48651. +    SerWriteRequest->IOSer.io_Data = str;
  48652. +    DoIO(SerWriteRequest);
  48653. +}
  48654. +
  48655. +unsigned long serial_baud_rate(void)
  48656. +{
  48657. +    return SerWriteRequest->io_Baud;
  48658. +}
  48659. diff -ru --new-file baseline/fsf/emacs/src/amiga_serial_protos.h amiga/fsf/emacs/src/amiga_serial_protos.h
  48660. --- baseline/fsf/emacs/src/amiga_serial_protos.h    Wed Dec 31 17:00:00 1969
  48661. +++ amiga/fsf/emacs/src/amiga_serial_protos.h    Sun Oct 15 17:09:32 1995
  48662. @@ -0,0 +1,26 @@
  48663. +/* Prototypes for functions defined in
  48664. +amiga_serial.c
  48665. + */
  48666. +
  48667. +extern struct MsgPort * SerReadPort;
  48668. +
  48669. +extern struct IOExtSer * SerReadRequest;
  48670. +
  48671. +extern struct IOExtSer * SerWriteRequest;
  48672. +
  48673. +extern char ser_inbuf[2];
  48674. +
  48675. +extern char * __far serial_device;
  48676. +
  48677. +extern long __far serial_unit;
  48678. +
  48679. +void init_amiga_serial(void);
  48680. +
  48681. +void cleanup_amiga_serial(void);
  48682. +
  48683. +void check_serial(int );
  48684. +
  48685. +void serial_puts(char * , int );
  48686. +
  48687. +unsigned long serial_baud_rate(void);
  48688. +
  48689. diff -ru --new-file baseline/fsf/emacs/src/amiga_sysdep.c amiga/fsf/emacs/src/amiga_sysdep.c
  48690. --- baseline/fsf/emacs/src/amiga_sysdep.c    Wed Dec 31 17:00:00 1969
  48691. +++ amiga/fsf/emacs/src/amiga_sysdep.c    Sun Oct 15 17:09:34 1995
  48692. @@ -0,0 +1,414 @@
  48693. +/* Interfaces to system-dependent kernel and library entries.
  48694. +Copyright (C) 1985, 1986, 1987, 1988 Free Software Foundation, Inc.
  48695. +
  48696. +This file is part of GNU Emacs.
  48697. +
  48698. +GNU Emacs is distributed in the hope that it will be useful,
  48699. +but WITHOUT ANY WARRANTY.  No author or distributor
  48700. +accepts responsibility to anyone for the consequences of using it
  48701. +or for whether it serves any particular purpose or works at all,
  48702. +unless he says so in writing.  Refer to the GNU Emacs General Public
  48703. +License for full details.
  48704. +
  48705. +Everyone is granted permission to copy, modify and redistribute
  48706. +GNU Emacs, but only under the conditions described in the
  48707. +GNU Emacs General Public License.   A copy of this license is
  48708. +supposed to have been given to you along with GNU Emacs so you
  48709. +can know your rights and responsibilities.  It should be in a
  48710. +file named COPYING.  Among other things, the copyright notice
  48711. +and this notice must be preserved on all copies.  */
  48712. +
  48713. +#include <exec/types.h>
  48714. +#include <dos/dos.h>
  48715. +#include <dos/dosextens.h>
  48716. +#include <dos/var.h>
  48717. +#include <exec/execbase.h>
  48718. +#include <exec/tasks.h>
  48719. +#include <utility/tagitem.h>
  48720. +#include <workbench/startup.h>
  48721. +#include <workbench/workbench.h>
  48722. +#include <proto/exec.h>
  48723. +#include <proto/dos.h>
  48724. +#include <proto/icon.h>
  48725. +
  48726. +#include <string.h>
  48727. +#include <ios1.h>
  48728. +#include <stdio.h>
  48729. +#include <sys/types.h>
  48730. +#include <sys/stat.h>
  48731. +#include <signal.h>
  48732. +#include <setjmp.h>
  48733. +#include <unistd.h>
  48734. +#include <internal/vars.h>
  48735. +
  48736. +#undef LONGBITS
  48737. +#include "config.h"
  48738. +#include "lisp.h"
  48739. +#include "emacssignal.h"
  48740. +
  48741. +#define min(x,y) ((x) > (y) ? (y) : (x))
  48742. +
  48743. +#include "termhooks.h"
  48744. +#include "termchar.h"
  48745. +#include "termopts.h"
  48746. +#include "dispextern.h"
  48747. +#include "amiga.h"
  48748. +
  48749. +#ifdef USE_PROTOS
  48750. +#include "protos.h"
  48751. +#endif
  48752. +
  48753. +#define EMACS_TOOL_SIZE 128    /* Room for path to emacs executable */
  48754. +
  48755. +struct Library *IconBase;
  48756. +extern struct ExecBase *SysBase;
  48757. +
  48758. +/*long __stack = 40000;*/        /* Minimum stack size, used by c.o */
  48759. +int amiga_process_stack_size;
  48760. +
  48761. +int amiga_initialized;
  48762. +int amiga_create_icons;        /* If true, we create icons when saving files */
  48763. +enum exit_method amiga_fail_exit = use_xcexit;
  48764. +int selecting;
  48765. +
  48766. +/* Emacs sysdep routines */
  48767. +/* --------------------- */
  48768. +
  48769. +set_exclusive_use(int fd) {}
  48770. +
  48771. +/* Suspend the Emacs process; give terminal to its superior.  */
  48772. +sys_suspend()
  48773. +{
  48774. +  /* This could have been iconify, but:
  48775. +     a) Not good for serial lines.
  48776. +     b) emacs stays active while iconified */
  48777. +}
  48778. +
  48779. +sys_subshell()
  48780. +{
  48781. +    /* CHFIXME: call to newshell? */
  48782. +}
  48783. +
  48784. +static char sysname[32];
  48785. +
  48786. +#if 0    /* collides with version in editfns.c */
  48787. +
  48788. +char *get_system_name()
  48789. +{
  48790. +  gethostname(sysname, sizeof sysname);
  48791. +  return sysname;
  48792. +}
  48793. +
  48794. +#else
  48795. +
  48796. +extern Lisp_Object Vsystem_name;
  48797. +
  48798. +void
  48799. +init_system_name ()
  48800. +{
  48801. +  unsigned char *p;
  48802. +
  48803. +  gethostname(sysname, sizeof sysname);
  48804. +  Vsystem_name = build_string (sysname);
  48805. +  for (p = XSTRING (Vsystem_name)->data; *p; p++)
  48806. +    if (*p == ' ' || *p == '\t')
  48807. +      *p = '-';
  48808. +}
  48809. +
  48810. +#endif
  48811. +
  48812. +/*
  48813. + *    flush any pending output
  48814. + *      (may flush input as well; it does not matter the way we use it)
  48815. + */
  48816. +
  48817. +flush_pending_output (channel)
  48818. +     int channel;
  48819. +{
  48820. +}
  48821. +
  48822. +wait_for_termination (pid)
  48823. +     int pid;
  48824. +{
  48825. +  while (1)
  48826. +    {
  48827. +      sigsetmask (sigmask (SIGCHLD));
  48828. +      if (0 > kill (pid, 0))
  48829. +        {
  48830. +      sigsetmask (SIGEMPTYMASK);
  48831. +      break;
  48832. +    }
  48833. +      sigpause (SIGEMPTYMASK);
  48834. +    }
  48835. +}
  48836. +
  48837. +/* A few general amiga support routines */
  48838. +/* ------------------------------------ */
  48839. +
  48840. +char *expand_path(char *path, char *buf, int len)
  48841. +{
  48842. +  BPTR dirlock;
  48843. +  APTR window;
  48844. +
  48845. +  window = _us->pr_WindowPtr;
  48846. +  _us->pr_WindowPtr = (APTR)-1;
  48847. +  dirlock = Lock(path, ACCESS_READ);
  48848. +  _us->pr_WindowPtr = window;
  48849. +  if (dirlock)            /* Expand lock name */
  48850. +    {
  48851. +      if (!NameFromLock(dirlock, buf, len)) buf = 0;
  48852. +      UnLock(dirlock);
  48853. +      return buf;
  48854. +    }
  48855. +  return 0;
  48856. +}
  48857. +
  48858. +#undef select
  48859. +int emacs_select(int nfds, int *rfds, int *wfds, int *efds, struct timeval *timeout)
  48860. +{
  48861. +  int ret;
  48862. +
  48863. +  selecting = TRUE;
  48864. +  ret = select(nfds, (fd_set *) rfds, (fd_set *) wfds, (fd_set *) efds, timeout);
  48865. +  selecting = FALSE;
  48866. +  return ret;
  48867. +}
  48868. +
  48869. +void no_memory(void)
  48870. +{
  48871. +  _fail("No memory");
  48872. +}
  48873. +
  48874. +char *amiga_path(void)
  48875. +{
  48876. +  char *path, *pp, name[128];
  48877. +  int pathsize;
  48878. +  struct CommandLineInterface *cli;
  48879. +  BPTR lock;
  48880. +  long l, *lp, nlen;
  48881. +
  48882. +  pathsize = 128;
  48883. +  path = (char *)xmalloc(pathsize);
  48884. +
  48885. +  strcpy(path, ".");
  48886. +  pp = path + 1;
  48887. +
  48888. +  if (!(cli = (struct CommandLineInterface *)((long)_us->pr_CLI << 2)))
  48889. +    return path;
  48890. +
  48891. +  l = (long)cli->cli_CommandDir;
  48892. +  while (l) {
  48893. +    *pp++ = ',';
  48894. +    l <<= 2;
  48895. +    lp = (long *)l;
  48896. +    lock = (BPTR)*(lp + 1);
  48897. +    NameFromLock(lock, name, 128);
  48898. +    nlen = strlen(name);
  48899. +    if (pp + nlen + 5 >= path + pathsize)
  48900. +      {
  48901. +    char *newpath;
  48902. +
  48903. +    pathsize = 2 * pathsize + nlen;
  48904. +    newpath = (char *)xrealloc(path, pathsize);
  48905. +    pp = newpath + (pp - path);
  48906. +    path = newpath;
  48907. +      }
  48908. +    memcpy(pp, name, nlen);
  48909. +    pp += nlen;
  48910. +    l = *lp;
  48911. +  }
  48912. +  /* Use of +5 above guarantees that there is enough space for c: */
  48913. +  strcpy(pp, ",c:");
  48914. +
  48915. +  return path;
  48916. +}
  48917. +
  48918. +/* Some general amiga commands */
  48919. +/* --------------------------- */
  48920. +
  48921. +#define emacs_file_icon_width 54
  48922. +#define emacs_file_icon_height 22
  48923. +#define emacs_file_icon_num_planes 2
  48924. +
  48925. +static UWORD chip emacs_file_icon_data[2][22][4] = {
  48926. +    {
  48927. +        0x0000,0x0000,0x0000,0x0400,0x0000,0x0000,0x0000,0x0c00,
  48928. +        0x0000,0x0000,0x0000,0x0c00,0x07ff,0xffff,0xffe0,0x0c00,
  48929. +        0x0400,0x0000,0x0030,0x0c00,0x0400,0x0000,0x0028,0x0c00,
  48930. +        0x04ff,0xffff,0xfe24,0x0c00,0x0400,0x0000,0x0022,0x0c00,
  48931. +        0x04ff,0xffff,0xfe3f,0x0c00,0x0400,0x0000,0x0000,0x8c00,
  48932. +        0x04ff,0xffc0,0x0000,0x8c00,0x0400,0x0000,0x0000,0x8c00,
  48933. +        0x0400,0x0000,0x0000,0x8c00,0x0400,0x0000,0x0000,0x8c00,
  48934. +        0x04ff,0xffff,0xfe00,0x8c00,0x0400,0x0000,0x0000,0x8c00,
  48935. +        0x04ff,0xffff,0xfe00,0x8c00,0x0400,0x0000,0x0000,0x8c00,
  48936. +        0x07ff,0xffff,0xffff,0x8c00,0x0000,0x0000,0x0000,0x0c00,
  48937. +        0x0000,0x0000,0x0000,0x0c00,0x7fff,0xffff,0xffff,0xfc00
  48938. +    },
  48939. +    {
  48940. +        0xffff,0xffff,0xffff,0xf800,0x8000,0x0000,0x0000,0x0000,
  48941. +        0x8000,0x0000,0x0000,0x0000,0x8000,0x0000,0x0000,0x0000,
  48942. +        0x83ff,0xffff,0xffc0,0x0000,0x83ff,0xffff,0xffd0,0x0000,
  48943. +        0x8300,0x0000,0x01d8,0x0000,0x83ff,0xffff,0xffdc,0x0000,
  48944. +        0x8300,0x0000,0x01c0,0x0000,0x83ff,0xffff,0xffff,0x0000,
  48945. +        0x8300,0x003f,0xffff,0x0000,0x83ff,0xffff,0xffff,0x0000,
  48946. +        0x83ff,0xffff,0xffff,0x0000,0x83ff,0xffff,0xffff,0x0000,
  48947. +        0x8300,0x0000,0x01ff,0x0000,0x83ff,0xffff,0xffff,0x0000,
  48948. +        0x8300,0x0000,0x01ff,0x0000,0x83ff,0xffff,0xffff,0x0000,
  48949. +        0x8000,0x0000,0x0000,0x0000,0x8000,0x0000,0x0000,0x0000,
  48950. +        0x8000,0x0000,0x0000,0x0000,0x8000,0x0000,0x0000,0x0000
  48951. +    },
  48952. +};
  48953. +struct Image far emacs_file_icon_image = {
  48954. +  0, 0,
  48955. +  emacs_file_icon_width, emacs_file_icon_height, emacs_file_icon_num_planes,
  48956. +  (UWORD *)emacs_file_icon_data,
  48957. +  3, 0,
  48958. +  0
  48959. +};
  48960. +
  48961. +static char *far emacs_file_tooltypes[] = {
  48962. +  "FILETYPE=TEXT",
  48963. +  0
  48964. +};
  48965. +
  48966. +static char far emacs_tool[EMACS_TOOL_SIZE];
  48967. +
  48968. +static struct DiskObject far emacs_file_icon_object = {
  48969. +  WB_DISKMAGIC, WB_DISKVERSION,
  48970. +  { 0, 0, 0, emacs_file_icon_width, emacs_file_icon_height,
  48971. +    GFLG_GADGIMAGE | GADGBACKFILL, GACT_IMMEDIATE | GACT_RELVERIFY, GTYP_BOOLGADGET,
  48972. +    (APTR)&emacs_file_icon_image },
  48973. +  WBPROJECT, emacs_tool, emacs_file_tooltypes,
  48974. +  NO_ICON_POSITION, NO_ICON_POSITION,
  48975. +  0, 0,
  48976. +  40000                /* Stack size for emacs */
  48977. +};
  48978. +
  48979. +DEFUN ("amiga-put-icon", Famiga_put_icon, Samiga_put_icon, 2, 2, 0,
  48980. +       "Create an icon for FILE.\n\
  48981. +If FORCE is non-nil create it unconditionally, otherwise only if one doesn't exist.\n\
  48982. +Returns t if an icon was created, nil otherwise.")
  48983. +     (file, force)
  48984. +Lisp_Object file, force;
  48985. +{
  48986. +  char *fname;
  48987. +  struct DiskObject *obj;
  48988. +
  48989. +  CHECK_STRING(file, 0);
  48990. +  fname = XSTRING(file)->data;
  48991. +
  48992. +  if (NILP (force) && (obj = GetDiskObject(fname)))
  48993. +    {
  48994. +      /* Icon exists, don't overwrite */
  48995. +      FreeDiskObject(obj);
  48996. +      return Qnil;
  48997. +    }
  48998. +  emacs_file_icon_object.do_StackSize = _stack_size;
  48999. +  if (PutDiskObject(fname, &emacs_file_icon_object)) return Qt;
  49000. +  error("Icon for %s couldn't be created", fname);
  49001. +}
  49002. +
  49003. +/* Amiga initialisation routines */
  49004. +/* ----------------------------- */
  49005. +
  49006. +syms_of_amiga ()
  49007. +{
  49008. +  DEFVAR_BOOL("amiga-initialized", &amiga_initialized, "");
  49009. +  DEFVAR_INT("amiga-malloc-bytes-used", &malloc_bytes_used,
  49010. +         "Number of malloc bytes used when emacs was dumped");
  49011. +  DEFVAR_BOOL("amiga-create-icons", &amiga_create_icons,
  49012. +         "If non-nil, create icons when saving files.");
  49013. +  defsubr(&Samiga_put_icon);
  49014. +  amiga_process_stack_size = 0;
  49015. +  DEFVAR_INT("amiga-process-stack-size", &amiga_process_stack_size,
  49016. +     "Size of stack for called processes. 0 means same size as emacs stack.");
  49017. +  syms_of_amiga_tty();
  49018. +  syms_of_amiga_menu();
  49019. +  syms_of_amiga_clipboard();
  49020. +}
  49021. +
  49022. +static void amiga_early_init(int *_argc, char ***_argv)
  49023. +{
  49024. +  int argc = *_argc;
  49025. +  char **argv = *_argv;
  49026. +
  49027. +  if (argc > 2 && !strcmp(argv[1], "-pure"))
  49028. +    {
  49029. +      puresize = atoi(argv[2]);
  49030. +      argc -= 2; argv += 2;
  49031. +    }
  49032. +  if (argc > 2 && !strcmp(argv[1], "-malloc"))
  49033. +    {
  49034. +      malloc_hunk_size = atoi(argv[2]);
  49035. +      argc -= 2; argv += 2;
  49036. +    }
  49037. +  if (argc > 2 && !strcmp(argv[1], "-prealloc"))
  49038. +    {
  49039. +      pre_alloc = atoi(argv[2]);
  49040. +      argc -= 2; argv += 2;
  49041. +    }
  49042. +  /* Handle the -dev switch, which specifies device & unit to use as terminal */
  49043. +  if (argc > 3 && !strcmp (argv[1], "-dev"))
  49044. +    {
  49045. +      extern char *far serial_device;
  49046. +      extern long far serial_unit;
  49047. +
  49048. +      serial_device = argv[2];
  49049. +      serial_unit = atoi(argv[3]);
  49050. +      fprintf (stderr, "Using %s (unit %d)\n", serial_device ,serial_unit);
  49051. +      inhibit_window_system = 1; /* -dev => -nw */
  49052. +      argc -= 3; argv += 3;
  49053. +    }
  49054. +  /* Patch real argc, argv to hide arguments we used */
  49055. +  argv[0] = (*_argv)[0];
  49056. +  *_argv = argv;
  49057. +  *_argc = argc;
  49058. +
  49059. +  early_init_amiga_dump();
  49060. +  expand_path(argv[0], emacs_tool, EMACS_TOOL_SIZE);
  49061. +}
  49062. +
  49063. +void cleanup_amiga(void)
  49064. +{
  49065. +    cleanup_clipboard();
  49066. +    cleanup_amiga_tty();
  49067. +    if (IconBase) CloseLibrary(IconBase);
  49068. +    _MemCleanup();
  49069. +}
  49070. +
  49071. +void amiga_undump_reinit(void)
  49072. +/* Post-undump initialisation */
  49073. +{
  49074. +  extern struct WBStartup *_WBenchMsg;
  49075. +
  49076. +  emacs_malloc_init();
  49077. +  early_amiga_tty();
  49078. +  early_clipboard();
  49079. +
  49080. +  if (!onexit(cleanup_amiga)) _fail("Internal problem with onexit");
  49081. +
  49082. +  make_environ();
  49083. +  IconBase = OpenLibrary("icon.library", 0);
  49084. +  if (!IconBase) _fail("Need icon.library");
  49085. +  amiga_create_icons = _WBenchMsg != 0;
  49086. +
  49087. +  init_amiga_tty(); init_clipboard();
  49088. +}
  49089. +
  49090. +#undef main
  49091. +int
  49092. +main(int argc, char **argv, char **environ)
  49093. +/* Effect: Call emacs_main after doing some early amiga initialisation for emacs.
  49094. +*/
  49095. +{
  49096. +  /* This initialisation may steal some command line options */
  49097. +  amiga_early_init(&argc, &argv);
  49098. +  emacs_main(argc, argv, environ);
  49099. +}
  49100. +#undef abort
  49101. +void
  49102. +amiga_abort(char *f, int line)
  49103. +{
  49104. +    fprintf(stderr,"aborting: %s:%d\n", f, line);
  49105. +    abort(1);
  49106. +}
  49107. diff -ru --new-file baseline/fsf/emacs/src/amiga_sysdep_protos.h amiga/fsf/emacs/src/amiga_sysdep_protos.h
  49108. --- baseline/fsf/emacs/src/amiga_sysdep_protos.h    Wed Dec 31 17:00:00 1969
  49109. +++ amiga/fsf/emacs/src/amiga_sysdep_protos.h    Sun Oct 15 17:09:36 1995
  49110. @@ -0,0 +1,60 @@
  49111. +/* Prototypes for functions defined in
  49112. +amiga_sysdep.c
  49113. + */
  49114. +
  49115. +extern struct Library * IconBase;
  49116. +
  49117. +extern int amiga_process_stack_size;
  49118. +
  49119. +extern int amiga_initialized;
  49120. +
  49121. +extern int amiga_create_icons;
  49122. +
  49123. +extern enum exit_method amiga_fail_exit;
  49124. +
  49125. +extern int selecting;
  49126. +
  49127. +int set_exclusive_use(int );
  49128. +
  49129. +int sys_suspend(void);
  49130. +
  49131. +char * get_system_name(void);
  49132. +
  49133. +int flush_pending_output(int channel);
  49134. +
  49135. +int wait_for_termination(int );
  49136. +
  49137. +char * expand_path(char * , char * , int );
  49138. +
  49139. +int emacs_select(int , int * , int * , int * , struct timeval * );
  49140. +
  49141. +void no_memory(void);
  49142. +
  49143. +char * amiga_path(void);
  49144. +
  49145. +extern unsigned short __chip emacs_file_icon_data[2][22][4];
  49146. +
  49147. +extern struct Image __far emacs_file_icon_image;
  49148. +
  49149. +extern char * __far emacs_file_tooltypes[2];
  49150. +
  49151. +extern char __far emacs_tool[128];
  49152. +
  49153. +extern struct DiskObject __far emacs_file_icon_object;
  49154. +
  49155. +extern struct Lisp_Subr Samiga_put_icon;
  49156. +
  49157. +int Famiga_put_icon(int , int );
  49158. +
  49159. +int syms_of_amiga(void);
  49160. +
  49161. +void amiga_early_init(int * , char *** );
  49162. +
  49163. +void cleanup_amiga(void);
  49164. +
  49165. +void amiga_undump_reinit(void);
  49166. +
  49167. +int main(int , char ** , char ** );
  49168. +
  49169. +void amiga_abort(char * , int );
  49170. +
  49171. diff -ru --new-file baseline/fsf/emacs/src/amiga_term.c amiga/fsf/emacs/src/amiga_term.c
  49172. --- baseline/fsf/emacs/src/amiga_term.c    Wed Dec 31 17:00:00 1969
  49173. +++ amiga/fsf/emacs/src/amiga_term.c    Sun Oct 15 17:09:37 1995
  49174. @@ -0,0 +1,529 @@
  49175. +/* Amiga terminal control routines.
  49176. +   Copyright (C) 1985, 1986, 1987 Free Software Foundation, Inc.
  49177. +
  49178. +This file is part of GNU Emacs.
  49179. +
  49180. +GNU Emacs is free software; you can redistribute it and/or modify
  49181. +it under the terms of the GNU General Public License as published by
  49182. +the Free Software Foundation; either version 1, or (at your option)
  49183. +any later version.
  49184. +
  49185. +GNU Emacs is distributed in the hope that it will be useful,
  49186. +but WITHOUT ANY WARRANTY; without even the implied warranty of
  49187. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  49188. +GNU General Public License for more details.
  49189. +
  49190. +You should have received a copy of the GNU General Public License
  49191. +along with GNU Emacs; see the file COPYING.  If not, write to
  49192. +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  49193. +
  49194. +#include <stdio.h>
  49195. +#include <ctype.h>
  49196. +#include <sys/time.h>
  49197. +#include "config.h"
  49198. +#include "termhooks.h"
  49199. +#include "termchar.h"
  49200. +#include "termopts.h"
  49201. +#include "lisp.h"
  49202. +#include "frame.h"
  49203. +
  49204. +#ifdef USE_PROTOS
  49205. +#include "protos.h"
  49206. +#endif
  49207. +
  49208. +#ifdef GENPROTO
  49209. +extern void *Aframe_raise_lower; /* CHFIXME */
  49210. +#endif
  49211. +
  49212. +/* internal state */
  49213. +
  49214. +/* nonzero means supposed to write text in standout mode.  */
  49215. +static int Astandout_requested;
  49216. +
  49217. +static int Astandout_mode;    /* Nonzero when in standout mode.  */
  49218. +
  49219. +static char tens[100] = {
  49220. +    '0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
  49221. +    '1', '1', '1', '1', '1', '1', '1', '1', '1', '1',
  49222. +    '2', '2', '2', '2', '2', '2', '2', '2', '2', '2',
  49223. +    '3', '3', '3', '3', '3', '3', '3', '3', '3', '3',
  49224. +    '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',
  49225. +    '5', '5', '5', '5', '5', '5', '5', '5', '5', '5',
  49226. +    '6', '6', '6', '6', '6', '6', '6', '6', '6', '6',
  49227. +    '7', '7', '7', '7', '7', '7', '7', '7', '7', '7',
  49228. +    '8', '8', '8', '8', '8', '8', '8', '8', '8', '8',
  49229. +    '9', '9', '9', '9', '9', '9', '9', '9', '9', '9',
  49230. +};
  49231. +
  49232. +static char ones[100] = {
  49233. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  49234. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  49235. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  49236. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  49237. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  49238. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  49239. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  49240. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  49241. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  49242. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  49243. +};
  49244. +
  49245. +#define addnum(str, num) if (num < 100) \
  49246. +                             { *--str = ones[num]; *--str = tens[num]; } \
  49247. +                         else do { *--str = '0' + num % 10; num /= 10; } while (num != 0)
  49248. +
  49249. +static Abackground_highlight ();
  49250. +static Aturn_off_highlight ();
  49251. +
  49252. +
  49253. +/* Cursor motion stuff (from cm.c) */
  49254. +static int curX, curY;
  49255. +
  49256. +/* Move cursor to absolute position, specified origin 0 */
  49257. +
  49258. +static int
  49259. +Acursor_to (int row, int col)
  49260. +{
  49261. +  char buf[32], *pos = buf + 32;
  49262. +
  49263. +  if (curY == row && curX == col)
  49264. +    return;
  49265. +
  49266. +  curX = col; curY = row;
  49267. +  *--pos = 'H';
  49268. +  col = col + 1; row = row + 1;
  49269. +  addnum(pos, col);
  49270. +  *--pos = ';';
  49271. +  addnum(pos, row);
  49272. +  *--pos = (char) 0x9b;
  49273. +#ifdef MULTI_FRAME
  49274. +  CHFIXME check
  49275. +#endif
  49276. +  emacs_output(selected_frame, pos, buf + 32 - pos);
  49277. +  if (pos < buf) abort();
  49278. +}
  49279. +
  49280. +
  49281. +Aring_bell ()
  49282. +{
  49283. +#ifdef MULTI_FRAME
  49284. +  CHFIXME check
  49285. +#endif
  49286. +  emacs_output(selected_frame, "\07", 1);
  49287. +}
  49288. +
  49289. +Aset_terminal_modes ()
  49290. +{
  49291. +}
  49292. +
  49293. +Areset_terminal_modes ()
  49294. +{
  49295. +  Aturn_off_highlight ();
  49296. +}
  49297. +
  49298. +int
  49299. +Aupdate_begin (FRAME_PTR f)
  49300. +{
  49301. +  /* Hide cursor */
  49302. +  emacs_output(f, "\x9b\x30\x20\x70", 4);
  49303. +}
  49304. +
  49305. +int
  49306. +Aupdate_end (FRAME_PTR f)
  49307. +{
  49308. +  Abackground_highlight ();
  49309. +  Astandout_requested = 0;
  49310. +  emacs_output(f, "\x9b\x20\x70", 3); /* Show cursor */
  49311. +}
  49312. +
  49313. +
  49314. +/* Handle highlighting when TN_standout_width (termcap sg) is not specified.
  49315. +   In these terminals, output is affected by the value of standout
  49316. +   mode when the output is written.
  49317. +
  49318. +   These functions are called on all terminals, but do nothing
  49319. +   on terminals whose standout mode does not work that way.  */
  49320. +
  49321. +static Aturn_off_highlight ()
  49322. +{
  49323. +  if (Astandout_mode)
  49324. +    {
  49325. +      extern int background, foreground;      
  49326. +      extern int inverse_fill_pen, inverse_text_pen;
  49327. +      int b = background + 40, f = foreground + 30;
  49328. +      if(inverse_fill_pen < 8 && inverse_text_pen < 8)
  49329. +    {
  49330. +      char buf[32], *pos = buf + 32;
  49331. +      /* UnDo inverse fill */
  49332. +      *--pos = '\0';
  49333. +      *--pos = 'm';
  49334. +      addnum(pos, b);
  49335. +      *--pos = ';';
  49336. +      /* UnDo inverse text */
  49337. +      addnum(pos, f);
  49338. +      *--pos = (char) 0x9b;
  49339. +#ifdef MULTI_FRAME
  49340. +  CHFIXME check
  49341. +#endif
  49342. +      emacs_output(selected_frame, pos, buf + 32 - pos);
  49343. +    }
  49344. +      else
  49345. +    {
  49346. +      emacs_output(selected_frame, "\x9b""27m", 4);
  49347. +    }
  49348. +    }
  49349. +  Astandout_mode = 0;
  49350. +}
  49351. +
  49352. +static Aturn_on_highlight ()
  49353. +{
  49354. +  if (!Astandout_mode)
  49355. +    {
  49356. +      extern int inverse_fill_pen, inverse_text_pen;
  49357. +      int b = inverse_fill_pen + 40, f = inverse_text_pen + 30;
  49358. +      if(inverse_fill_pen < 8 && inverse_text_pen < 8)
  49359. +    {
  49360. +      char buf[32], *pos = buf + 32;
  49361. +      /* Do inverse fill */
  49362. +      *--pos = '\0';
  49363. +      *--pos = 'm';
  49364. +      addnum(pos, b);
  49365. +      *--pos = ';';
  49366. +
  49367. +      /* Do inverse text */
  49368. +      addnum(pos, f);
  49369. +      *--pos = (char) 0x9b;
  49370. +#ifdef MULTI_FRAME
  49371. +  CHFIXME check
  49372. +#endif
  49373. +      emacs_output(selected_frame, pos, buf + 32 - pos);
  49374. +    }
  49375. +      else
  49376. +    {
  49377. +      emacs_output(selected_frame, "\x9b\x37m", 3);
  49378. +    }
  49379. +    }
  49380. +  Astandout_mode = 1;
  49381. +}
  49382. +
  49383. +/* Set standout mode to the state it should be in for
  49384. +   empty space inside windows.  What this is,
  49385. +   depends on the user option inverse-video.  */
  49386. +
  49387. +static Abackground_highlight ()
  49388. +{
  49389. +  if (inverse_video)
  49390. +    Aturn_on_highlight ();
  49391. +  else
  49392. +    Aturn_off_highlight ();
  49393. +}
  49394. +
  49395. +/* Set standout mode to the mode specified for the text to be output.  */
  49396. +
  49397. +static
  49398. +Ahighlight_if_desired ()
  49399. +{
  49400. +  if (!inverse_video == !Astandout_requested)
  49401. +    Aturn_off_highlight ();
  49402. +  else
  49403. +    Aturn_on_highlight ();
  49404. +}
  49405. +
  49406. +/* External interface to control of standout mode.
  49407. +   Call this when about to modify line at position VPOS
  49408. +   and not change whether it is highlighted.  */
  49409. +
  49410. +Areassert_line_highlight (highlight, vpos)
  49411. +     int highlight;
  49412. +     int vpos;
  49413. +{
  49414. +  Astandout_requested = highlight;
  49415. +}
  49416. +
  49417. +/* Call this when about to modify line at position VPOS
  49418. +   and change whether it is highlighted.  */
  49419. +
  49420. +Achange_line_highlight (new_highlight, vpos, first_unused_hpos)
  49421. +     int new_highlight, vpos, first_unused_hpos;
  49422. +{
  49423. +  Astandout_requested = new_highlight;
  49424. +
  49425. +  cursor_to (vpos, 0);
  49426. +
  49427. +  Abackground_highlight ();
  49428. +  clear_end_of_line (first_unused_hpos);
  49429. +  reassert_line_highlight (new_highlight, curY);
  49430. +}
  49431. +
  49432. +/* Erase operations */
  49433. +
  49434. +/* clear from cursor to end of screen */
  49435. +Aclear_to_end ()
  49436. +{
  49437. +  Abackground_highlight ();
  49438. +#ifdef MULTI_FRAME
  49439. +  CHFIXME check
  49440. +#endif
  49441. +  emacs_output(selected_frame, "\x9bJ", 2);
  49442. +}
  49443. +
  49444. +/* Clear entire frame */
  49445. +
  49446. +static int
  49447. +Aclear_frame (FRAME_PTR f)
  49448. +{
  49449. +  Abackground_highlight ();
  49450. +  emacs_output(f, "\f", 1);
  49451. +  curX = curY = 0;
  49452. +}
  49453. +
  49454. +/* Clear to end of line, but do not clear any standout marker.
  49455. +   Assumes that the cursor is positioned at a character of real text,
  49456. +   which implies it cannot be before a standout marker
  49457. +   unless the marker has zero width.
  49458. +
  49459. +   Note that the cursor may be moved.  */
  49460. +
  49461. +Aclear_end_of_line (first_unused_hpos)
  49462. +     int first_unused_hpos;
  49463. +{
  49464. +  if (curX >= first_unused_hpos)
  49465. +    return;
  49466. +
  49467. +  Abackground_highlight ();
  49468. +#ifdef MULTI_FRAME
  49469. +  CHFIXME check
  49470. +#endif
  49471. +  emacs_output(selected_frame, "\x9bK", 2);
  49472. +}
  49473. +
  49474. +static int
  49475. +Aoutput_glyphs (string, len)
  49476. +     register GLYPH *string;
  49477. +     int len;
  49478. +{
  49479. +  Ahighlight_if_desired ();
  49480. +
  49481. +  curX += len;
  49482. +  emacs_output_glyphs(selected_frame, string, len);
  49483. +}
  49484. +
  49485. +/* If start is zero, insert blanks instead of a string at start */
  49486. +
  49487. +static int
  49488. +Ainsert_glyphs (start, len)
  49489. +     register GLYPH *start;
  49490. +     int len;
  49491. +{
  49492. +  char buf[32], *pos = buf + 32;
  49493. +
  49494. +  Ahighlight_if_desired ();
  49495. +
  49496. +  *--pos = '@';
  49497. +  addnum(pos, len);
  49498. +  *--pos = (char) 0x9b;
  49499. +#ifdef MULTI_FRAME
  49500. +  CHFIXME check
  49501. +#endif
  49502. +  emacs_output(selected_frame, pos, buf + 32 - pos);
  49503. +  if (pos < buf) abort();
  49504. +  if (start) emacs_output_glyphs(selected_frame, start, len);
  49505. +}
  49506. +
  49507. +static int
  49508. +Adelete_glyphs (n)
  49509. +     register int n;
  49510. +{
  49511. +  char buf[32], *pos = buf + 32;
  49512. +
  49513. +  *--pos = 'P';
  49514. +  addnum(pos, n);
  49515. +  *--pos = (char) 0x9b;
  49516. +  emacs_output(selected_frame, pos, buf + 32 - pos);
  49517. +  if (pos < buf) abort();
  49518. +}
  49519. +
  49520. +/* Insert N lines at vpos VPOS.  If N is negative, delete -N lines.  */
  49521. +
  49522. +Ains_del_lines (vpos, n)
  49523. +     int vpos, n;
  49524. +{
  49525. +  register int i = n > 0 ? n : -n;
  49526. +  char buf[32], *pos = buf + 32;
  49527. +
  49528. +  if (n > 0)
  49529. +    {
  49530. +      i = n;
  49531. +      *--pos = 'L';
  49532. +    }
  49533. +  else
  49534. +    {
  49535. +      i = -n;
  49536. +      *--pos = 'M';
  49537. +    }
  49538. +  if (vpos + i >= FRAME_HEIGHT (selected_frame)) return;
  49539. +
  49540. +  cursor_to (vpos, 0);
  49541. +  Abackground_highlight ();
  49542. +  addnum(pos, i);
  49543. +  *--pos = (char) 0x9b;
  49544. +#ifdef MULTI_FRAME
  49545. +  CHFIXME check
  49546. +#endif
  49547. +
  49548. +  emacs_output(selected_frame, pos, buf + 32 - pos);
  49549. +  if (pos < buf) abort();
  49550. +}
  49551. +
  49552. +#if 0 /* CHFIXME */
  49553. +Acalculate_costs (extra, costvec, ncostvec)
  49554. +     int extra;
  49555. +     int *costvec, *ncostvec;
  49556. +{
  49557. +  line_ins_del(selected_frame, 2, 40, extra, 0, costvec, ncostvec);
  49558. +}
  49559. +#endif
  49560. +
  49561. +Aset_terminal_window (int size)
  49562. +{
  49563. +}
  49564. +
  49565. +/* Return the current position of the mouse.
  49566. +
  49567. +   Set *f to the frame the mouse is in, or zero if the mouse is in no
  49568. +   Emacs frame.  If it is set to zero, all the other arguments are
  49569. +   garbage.
  49570. +
  49571. +   If the motion started in a scroll bar, set *bar_window to the
  49572. +   scroll bar's window, *part to the part the mouse is currently over,
  49573. +   *x to the position of the mouse along the scroll bar, and *y to the
  49574. +   overall length of the scroll bar.
  49575. +
  49576. +   Otherwise, set *bar_window to Qnil, and *x and *y to the column and
  49577. +   row of the character cell the mouse is over.
  49578. +
  49579. +   Set *time to the time the mouse was at the returned position.
  49580. +
  49581. +   This should clear mouse_moved until the next motion
  49582. +   event arrives.  */
  49583. +extern int mouse_moved;
  49584. +
  49585. +static void
  49586. +Amouse_position(FRAME_PTR *f,
  49587. +        Lisp_Object *bar_window,
  49588. +        enum scroll_bar_part *part,
  49589. +        Lisp_Object *x, Lisp_Object *y,
  49590. +        unsigned long *time)
  49591. +{
  49592. +    struct timeval tv;
  49593. +    int an_x, an_y;
  49594. +
  49595. +#ifdef MULTI_FRAME
  49596. +    CHFIXME
  49597. +#endif
  49598. +    get_mouse_char_pos(selected_frame, &an_x, &an_y);
  49599. +    if(x >= 0 && y >= 0) /* CHFIXME: always report ? */
  49600. +    {
  49601. +    *f = selected_frame; /* CHFIXME: ok for MULTI_FRAME ? */
  49602. +    *bar_window = Qnil;
  49603. +    *x = make_number (an_x);
  49604. +    *y = make_number (an_y);
  49605. +    gettimeofday (&tv, NULL);
  49606. +    *time = tv.tv_usec;
  49607. +    }
  49608. +    else
  49609. +    {
  49610. +    *f = NULL;
  49611. +    }
  49612. +    mouse_moved = 0;
  49613. +}
  49614. +/* Change from withdrawn state to mapped state,
  49615. +   or deiconify. */
  49616. +
  49617. +void
  49618. +x_make_frame_visible (FRAME_PTR f)
  49619. +{
  49620. +    /* CHFIXME: add deiconify call! */
  49621. +}
  49622. +
  49623. +amiga_term_init ()
  49624. +{
  49625. +  must_write_spaces = FALSE;
  49626. +  min_padding_speed = 0;
  49627. +  memory_below_frame = FALSE;     /* we don't remember what scrolls 
  49628. +                   off the bottom */
  49629. +  meta_key = 2; /* 1 if should obey 0200 bit in input chars as "Meta", 2 if should
  49630. +           keep 0200 bit in input chars.  0 to ignore the 0200 bit.  */
  49631. +
  49632. +  scroll_region_ok = TRUE; /* CHFIXME: test */         /* we'll scroll partial frames */
  49633. +  scroll_region_ok = FALSE;         /* we don\'t scroll partial frames */
  49634. +  line_ins_del_ok = TRUE;        /* CHFIXME: test */
  49635. +  line_ins_del_ok = FALSE;    /* much cleaner display when FALSE  -ch3/19/93. */
  49636. +  char_ins_del_ok = FALSE;
  49637. +  fast_clear_end_of_line = TRUE;
  49638. +  no_redraw_on_reenter = FALSE;
  49639. +
  49640. +  clear_frame_hook = Aclear_frame;
  49641. +  clear_end_of_line_hook = Aclear_end_of_line;
  49642. +  clear_to_end_hook = Aclear_to_end;
  49643. +  ins_del_lines_hook = Ains_del_lines;
  49644. +  change_line_highlight_hook = Achange_line_highlight;
  49645. +
  49646. +  insert_glyphs_hook = Ainsert_glyphs;
  49647. +  write_glyphs_hook = Aoutput_glyphs;
  49648. +  delete_glyphs_hook = Adelete_glyphs;
  49649. +
  49650. +  ring_bell_hook = Aring_bell;
  49651. +  reset_terminal_modes_hook = Areset_terminal_modes;
  49652. +  set_terminal_modes_hook = Aset_terminal_modes;
  49653. +  update_begin_hook = Aupdate_begin;
  49654. +  update_end_hook = Aupdate_end;
  49655. +  set_terminal_window_hook = Aset_terminal_window;
  49656. +  /* read_socket_hook ? */ /* CHFIXME */
  49657. +  /* frame_up_to_date_hook */
  49658. +  cursor_to_hook = Acursor_to;
  49659. +  reassert_line_highlight_hook = Areassert_line_highlight;
  49660. +  raw_cursor_to_hook = Acursor_to; /* CHFIXME, correct ? */
  49661. +  
  49662. +  mouse_position_hook = Amouse_position;
  49663. +  /*
  49664. +  frame_rehighlight_hook = XTframe_rehighlight;
  49665. +  */
  49666. +#ifdef GENPROTO
  49667. +  frame_raise_lower_hook = Aframe_raise_lower;
  49668. +#endif
  49669. +  /*
  49670. +  set_vertical_scroll_bar_hook = XTset_vertical_scroll_bar;
  49671. +  */
  49672. +#ifdef USE_SCROLL_BARS
  49673. +  condemn_scroll_bars_hook = Acondemn_scroll_bars;
  49674. +  redeem_scroll_bar_hook = Aredeem_scroll_bar;
  49675. +  judge_scroll_bars_hook = Ajudge_scroll_bars;
  49676. +#endif
  49677. +#if 0
  49678. +/*  dont_calculate_costs = 1; try to use it CHFIXME */
  49679. +#else
  49680. +  dont_calculate_costs = 0;
  49681. +#endif
  49682. +
  49683. +#if 0 /* CHFIXME */
  49684. +  calculate_costs_hook = Acalculate_costs;
  49685. +#endif
  49686. +  
  49687. +  /* Get screen size from system, or else from somewhere ...  */
  49688. +
  49689. +#ifdef MULTI_FRAME
  49690. +  you lose
  49691. +#endif
  49692. +  get_frame_size (&FRAME_WIDTH(selected_frame), &FRAME_HEIGHT(selected_frame));
  49693. +  /* Random defaults to avoid any problems */
  49694. +  if (FRAME_WIDTH(selected_frame) <= 0) FRAME_WIDTH(selected_frame) = 80;
  49695. +  if (FRAME_HEIGHT(selected_frame) <= 0) FRAME_HEIGHT(selected_frame) = 23;
  49696. +
  49697. +  init_baud_rate ();
  49698. +  FRAME_CAN_HAVE_SCROLL_BARS (selected_frame) = 0; /* CHFIXME */
  49699. +  FRAME_HAS_VERTICAL_SCROLL_BARS (selected_frame) = 0;
  49700. +
  49701. +
  49702. +  /* CHFIXME: move init glyphs stuff here ? */
  49703. +}
  49704. diff -ru --new-file baseline/fsf/emacs/src/amiga_term_protos.h amiga/fsf/emacs/src/amiga_term_protos.h
  49705. --- baseline/fsf/emacs/src/amiga_term_protos.h    Wed Dec 31 17:00:00 1969
  49706. +++ amiga/fsf/emacs/src/amiga_term_protos.h    Sun Oct 15 17:09:39 1995
  49707. @@ -0,0 +1,68 @@
  49708. +/* Prototypes for functions defined in
  49709. +amiga_term.c
  49710. + */
  49711. +
  49712. +extern int Astandout_requested;
  49713. +
  49714. +extern int Astandout_mode;
  49715. +
  49716. +extern char tens[100];
  49717. +
  49718. +extern char ones[100];
  49719. +
  49720. +extern int curX;
  49721. +
  49722. +extern int curY;
  49723. +
  49724. +int Acursor_to(int , int );
  49725. +
  49726. +int Aring_bell(void);
  49727. +
  49728. +int Aset_terminal_modes(void);
  49729. +
  49730. +int Areset_terminal_modes(void);
  49731. +
  49732. +int Aupdate_begin(int );
  49733. +
  49734. +int Aupdate_end(int );
  49735. +
  49736. +int Aturn_off_highlight(void);
  49737. +
  49738. +int Aturn_on_highlight(void);
  49739. +
  49740. +int Abackground_highlight(void);
  49741. +
  49742. +int Ahighlight_if_desired(void);
  49743. +
  49744. +int Areassert_line_highlight(int highlight,
  49745. +                             int vpos);
  49746. +
  49747. +int Achange_line_highlight(int new_highlight,
  49748. +                           int vpos,
  49749. +                           int first_unused_hpos);
  49750. +
  49751. +int Aclear_to_end(void);
  49752. +
  49753. +int Aclear_frame(int );
  49754. +
  49755. +int Aclear_end_of_line(int first_unused_hpos);
  49756. +
  49757. +int Aoutput_glyphs(register unsigned int * string,
  49758. +                   int len);
  49759. +
  49760. +int Ainsert_glyphs(register unsigned int * start,
  49761. +                   int len);
  49762. +
  49763. +int Adelete_glyphs(register int n);
  49764. +
  49765. +int Ains_del_lines(int vpos,
  49766. +                   int n);
  49767. +
  49768. +int Aset_terminal_window(int );
  49769. +
  49770. +void Amouse_position(int * , int * , enum scroll_bar_part * , int * , int * , unsigned long * );
  49771. +
  49772. +void x_make_frame_visible(int );
  49773. +
  49774. +int amiga_term_init(void);
  49775. +
  49776. diff -ru --new-file baseline/fsf/emacs/src/amiga_tty.c amiga/fsf/emacs/src/amiga_tty.c
  49777. --- baseline/fsf/emacs/src/amiga_tty.c    Wed Dec 31 17:00:00 1969
  49778. +++ amiga/fsf/emacs/src/amiga_tty.c    Sun Oct 15 17:09:40 1995
  49779. @@ -0,0 +1,425 @@
  49780. +#include "config.h"
  49781. +#include "lisp.h"
  49782. +#include "termchar.h"
  49783. +#include "frame.h"
  49784. +
  49785. +#include <stdio.h>
  49786. +#include <errno.h>
  49787. +#include <sys/time.h>
  49788. +#include <internal/files.h>
  49789. +#include <internal/vars.h>
  49790. +
  49791. +#undef LONGBITS
  49792. +
  49793. +#include <exec/types.h>
  49794. +#include <dos/dos.h>
  49795. +#include <proto/exec.h>
  49796. +
  49797. +#include "amiga.h"
  49798. +#include "termhooks.h"
  49799. +
  49800. +#ifdef USE_PROTOS
  49801. +#include "protos.h"
  49802. +#endif
  49803. +
  49804. +static int term_initialised;
  49805. +ULONG inputsig;
  49806. +
  49807. +/* A few tty system dependent routines unused on the Amiga */
  49808. +
  49809. +setpgrp_of_tty(int pid) {}
  49810. +init_sigio() {}
  49811. +reset_sigio() {}
  49812. +request_sigio() {}
  49813. +unrequest_sigio() {}
  49814. +
  49815. +/* Return nonzero if safe to use tabs in output.
  49816. +   At the time this is called, init_sys_modes has not been done yet.  */
  49817. +
  49818. +tabs_safe_p()
  49819. +{
  49820. +  if (noninteractive)
  49821. +    return 1;
  49822. +
  49823. +  return 0;            /* Not safe on Amiga !? */
  49824. +}
  49825. +
  49826. +/* Get terminal size from system.
  49827. +   Store number of lines into *heightp and width into *widthp.
  49828. +   If zero or a negative number is stored, the value is not valid.  */
  49829. +
  49830. +get_frame_size (widthp, heightp)
  49831. +     int *widthp, *heightp;
  49832. +{
  49833. +#ifdef MULTI_FRAME
  49834. +    CHFIXME selected_frame below ok?
  49835. +#endif
  49836. +    if (term_initialised && !inhibit_window_system)
  49837. +    amiga_get_window_size(selected_frame, widthp, heightp);
  49838. +    else /* We don't known what size the terminal is */
  49839. +    {
  49840. +    *widthp = 0;
  49841. +    *heightp = 0;
  49842. +    }
  49843. +}
  49844. +
  49845. +init_baud_rate ()
  49846. +{
  49847. +  if (noninteractive || !term_initialised) baud_rate = 1200;
  49848. +  else if (!inhibit_window_system) baud_rate = 38400;
  49849. +  else baud_rate = serial_baud_rate();
  49850. +}
  49851. +
  49852. +void check_intuition ()
  49853. +{
  49854. +    if (noninteractive || inhibit_window_system)
  49855. +        error ("You aren't using a window.");
  49856. +}
  49857. +
  49858. +#define TTYBUFSIZE 256        /* Same size as kbd_buffer */
  49859. +static char ttybuf[TTYBUFSIZE];
  49860. +
  49861. +#define NEW_KBD /* use event queue for sending key strokes to emacs */
  49862. +
  49863. +static int tty_count;
  49864. +#ifndef NEW_KBD
  49865. +#define TTYPUT(c) { if (tty_count < TTYBUFSIZE) ttybuf[tty_count++] = c; }
  49866. +#else
  49867. +#define TTYPUT(c) \
  49868. +{\
  49869. + event.kind = ascii_keystroke; \
  49870. + event.code = c; \
  49871. + event.modifiers = 0; \
  49872. + event.frame_or_window = selected_frame; \
  49873. + gettimeofday (&tv, NULL); \
  49874. + event.timestamp = tv.tv_usec; \
  49875. + kbd_buffer_store_event (&event); \
  49876. + set_mouse_event_pending(); /* wakeup emacs */ \
  49877. +}
  49878. +#define FTTYPUT(c, qual) \
  49879. +{\
  49880. + event.kind = non_ascii_keystroke; \
  49881. + event.code = c; \
  49882. + event.modifiers = qual; \
  49883. + event.frame_or_window = selected_frame; \
  49884. + gettimeofday (&tv, NULL); \
  49885. + event.timestamp = tv.tv_usec; \
  49886. + kbd_buffer_store_event (&event); \
  49887. + set_mouse_event_pending(); /* wakeup emacs */ \
  49888. +}
  49889. +#endif
  49890. +
  49891. +static int interrupt_char;
  49892. +
  49893. +/*
  49894. + * CHFIXME: will the event scheme break serial support? Add mode dependant code?
  49895. + */
  49896. +
  49897. +void enque(unsigned int c, int metaOrQual, int fkey)
  49898. +    
  49899. +/* place input keys in keyboard buffer
  49900. +
  49901. +was:
  49902. +   If high bit is set, precede character with ^Q (hack).
  49903. +   If meta is true, set high bit.
  49904. +   If both the high bit & meta are true, we have a problem. Ignore it.
  49905. +   If c == AMIGASEQ (256) enqueue the amiga sequence introducer (C-x C-^)
  49906. +now:
  49907. +   If meta is true, precede key with ESC if key isn\'t ESC.
  49908. +   Pass high bit as-is.
  49909. +   If c == AMIGASEQ (256) enqueue the amiga sequence introducer (C-x C-^)
  49910. +   if fkey is true meta contains full (emacs) qualifier mask and
  49911. +   c is a non_ascii_event
  49912. +*/
  49913. +{
  49914. +#ifdef NEW_KBD
  49915. +  struct input_event event;
  49916. +  struct timeval tv;
  49917. +#endif
  49918. +
  49919. +  if(fkey)
  49920. +  {
  49921. +      FTTYPUT(c, metaOrQual);
  49922. +  }
  49923. +  /* Hack CSI to be AMIGASEQ (to allow defining function keys, etc) */
  49924. +  else if (c == 0233 || c == AMIGASEQ)
  49925. +    {
  49926. +      TTYPUT('x' & 037);
  49927. +      TTYPUT('^' & 037);
  49928. +    }
  49929. +  else
  49930. +#if 0 /* test ordinary 8 bit */
  49931. +      if (c >= 0200)    /* Special character, precede with ^Q */
  49932. +    {
  49933. +      TTYPUT('q' & 037);
  49934. +      TTYPUT(c);
  49935. +    }
  49936. +  else
  49937. +#endif
  49938. +    {
  49939. +#if 0
  49940. +      if (meta) c |= 0200;
  49941. +#else
  49942. +      if(metaOrQual && c != 0x1B) TTYPUT(0x1B); /* ESC */
  49943. +#endif
  49944. +      if (c == interrupt_char) Signal((struct Task *)_us, SIGBREAKF_CTRL_C);
  49945. +      else TTYPUT(c);
  49946. +    }
  49947. +}
  49948. +
  49949. +int get_ttycount(void)
  49950. +{
  49951. +  return tty_count;
  49952. +}
  49953. +
  49954. +init_sys_modes ()
  49955. +{
  49956. +  extern int quit_char;
  49957. +
  49958. +  if (noninteractive)
  49959. +    return;
  49960. +
  49961. +  if (inhibit_window_system) clear_frame();
  49962. +
  49963. +  interrupt_char = quit_char;
  49964. +  if (!inhibit_window_system) setup_intchar(interrupt_char);
  49965. +}
  49966. +
  49967. +reset_sys_modes ()
  49968. +{
  49969. +  if (noninteractive)
  49970. +    {
  49971. +      fflush (stdout);
  49972. +      return;
  49973. +    }
  49974. +
  49975. +  cursor_to (FRAME_HEIGHT (selected_frame) - 1, 0);
  49976. +  clear_end_of_line (FRAME_WIDTH (selected_frame));
  49977. +  /* clear_end_of_line may move the cursor */
  49978. +  cursor_to (FRAME_HEIGHT (selected_frame) - 1, 0);
  49979. +}
  49980. +
  49981. +void amiga_consume_input(void)
  49982. +{
  49983. +  extern int this_command_key_count;
  49984. +  int force = this_command_key_count == 0;
  49985. +  /* If force is TRUE & some non-keyboard (eg mouse events) input is pending,
  49986. +     insert the appropriate magic sequence in the input stream */
  49987. +
  49988. +  if (term_initialised)
  49989. +    {
  49990. +#ifdef MULTI_FRAME
  49991. +    CHFIXME check
  49992. +#endif
  49993. +      if (!inhibit_window_system) check_window(selected_frame, force);
  49994. +      else check_serial(force);
  49995. +      check_arexx(force, TRUE);
  49996. +    }
  49997. +}
  49998. +
  49999. +discard_tty_input ()
  50000. +{
  50001. +  if (noninteractive)
  50002. +    return;
  50003. +
  50004. +  amiga_consume_input();
  50005. +  tty_count = 0;
  50006. +  chkabort();
  50007. +}
  50008. +
  50009. +/* Code for the fd describing the emacs input (terminal or window) */
  50010. +
  50011. +static ULONG __regargs ttyin_select_start(void *userinfo, int rd, int wr)
  50012. +{
  50013. +  if (!inhibit_window_system) force_window(selected_frame);
  50014. +
  50015. +  return (tty_count || mouse_event_pending()) ? -1 : inputsig;
  50016. +}
  50017. +
  50018. +static void __regargs ttyin_select_poll(void *userinfo, int *rd, int *wr)
  50019. +{
  50020. +  amiga_consume_input();
  50021. +  if (!tty_count && !mouse_event_pending()) *rd = 0;
  50022. +  /* CHFIXME: evt. change interface, select will signal read ok on rd but
  50023. +     that\'s no totally true (no chars) */
  50024. +}
  50025. +
  50026. +static int __regargs ttyin_read(void *userinfo, void *buffer, unsigned int length)
  50027. +{
  50028. +  amiga_consume_input();
  50029. +  if (length > tty_count) length = tty_count;
  50030. +  memcpy(buffer, ttybuf, length);
  50031. +  tty_count -= length;
  50032. +  if (tty_count) memmove(ttybuf, ttybuf + length, tty_count - length);
  50033. +  reset_mouse_event_pending();
  50034. +  
  50035. +  return (int)length;
  50036. +}
  50037. +
  50038. +static int __regargs ttyin_write(void *userinfo, void *buffer, unsigned int length)
  50039. +{
  50040. +  errno = EACCES;
  50041. +  return -1;
  50042. +}
  50043. +
  50044. +static int __regargs ttyin_lseek(void *userinfo, long rpos, int mode)
  50045. +{
  50046. +  errno = ESPIPE;
  50047. +  return -1;
  50048. +}
  50049. +
  50050. +static int __regargs ttyin_close(void *userinfo, int internal)
  50051. +{
  50052. +  return 0;
  50053. +}
  50054. +
  50055. +static int __regargs ttyin_ioctl(void *userinfo, int request, void *data)
  50056. +{
  50057. +  errno = EINVAL;
  50058. +  return -1;
  50059. +}
  50060. +
  50061. +#define CBUFSIZE 1024
  50062. +#undef fwrite
  50063. +#undef fflush
  50064. +
  50065. +char cbuffer[CBUFSIZE + 16], *cbuffer_pos;
  50066. +
  50067. +int emacs_fflush(FILE *f)
  50068. +{
  50069. +    if (noninteractive || f != stdout) return fflush(f);
  50070. +    else
  50071. +    {
  50072. +    int len;
  50073. +
  50074. +    len = cbuffer_pos - cbuffer;
  50075. +#ifdef MULTI_FRAME
  50076. +CHFIXME check
  50077. +#endif
  50078. +    if (term_initialised)
  50079. +        if (!inhibit_window_system) screen_puts(selected_frame, cbuffer, len);
  50080. +        else serial_puts(cbuffer, len);
  50081. +    if (termscript) fwrite (cbuffer, 1, len, termscript);
  50082. +    cbuffer_pos = cbuffer;
  50083. +
  50084. +    return 0;
  50085. +    }
  50086. +}
  50087. +
  50088. +void emacs_putchar(int c)
  50089. +{
  50090. +    if (cbuffer_pos >= cbuffer + CBUFSIZE) emacs_fflush(stdout);
  50091. +    *cbuffer_pos++ = c;
  50092. +}
  50093. +
  50094. +void emacs_output(FRAME_PTR f, char *str, int size)
  50095. +{
  50096. +    if (cbuffer_pos + size > cbuffer + CBUFSIZE) emacs_fflush(stdout);
  50097. +    if (size > CBUFSIZE)
  50098. +    {
  50099. +    if (term_initialised)
  50100. +        if (!inhibit_window_system) screen_puts(f, str, size);
  50101. +        else serial_puts(str, size);
  50102. +    }
  50103. +    else
  50104. +    {
  50105. +    memcpy(cbuffer_pos, str, size);
  50106. +    cbuffer_pos += size;
  50107. +    }
  50108. +}
  50109. +
  50110. +void emacs_output_glyphs(FRAME_PTR f, GLYPH *str, int size) /* CHFIXME: we ignore faces for now */
  50111. +{
  50112. +    if (cbuffer_pos + size > cbuffer + CBUFSIZE) emacs_fflush(stdout);
  50113. +    if (size > CBUFSIZE)
  50114. +    {
  50115. +    register int i = size, lsize;
  50116. +    register GLYPH *g = str;
  50117. +    
  50118. +    /* CHFIXME */
  50119. +    while(i)
  50120. +    {
  50121. +        if(i < CBUFSIZE)
  50122. +        lsize = i;
  50123. +        else
  50124. +        lsize = CBUFSIZE;
  50125. +        emacs_output_glyphs(f, g, lsize);
  50126. +        i -= lsize;
  50127. +        g += lsize;
  50128. +    }
  50129. +    }
  50130. +    else
  50131. +    {
  50132. +    register int i = size;
  50133. +    register char *s = cbuffer_pos;
  50134. +    register GLYPH *g = str;
  50135. +
  50136. +    while(i--)
  50137. +    {
  50138. +        *s++ = (*g++) & 0xff;
  50139. +    }
  50140. +    cbuffer_pos += size;
  50141. +    }
  50142. +}
  50143. +
  50144. +void emacs_fwrite(char *str, unsigned int nblocks, unsigned int len, FILE *f)
  50145. +{
  50146. +    if (noninteractive || f != stdout) fwrite (str, nblocks, len, f);
  50147. +    else
  50148. +    {
  50149. +    unsigned int size;
  50150. +
  50151. +    if (nblocks == 1) size = len; /* Emacs always uses 1 "block" */
  50152. +    else size = nblocks * len;
  50153. +#ifdef MULTI_FRAME
  50154. +    CHFIXME check
  50155. +#endif
  50156. +    emacs_output(selected_frame, str, size);
  50157. +    }
  50158. +}
  50159. +
  50160. +void syms_of_amiga_tty(void)
  50161. +{
  50162. +  syms_of_amiga_screen();
  50163. +  syms_of_amiga_rexx();
  50164. +}
  50165. +
  50166. +void init_amiga_tty()
  50167. +{
  50168. +  inputsig = 0;
  50169. +  term_initialised = FALSE;
  50170. +  init_amiga_rexx();
  50171. +}
  50172. +
  50173. +void cleanup_amiga_tty()
  50174. +{
  50175. +  cleanup_amiga_rexx();
  50176. +  cleanup_amiga_serial();
  50177. +  cleanup_amiga_screen();
  50178. +}
  50179. +
  50180. +void early_amiga_tty()
  50181. +{
  50182. +  cbuffer_pos = cbuffer;
  50183. +  tty_count = 0;
  50184. +}
  50185. +
  50186. +void amiga_term_open(void)
  50187. +{
  50188. +  inhibit_window_system ? init_amiga_serial() : init_amiga_screen();
  50189. +  close(0);
  50190. +  if (_alloc_fd((void *)1, FI_READ, ttyin_select_start, ttyin_select_poll, ttyin_read,
  50191. +        ttyin_write, ttyin_lseek, ttyin_close, ttyin_ioctl) == 0)
  50192. +    term_initialised = TRUE;
  50193. +  else _fail("Failed to initialise I/O, no memory ?");
  50194. +}
  50195. +
  50196. +/* Set the logical window size associated with descriptor FD
  50197. +   to HEIGHT and WIDTH.  This is used mainly with ptys.  */
  50198. +
  50199. +int
  50200. +set_window_size (fd, height, width)
  50201. +     int fd, height, width;
  50202. +{
  50203. +  return -1; /* CHFIXME: where used?, ok? */
  50204. +}
  50205. diff -ru --new-file baseline/fsf/emacs/src/amiga_tty_protos.h amiga/fsf/emacs/src/amiga_tty_protos.h
  50206. --- baseline/fsf/emacs/src/amiga_tty_protos.h    Wed Dec 31 17:00:00 1969
  50207. +++ amiga/fsf/emacs/src/amiga_tty_protos.h    Sun Oct 15 17:09:42 1995
  50208. @@ -0,0 +1,87 @@
  50209. +/* Prototypes for functions defined in
  50210. +amiga_tty.c
  50211. + */
  50212. +
  50213. +extern int term_initialised;
  50214. +
  50215. +extern unsigned long inputsig;
  50216. +
  50217. +int setpgrp_of_tty(int );
  50218. +
  50219. +int init_sigio(void);
  50220. +
  50221. +int reset_sigio(void);
  50222. +
  50223. +int request_sigio(void);
  50224. +
  50225. +int unrequest_sigio(void);
  50226. +
  50227. +int tabs_safe_p(void);
  50228. +
  50229. +int get_frame_size(int * widthp,
  50230. +                   int * heightp);
  50231. +
  50232. +int init_baud_rate(void);
  50233. +
  50234. +void check_intuition(void);
  50235. +
  50236. +extern char ttybuf[256];
  50237. +
  50238. +extern int tty_count;
  50239. +
  50240. +extern int interrupt_char;
  50241. +
  50242. +void enque(unsigned int , int , int );
  50243. +
  50244. +int get_ttycount(void);
  50245. +
  50246. +int init_sys_modes(void);
  50247. +
  50248. +int reset_sys_modes(void);
  50249. +
  50250. +void amiga_consume_input(void);
  50251. +
  50252. +int discard_tty_input(void);
  50253. +
  50254. +unsigned long __regargs ttyin_select_start(void * , int , int );
  50255. +
  50256. +void __regargs ttyin_select_poll(void * , int * , int * );
  50257. +
  50258. +int __regargs ttyin_read(void * , void * , unsigned int );
  50259. +
  50260. +int __regargs ttyin_write(void * , void * , unsigned int );
  50261. +
  50262. +int __regargs ttyin_lseek(void * , long , int );
  50263. +
  50264. +int __regargs ttyin_close(void * , int );
  50265. +
  50266. +int __regargs ttyin_ioctl(void * , int , void * );
  50267. +
  50268. +extern char cbuffer[1040];
  50269. +
  50270. +extern char * cbuffer_pos;
  50271. +
  50272. +int emacs_fflush(struct __iobuf * );
  50273. +
  50274. +void emacs_putchar(int );
  50275. +
  50276. +void emacs_output(int , char * , int );
  50277. +
  50278. +void emacs_output_glyphs(int , unsigned int * , int );
  50279. +
  50280. +void emacs_fwrite(char * , unsigned int , unsigned int , struct __iobuf * );
  50281. +
  50282. +void syms_of_amiga_tty(void);
  50283. +
  50284. +void init_amiga_tty(void);
  50285. +
  50286. +void cleanup_amiga_tty(void);
  50287. +
  50288. +void early_amiga_tty(void);
  50289. +
  50290. +void amiga_term_open(void);
  50291. +
  50292. +int set_window_size(int fd,
  50293. +                    int height,
  50294. +                    int width);
  50295. +
  50296. diff -ru --new-file baseline/fsf/emacs/src/amiga_xmenu.c amiga/fsf/emacs/src/amiga_xmenu.c
  50297. --- baseline/fsf/emacs/src/amiga_xmenu.c    Wed Dec 31 17:00:00 1969
  50298. +++ amiga/fsf/emacs/src/amiga_xmenu.c    Sun Oct 15 17:09:44 1995
  50299. @@ -0,0 +1,956 @@
  50300. +/* Additional Amiga Menu Bar stuff, should be moved to amiga_menu 
  50301. +   Copyright (C) 1986, 1988, 1993, 1994 Free Software Foundation, Inc.
  50302. +
  50303. +This file is part of GNU Emacs.
  50304. +
  50305. +GNU Emacs is free software; you can redistribute it and/or modify
  50306. +it under the terms of the GNU General Public License as published by
  50307. +the Free Software Foundation; either version 2, or (at your option)
  50308. +any later version.
  50309. +
  50310. +GNU Emacs is distributed in the hope that it will be useful,
  50311. +but WITHOUT ANY WARRANTY; without even the implied warranty of
  50312. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  50313. +GNU General Public License for more details.
  50314. +
  50315. +You should have received a copy of the GNU General Public License
  50316. +along with GNU Emacs; see the file COPYING.  If not, write to
  50317. +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  50318. +
  50319. +#include <exec/types.h>
  50320. +#include <libraries/gadtools.h>
  50321. +#include <intuition/intuition.h>
  50322. +#include <proto/exec.h>
  50323. +#include <proto/dos.h>
  50324. +#include <proto/gadtools.h>
  50325. +#include <proto/intuition.h>
  50326. +#include "config.h"
  50327. +#include "lisp.h"
  50328. +#include "frame.h"
  50329. +#include "amiga.h"
  50330. +
  50331. +#ifdef USE_PROTOS
  50332. +#include "protos.h"
  50333. +#endif
  50334. +
  50335. +extern Lisp_Object Qmenu_enable;
  50336. +#if 0
  50337. +extern Lisp_Object Qmenu_bar;
  50338. +#endif
  50339. +
  50340. +/* This holds a Lisp vector that holds the results of decoding
  50341. +   the keymaps or alist-of-alists that specify a menu.
  50342. +
  50343. +   It describes the panes and items within the panes.
  50344. +
  50345. +   Each pane is described by 3 elements in the vector:
  50346. +   t, the pane name, the pane's prefix key.
  50347. +   Then follow the pane's items, with 4 elements per item:
  50348. +   the item string, the enable flag, the item's value,
  50349. +   and the equivalent keyboard key's description string.
  50350. +
  50351. +   In some cases, multiple levels of menus may be described.
  50352. +   A single vector slot containing nil indicates the start of a submenu.
  50353. +   A single vector slot containing lambda indicates the end of a submenu.
  50354. +   The submenu follows a menu item which is the way to reach the submenu.
  50355. +
  50356. +   A single vector slot containing quote indicates that the
  50357. +   following items should appear on the right of a dialog box.
  50358. +
  50359. +   Using a Lisp vector to hold this information while we decode it
  50360. +   takes care of protecting all the data from GC.  */
  50361. +
  50362. +#define MENU_ITEMS_PANE_NAME 1
  50363. +#define MENU_ITEMS_PANE_PREFIX 2
  50364. +#define MENU_ITEMS_PANE_LENGTH 3
  50365. +
  50366. +#define MENU_ITEMS_ITEM_NAME 0
  50367. +#define MENU_ITEMS_ITEM_ENABLE 1
  50368. +#define MENU_ITEMS_ITEM_VALUE 2
  50369. +#define MENU_ITEMS_ITEM_EQUIV_KEY 3
  50370. +#define MENU_ITEMS_ITEM_LENGTH 4
  50371. +
  50372. +#ifdef MULTI_FRAME
  50373. +you lose! /* each frame needs one of these or it must be copied */
  50374. +#else
  50375. +static Lisp_Object menu_items;
  50376. +#endif
  50377. +
  50378. +/* Number of slots currently allocated in menu_items.  */
  50379. +static int menu_items_allocated;
  50380. +
  50381. +/* This is (<number of menus> + <number of items> + <number of subitems>) */
  50382. +static int menu_items_num_items;
  50383. +
  50384. +/* This is the index in menu_items of the first empty slot.  */
  50385. +static int menu_items_used;
  50386. +
  50387. +/* The number of panes currently recorded in menu_items,
  50388. +   excluding those within submenus.  */
  50389. +static int menu_items_n_panes;
  50390. +
  50391. +/* Current depth within submenus.  */
  50392. +static int menu_items_submenu_depth;
  50393. +
  50394. +/* sum of length of strings used in the current menu */
  50395. +static int menu_items_string_len;
  50396. +
  50397. +/* Initialize the menu_items structure if we haven't already done so.
  50398. +   Also mark it as currently empty.  */
  50399. +
  50400. +static void
  50401. +init_menu_items ()
  50402. +{
  50403. +  if (NILP (menu_items))
  50404. +    {
  50405. +      menu_items_allocated = 60;
  50406. +      menu_items = Fmake_vector (make_number (menu_items_allocated), Qnil);
  50407. +    }
  50408. +
  50409. +  menu_items_used = 0;
  50410. +  menu_items_n_panes = 0;
  50411. +  menu_items_submenu_depth = 0;
  50412. +  menu_items_string_len = 0;
  50413. +  menu_items_num_items = 0;
  50414. +}
  50415. +
  50416. +/* Call at the end of generating the data in menu_items.
  50417. +   This fills in the number of items in the last pane.  */
  50418. +
  50419. +static void
  50420. +finish_menu_items ()
  50421. +{
  50422. +}
  50423. +
  50424. +/* Call when finished using the data for the current menu
  50425. +   in menu_items.  */
  50426. +
  50427. +static void
  50428. +discard_menu_items ()
  50429. +{
  50430. +  /* Free the structure if it is especially large.
  50431. +     Otherwise, hold on to it, to save time.  */
  50432. +  if (menu_items_allocated > 200)
  50433. +    {
  50434. +      menu_items = Qnil;
  50435. +      menu_items_allocated = 0;
  50436. +    }
  50437. +}
  50438. +
  50439. +/* Make the menu_items vector twice as large.  */
  50440. +
  50441. +static void
  50442. +grow_menu_items ()
  50443. +{
  50444. +  Lisp_Object old;
  50445. +  int old_size = menu_items_allocated;
  50446. +  old = menu_items;
  50447. +
  50448. +  menu_items_allocated *= 2;
  50449. +  menu_items = Fmake_vector (make_number (menu_items_allocated), Qnil);
  50450. +  bcopy (XVECTOR (old)->contents, XVECTOR (menu_items)->contents,
  50451. +     old_size * sizeof (Lisp_Object));
  50452. +}
  50453. +
  50454. +/* Begin a submenu.  */
  50455. +
  50456. +static void
  50457. +push_submenu_start ()
  50458. +{
  50459. +  if (menu_items_used + 1 > menu_items_allocated)
  50460. +    grow_menu_items ();
  50461. +
  50462. +  XVECTOR (menu_items)->contents[menu_items_used++] = Qnil;
  50463. +  menu_items_submenu_depth++;
  50464. +}
  50465. +
  50466. +/* End a submenu.  */
  50467. +
  50468. +static void
  50469. +push_submenu_end ()
  50470. +{
  50471. +  if (menu_items_used + 1 > menu_items_allocated)
  50472. +    grow_menu_items ();
  50473. +
  50474. +  XVECTOR (menu_items)->contents[menu_items_used++] = Qlambda;
  50475. +  menu_items_submenu_depth--;
  50476. +}
  50477. +
  50478. +/* Indicate boundary between left and right.  */
  50479. +
  50480. +static void
  50481. +push_left_right_boundary ()
  50482. +{
  50483. +  if (menu_items_used + 1 > menu_items_allocated)
  50484. +    grow_menu_items ();
  50485. +
  50486. +  XVECTOR (menu_items)->contents[menu_items_used++] = Qquote;
  50487. +}
  50488. +
  50489. +/* Start a new menu pane in menu_items..
  50490. +   NAME is the pane name.  PREFIX_VEC is a prefix key for this pane.
  50491. +   NAME_LEN is the length of the name in characters.
  50492. + */
  50493. +
  50494. +static void
  50495. +push_menu_pane (Lisp_Object name, Lisp_Object prefix_vec, int name_len)
  50496. +{
  50497. +  if (menu_items_used + MENU_ITEMS_PANE_LENGTH > menu_items_allocated)
  50498. +    grow_menu_items ();
  50499. +
  50500. +  if (menu_items_submenu_depth == 0)
  50501. +    menu_items_n_panes++;
  50502. +  XVECTOR (menu_items)->contents[menu_items_used++] = Qt;
  50503. +  XVECTOR (menu_items)->contents[menu_items_used++] = name;
  50504. +  XVECTOR (menu_items)->contents[menu_items_used++] = prefix_vec;
  50505. +  menu_items_string_len += name_len + 1;
  50506. +  menu_items_num_items++;
  50507. +}
  50508. +
  50509. +/* Push one menu item into the current pane.
  50510. +   NAME is the string to display.  ENABLE if non-nil means
  50511. +   this item can be selected.  KEY is the key generated by
  50512. +   choosing this item.  EQUIV is the textual description
  50513. +   of the keyboard equivalent for this item (or nil if none).
  50514. +   NAME_LEN is the length of the name in characters.
  50515. + */
  50516. +
  50517. +static void
  50518. +push_menu_item (Lisp_Object name, Lisp_Object enable,
  50519. +        Lisp_Object key, Lisp_Object equiv,
  50520. +        int name_len)
  50521. +{
  50522. +  if (menu_items_used + MENU_ITEMS_ITEM_LENGTH > menu_items_allocated)
  50523. +    grow_menu_items ();
  50524. +
  50525. +  XVECTOR (menu_items)->contents[menu_items_used++] = name;
  50526. +  XVECTOR (menu_items)->contents[menu_items_used++] = enable;
  50527. +  XVECTOR (menu_items)->contents[menu_items_used++] = key;
  50528. +  XVECTOR (menu_items)->contents[menu_items_used++] = equiv;
  50529. +  menu_items_string_len += name_len + 1;
  50530. +  menu_items_num_items++;
  50531. +}
  50532. +
  50533. +/* Figure out the current keyboard equivalent of a menu item ITEM1.
  50534. +   The item string for menu display should be ITEM_STRING.
  50535. +   Store the equivalent keyboard key sequence's
  50536. +   textual description into *DESCRIP_PTR.
  50537. +   Also cache them in the item itself.
  50538. +   Return the real definition to execute.  */
  50539. +
  50540. +static Lisp_Object
  50541. +menu_item_equiv_key (item_string, item1, descrip_ptr)
  50542. +     Lisp_Object item_string;
  50543. +     Lisp_Object item1;
  50544. +     Lisp_Object *descrip_ptr;
  50545. +{
  50546. +  /* This is the real definition--the function to run.  */
  50547. +  Lisp_Object def;
  50548. +  /* This is the sublist that records cached equiv key data
  50549. +     so we can save time.  */
  50550. +  Lisp_Object cachelist;
  50551. +  /* These are the saved equivalent keyboard key sequence
  50552. +     and its key-description.  */
  50553. +  Lisp_Object savedkey, descrip;
  50554. +  Lisp_Object def1;
  50555. +  int changed = 0;
  50556. +
  50557. +  /* If a help string follows the item string, skip it.  */
  50558. +  if (CONSP (XCONS (item1)->cdr)
  50559. +      && STRINGP (XCONS (XCONS (item1)->cdr)->car))
  50560. +    item1 = XCONS (item1)->cdr;
  50561. +
  50562. +  def = Fcdr (item1);
  50563. +
  50564. +  /* Get out the saved equivalent-keyboard-key info.  */
  50565. +  cachelist = savedkey = descrip = Qnil;
  50566. +  if (CONSP (def) && CONSP (XCONS (def)->car)
  50567. +      && (NILP (XCONS (XCONS (def)->car)->car)
  50568. +      || VECTORP (XCONS (XCONS (def)->car)->car)))
  50569. +    {
  50570. +      cachelist = XCONS (def)->car;
  50571. +      def = XCONS (def)->cdr;
  50572. +      savedkey = XCONS (cachelist)->car;
  50573. +      descrip = XCONS (cachelist)->cdr;
  50574. +    }
  50575. +
  50576. +  /* Is it still valid?  */
  50577. +  def1 = Qnil;
  50578. +  if (!NILP (savedkey))
  50579. +    def1 = Fkey_binding (savedkey, Qnil);
  50580. +  /* If not, update it.  */
  50581. +  if (! EQ (def1, def)
  50582. +      /* If something had no key binding before, don't recheck it--
  50583. +     doing that takes too much time and makes menus too slow.  */
  50584. +      && !(!NILP (cachelist) && NILP (savedkey)))
  50585. +    {
  50586. +      changed = 1;
  50587. +      descrip = Qnil;
  50588. +      savedkey = Fwhere_is_internal (def, Qnil, Qt, Qnil);
  50589. +      /* If the command is an alias for another
  50590. +     (such as easymenu.el and lmenu.el set it up),
  50591. +     see if the original command name has equivalent keys.  */
  50592. +      if (SYMBOLP (def) && SYMBOLP (XSYMBOL (def)->function))
  50593. +    savedkey = Fwhere_is_internal (XSYMBOL (def)->function,
  50594. +                       Qnil, Qt, Qnil);
  50595. +
  50596. +      if (VECTORP (savedkey)
  50597. +      && EQ (XVECTOR (savedkey)->contents[0], Qmenu_bar))
  50598. +    savedkey = Qnil;
  50599. +      if (!NILP (savedkey))
  50600. +    {
  50601. +      descrip = Fkey_description (savedkey);
  50602. +      descrip = concat2 (make_string ("  (", 3), descrip);
  50603. +      descrip = concat2 (descrip, make_string (")", 1));
  50604. +    }
  50605. +    }
  50606. +
  50607. +  /* Cache the data we just got in a sublist of the menu binding.  */
  50608. +  if (NILP (cachelist))
  50609. +    XCONS (item1)->cdr = Fcons (Fcons (savedkey, descrip), def);
  50610. +  else if (changed)
  50611. +    {
  50612. +      XCONS (cachelist)->car = savedkey;
  50613. +      XCONS (cachelist)->cdr = descrip;
  50614. +    }
  50615. +
  50616. +  *descrip_ptr = descrip;
  50617. +  return def;
  50618. +}
  50619. +
  50620. +/* This is used as the handler when calling internal_condition_case_1.  */
  50621. +
  50622. +static Lisp_Object
  50623. +menu_item_enabled_p_1 (arg)
  50624. +     Lisp_Object arg;
  50625. +{
  50626. +  return Qnil;
  50627. +}
  50628. +
  50629. +/* Return non-nil if the command DEF is enabled when used as a menu item.
  50630. +   This is based on looking for a menu-enable property.
  50631. +   If NOTREAL is set, don't bother really computing this.  */
  50632. +
  50633. +static Lisp_Object
  50634. +menu_item_enabled_p (def, notreal)
  50635. +     Lisp_Object def;
  50636. +{
  50637. +  Lisp_Object enabled, tem;
  50638. +
  50639. +  enabled = Qt;
  50640. +  if (notreal)
  50641. +    return enabled;
  50642. +  if (XTYPE (def) == Lisp_Symbol)
  50643. +    {
  50644. +      /* No property, or nil, means enable.
  50645. +     Otherwise, enable if value is not nil.  */
  50646. +      tem = Fget (def, Qmenu_enable);
  50647. +      if (!NILP (tem))
  50648. +    /* (condition-case nil (eval tem)
  50649. +       (error nil))  */
  50650. +    enabled = internal_condition_case_1 (Feval, tem, Qerror,
  50651. +                         menu_item_enabled_p_1);
  50652. +    }
  50653. +  return enabled;
  50654. +}
  50655. +
  50656. +
  50657. +void make_amiga_menu_1(FRAME_PTR f,int doprint);
  50658. +void make_menu_items(FRAME_PTR f, Lisp_Object menu);
  50659. +
  50660. +void
  50661. +make_amiga_menu(FRAME_PTR f, Lisp_Object menu)
  50662. +{
  50663. +    make_menu_items(f, menu);
  50664. +    if(menu_items_used)
  50665. +    {
  50666. +    make_amiga_menu_1(f, 0);
  50667. +    }
  50668. +}
  50669. +
  50670. +extern struct Library *GadToolsBase;
  50671. +
  50672. +void
  50673. +print_amiga_menu(FRAME_PTR f)
  50674. +{
  50675. +    make_amiga_menu_1(f,1);
  50676. +}
  50677. +
  50678. +void
  50679. +make_amiga_menu_1(FRAME_PTR f, int doprint)
  50680. +{
  50681. +    struct NewMenu *menudata, *mkm;
  50682. +    char *strdata;
  50683. +    int i, t, first_pane = 0, submenu_depth = 0;
  50684. +    int level = 0;
  50685. +
  50686. +    if(!doprint)
  50687. +    {
  50688. +    check_intuition();
  50689. +    suspend_menus(f);
  50690. +
  50691. +    if (EMACS_MENU(f)) Famiga_delete_menus(f);
  50692. +        /* Now create menu structure */
  50693. +    menudata = (struct NewMenu *)alloca(sizeof(struct NewMenu) * (menu_items_num_items + 1));
  50694. +    EMACS_MENU_STRINGS(f) = strdata = (char *)xmalloc(menu_items_string_len);
  50695. +    mkm = menudata;
  50696. +    }
  50697. +
  50698. +  /* Loop over all panes and items, print/creating menu structure.  */
  50699. +  i = 0;
  50700. +  while (i < menu_items_used)
  50701. +    {
  50702. +    /* CHFIXME */
  50703. +    if(mkm >= menudata+menu_items_num_items + 1)
  50704. +        abort();
  50705. +    
  50706. +      if (EQ (XVECTOR (menu_items)->contents[i], Qnil))
  50707. +    {
  50708. +        submenu_depth++;
  50709. +        first_pane = 1;
  50710. +        i++;
  50711. +    }
  50712. +      else if (EQ (XVECTOR (menu_items)->contents[i], Qlambda))
  50713. +    {
  50714. +        --submenu_depth;
  50715. +      first_pane = 0;
  50716. +      i++;
  50717. +    }
  50718. +      else if (EQ (XVECTOR (menu_items)->contents[i], Qt)
  50719. +           && submenu_depth != 0)
  50720. +    i += MENU_ITEMS_PANE_LENGTH;
  50721. +      /* Ignore a nil in the item list.
  50722. +     It\'s meaningful only for dialog boxes.  */
  50723. +      else if (EQ (XVECTOR (menu_items)->contents[i], Qquote))
  50724. +    i += 1;
  50725. +      else if (EQ (XVECTOR (menu_items)->contents[i], Qt))
  50726. +    {
  50727. +      /* Create a new pane.  */
  50728. +      Lisp_Object pane_name, prefix;
  50729. +      char *pane_string;
  50730. +      int len;
  50731. +      
  50732. +      pane_name = XVECTOR (menu_items)->contents[i + MENU_ITEMS_PANE_NAME];
  50733. +      prefix = XVECTOR (menu_items)->contents[i + MENU_ITEMS_PANE_PREFIX];
  50734. +      pane_string = (NILP (pane_name)
  50735. +             ? "" : (char *) XSTRING (pane_name)->data);
  50736. +      /* If there is just one top-level pane, put all its items directly
  50737. +         under the top-level menu.  */
  50738. +      if (menu_items_n_panes == 1)
  50739. +        pane_string = "";
  50740. +
  50741. +      /* If the pane has a meaningful name,
  50742. +         make the pane a top-level menu item
  50743. +         with its items as a submenu beneath it.  */
  50744. +      len = strlen(pane_string);
  50745. +      if (len)
  50746. +      {
  50747. +          if(doprint)
  50748. +          {
  50749. +          for(t = 0; t < submenu_depth; t++)
  50750. +            fprintf(stderr,"    ");
  50751. +        
  50752. +          fprintf(stderr,"pane = \"%s\"\n", pane_string);
  50753. +          }
  50754. +          else
  50755. +          {
  50756. +          mkm->nm_Type = NM_TITLE;
  50757. +          strncpy(strdata, pane_string, len+1);
  50758. +          mkm->nm_Label = strdata;
  50759. +          strdata += len + 1;
  50760. +          mkm->nm_CommKey = 0;
  50761. +          mkm->nm_Flags = 0;
  50762. +          mkm->nm_MutualExclude = 0;
  50763. +          mkm++;
  50764. +          }
  50765. +#if 0
  50766. +          if (keymaps && !NILP (prefix))
  50767. +        wv->name++;
  50768. +#endif
  50769. +#if 0
  50770. +          wv->value = 0;
  50771. +          wv->enabled = 1;
  50772. +#endif
  50773. +        }
  50774. +      else if (first_pane)
  50775. +        {
  50776. +        }
  50777. +      first_pane = 0;
  50778. +      i += MENU_ITEMS_PANE_LENGTH;
  50779. +    }
  50780. +      else
  50781. +    {
  50782. +      /* Create a new item within current pane.  */
  50783. +      Lisp_Object item_name, enable, descrip, key;
  50784. +      char *key_string;
  50785. +      int len;
  50786. +      
  50787. +      item_name = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_NAME];
  50788. +      enable = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_ENABLE];
  50789. +      /* The key generated by choosing this item */
  50790. +      key
  50791. +        = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_VALUE];
  50792. +      descrip
  50793. +        = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_EQUIV_KEY];
  50794. +
  50795. +      if(NILP(key))
  50796. +          key_string = "<nokey>";
  50797. +      else if(XTYPE(key) == Lisp_String)
  50798. +          key_string = (char *) XSTRING (key)->data;
  50799. +      else if(XTYPE(key) == Lisp_Symbol)
  50800. +          key_string = (char *) XSYMBOL (key)->name->data;
  50801. +      else
  50802. +          key_string = "<unknown type>";
  50803. +          
  50804. +      if(doprint)
  50805. +      {
  50806. +          for(t = 0; t < submenu_depth+1; t++)
  50807. +          fprintf(stderr,"    ");
  50808. +      
  50809. +
  50810. +          fprintf(stderr,"name = \"%s\", key = [%s] %s\n",
  50811. +              (char *) XSTRING (item_name)->data,
  50812. +              key_string,
  50813. +          (NILP(enable)) ? "<disabled>" : "<enabled>"
  50814. +              );
  50815. +      }
  50816. +      else
  50817. +      {
  50818. +          len = XSTRING (item_name)->size;
  50819. +          if(submenu_depth == 0)
  50820. +          {
  50821. +          mkm->nm_Type = NM_ITEM;
  50822. +          }
  50823. +          else if(submenu_depth == 1)
  50824. +          {
  50825. +          mkm->nm_Type = NM_SUB;
  50826. +          }
  50827. +          else
  50828. +          abort();
  50829. +          
  50830. +          strncpy(strdata, XSTRING (item_name)->data, len+1);
  50831. +          mkm->nm_Label = strdata;
  50832. +          strdata += len + 1;
  50833. +          mkm->nm_CommKey = 0;
  50834. +          mkm->nm_Flags = 0;
  50835. +          mkm->nm_MutualExclude = 0;
  50836. +          if(NILP(enable))
  50837. +          mkm->nm_Flags |= NM_ITEMDISABLED;
  50838. +          mkm++;
  50839. +      }
  50840. +#if 0
  50841. +      wv->value = 0;
  50842. +      wv->call_data = (void *) &XVECTOR (menu_items)->contents[i];
  50843. +#endif
  50844. +
  50845. +      i += MENU_ITEMS_ITEM_LENGTH;
  50846. +    }
  50847. +    }
  50848. +    mkm->nm_Type = NM_END;
  50849. +    mkm->nm_Label = 0;
  50850. +    mkm->nm_CommKey = 0;
  50851. +    mkm->nm_Flags = 0;
  50852. +    mkm->nm_MutualExclude = 0;
  50853. +    if (!(EMACS_MENU(f) = CreateMenus(menudata, TAG_END)))
  50854. +    {
  50855. +    free(EMACS_MENU_STRINGS(f));
  50856. +    EMACS_MENU_STRINGS(f) = 0;
  50857. +#if 0
  50858. +    error("Menu couldn't be created"); /* CHFIXME: how to do it for this kind of function? */
  50859. +#else
  50860. +    fprintf(stderr,"Menu couldn't be created");
  50861. +#endif
  50862. +    
  50863. +    }
  50864. +    if (!resume_menus(f))
  50865. +#if 0
  50866. +    error("Menu couldn't be layed out");
  50867. +#else
  50868. +    fprintf(stderr, "Menu couldn't be layed out");
  50869. +#endif
  50870. +}
  50871. +
  50872. +void
  50873. +make_menu_items(FRAME_PTR f, Lisp_Object menu)
  50874. +{
  50875. +  Lisp_Object Result;
  50876. +  int i;
  50877. +
  50878. +  init_menu_items(); /* CHFIXME */
  50879. +
  50880. +  for (i = 0; i < XVECTOR (menu)->size;i += 3)
  50881. +    {
  50882. +      Lisp_Object string;
  50883. +      Lisp_Object Key, enable, descrip;
  50884. +      Lisp_Object binding;
  50885. +
  50886. +      Key = XVECTOR (menu)->contents[i];
  50887. +      string = XVECTOR (menu)->contents[i + 1];
  50888. +      binding = XVECTOR (menu)->contents[i + 2];
  50889. +      if(NILP(string))
  50890. +    break;
  50891. +
  50892. +      make_menu_items_1(Key, string, binding);
  50893. +    }
  50894. +}
  50895. +
  50896. +/* CHFIXME */
  50897. +#define Check(obj, type) if(XTYPE(obj) != type)\
  50898. +{\
  50899. + fprintf(stderr,"make_menu_items_1: Unknown structure (line %d, type %d)\n", __LINE__,XTYPE(obj)); \
  50900. + break;\
  50901. +}
  50902. +
  50903. +Lisp_Object
  50904. +make_menu_items_1(Lisp_Object prefix, Lisp_Object pane_name, Lisp_Object binding)
  50905. +{
  50906. +  Lisp_Object Result;
  50907. +  int i;
  50908. +
  50909. +  Lisp_Object pending_maps;
  50910. +  struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
  50911. +  Lisp_Object litems, litem;
  50912. +  Lisp_Object lsubitems, lsubitem;
  50913. +  struct Lisp_Cons *item;
  50914. +  struct Lisp_Cons *subitem;
  50915. +
  50916. +  pending_maps = Qnil;
  50917. +
  50918. +  do
  50919. +  {
  50920. +      Check(prefix, Lisp_Symbol);
  50921. +      Check(pane_name, Lisp_String);
  50922. +      push_menu_pane (pane_name, prefix, XSTRING(pane_name)->size);
  50923. +
  50924. +      Check(binding, Lisp_Cons);
  50925. +      binding = XCONS(binding)->car;
  50926. +      if(EQ(XCONS(binding)->car, Qkeymap))
  50927. +    {
  50928. +      for(litems = XCONS(binding)->cdr; XTYPE(litems) == Lisp_Cons; litems = XCONS(litems)->cdr)
  50929. +        {
  50930. +          litem = XCONS(litems)->car;
  50931. +          if(XTYPE(litem) == Lisp_String)
  50932. +        {
  50933. +          /*
  50934. +             ((keymap 
  50935. +                 "Select Buffer" 
  50936. +                 ("*scratch*" "*scratch*      " (nil) . menu-bar-select-buffer) 
  50937. +                 (list-buffers "List All Buffers" . list-buffers)))
  50938. +             ((keymap 
  50939. +                 (open-file "Open File..." . find-file) 
  50940. +                 (dired "Open Directory..." . dired) 
  50941. +                 "File"))
  50942. +             */
  50943. +#if 0
  50944. +          /* CHFIXME: ignore this name. redundant? */
  50945. +          fprintf(stderr,"\tmenu = %s\n",
  50946. +              (char *) XSTRING (litem)->data);
  50947. +#endif
  50948. +        }
  50949. +          else
  50950. +        {
  50951. +          Lisp_Object Def;
  50952. +          /* These are the saved equivalent keyboard key sequence
  50953. +             and its key-description.  */
  50954. +          Lisp_Object descrip;
  50955. +          Lisp_Object tem, enabled;
  50956. +          Lisp_Object prefix,item_string;
  50957. +
  50958. +          Check(litem, Lisp_Cons);
  50959. +          item = XCONS(litem);
  50960. +          prefix = item->car;
  50961. +#if 0 /* test Buffers menu (strings) */
  50962. +          Check(prefix, Lisp_Symbol); /* CHFIXME */
  50963. +          if(XTYPE(prefix) == Lisp_String)
  50964. +          {
  50965. +              break; /* CHFIXME */
  50966. +          }
  50967. +          else if(XTYPE(prefix) == Lisp_Symbol)
  50968. +            ;
  50969. +          else
  50970. +            Check(prefix, Lisp_Symbol);
  50971. +#endif
  50972. +          Check(item->cdr, Lisp_Cons);
  50973. +          item = XCONS(item->cdr);
  50974. +          item_string = item->car;
  50975. +          Check(item_string, Lisp_String);
  50976. +          Def = item->cdr;
  50977. +          /* CHFIXME: Def may be (lambda ....) */
  50978. +#if 0
  50979. +          Check(Def, Lisp_Symbol);
  50980. +#endif
  50981. +#if 0
  50982. +          def = menu_item_equiv_key (item_string, item1, &descrip);
  50983. +#endif
  50984. +#if 0 /* currently not needed, all we have is protected */
  50985. +          /* GCPRO because we will call eval.
  50986. +             Protecting KEYMAP preserves everything we use;
  50987. +             aside from that, must protect whatever might be
  50988. +             a string.  Since there's no GCPRO5, we refetch
  50989. +             item_string instead of protecting it.  */
  50990. +          GCPRO4 (keymap, pending_maps, def, descrip);
  50991. +#endif
  50992. +#if 0
  50993. +          enabled = menu_item_enabled_p (def, notreal);
  50994. +#endif
  50995. +#if 0
  50996. +          UNGCPRO;
  50997. +#endif
  50998. +          push_menu_item(item_string, 
  50999. +                 /* enabled */ Qt, 
  51000. +                 prefix,
  51001. +                 /* descrip */ Qnil,
  51002. +                 XSTRING(item_string)->size);
  51003. +
  51004. +          if(XTYPE(Def) == Lisp_Symbol)
  51005. +            lsubitems = XSYMBOL(Def)->value;
  51006. +          else
  51007. +            lsubitems = Qnil;
  51008. +          if((XTYPE(lsubitems) == Lisp_Cons) 
  51009. +             && EQ(XCONS(lsubitems)->car, Qkeymap))
  51010. +          {
  51011. +              push_submenu_start ();
  51012. +
  51013. +              for(lsubitems = XCONS(lsubitems)->cdr; 
  51014. +              XTYPE(lsubitems) == Lisp_Cons;
  51015. +              lsubitems = XCONS(lsubitems)->cdr)
  51016. +            {
  51017. +              Check(lsubitems, Lisp_Cons);
  51018. +              lsubitem = XCONS(lsubitems)->car;
  51019. +
  51020. +              if(XTYPE(lsubitem) == Lisp_String)
  51021. +                {
  51022. +                  /* ignore this name */
  51023. +                }
  51024. +              else
  51025. +                {
  51026. +                  Check(lsubitem, Lisp_Cons);
  51027. +                  subitem = XCONS(lsubitem);
  51028. +                  prefix = subitem->car;
  51029. +
  51030. +                  Check(prefix, Lisp_Symbol); /* CHFIXME */
  51031. +
  51032. +                  Check(subitem->cdr, Lisp_Cons);
  51033. +                  subitem = XCONS(subitem->cdr);
  51034. +                  item_string = subitem->car;
  51035. +                  Check(item_string, Lisp_String);
  51036. +                  Def = subitem->cdr;
  51037. +
  51038. +                  push_menu_item(item_string, 
  51039. +                         /* enabled */ Qt, 
  51040. +                         prefix,
  51041. +                         /* descrip */ Qnil,
  51042. +                         XSTRING(item_string)->size);
  51043. +              }
  51044. +              }
  51045. +              push_submenu_end ();
  51046. +          }
  51047. +          }
  51048. +      }
  51049. +      }
  51050. +      else
  51051. +      {
  51052. +      fprintf(stderr,"make_menu_items_1: Unknown structure\n");
  51053. +      }
  51054. +  } while(0);
  51055. +}
  51056. +
  51057. +/*
  51058. + * Map actual menu selection to Lisp Symbol
  51059. + *
  51060. + * (Notes:
  51061. + *   prefixes must be an array of 3 elements,
  51062. + *   given numbers start with 0
  51063. + *   sub_item = NOSUB means: no subitem)
  51064. + */
  51065. +
  51066. +int
  51067. +map_menu_selection(int menu_num, int item_num, int subitem_num, Lisp_Object *prefixes)
  51068. +{
  51069. +  int i;
  51070. +  int act_menu_num = -1; 
  51071. +  int act_item_num = -1;
  51072. +  int act_subitem_num = -1;
  51073. +  int submenu_depth = 0;
  51074. +  Lisp_Object prefix;
  51075. +
  51076. +
  51077. +  prefixes[0] = Qnil;
  51078. +  prefixes[1] = Qnil;
  51079. +  prefixes[2] = Qnil;
  51080. +
  51081. +  prefix = Qnil;
  51082. +  i = 0;
  51083. +  while (i < menu_items_used)
  51084. +    {
  51085. +      Lisp_Object entry;
  51086. +
  51087. +
  51088. +      if (EQ (XVECTOR (menu_items)->contents[i], Qt))
  51089. +    {
  51090. +      act_menu_num++;
  51091. +      if(act_menu_num == menu_num)
  51092. +        {
  51093. +          prefixes[0] = XVECTOR (menu_items)->contents[i + MENU_ITEMS_PANE_PREFIX];
  51094. +        }
  51095. +      else if(act_menu_num >= menu_num)
  51096. +        {
  51097. +          break; /* not found */
  51098. +        }
  51099. +      act_item_num = -1;
  51100. +      act_subitem_num = -1;
  51101. +
  51102. +      i += MENU_ITEMS_PANE_LENGTH;
  51103. +    }
  51104. +      else if (EQ (XVECTOR (menu_items)->contents[i], Qquote))
  51105. +    i += 1;
  51106. +      else if (EQ (XVECTOR (menu_items)->contents[i], Qnil))
  51107. +    {
  51108. +      submenu_depth ++;
  51109. +      if(submenu_depth > 1)
  51110. +        abort();
  51111. +      i += 1;
  51112. +    }
  51113. +      else if (EQ (XVECTOR (menu_items)->contents[i], Qlambda))
  51114. +    {
  51115. +      submenu_depth --;
  51116. +      if(submenu_depth < 0)
  51117. +        abort();
  51118. +      i += 1;
  51119. +    }
  51120. +      else
  51121. +    {
  51122. +      if(submenu_depth == 0)
  51123. +      {
  51124. +          act_item_num ++;
  51125. +          act_subitem_num = -1;
  51126. +      }
  51127. +      else if(submenu_depth == 1)
  51128. +        act_subitem_num ++;
  51129. +      else
  51130. +          abort();
  51131. +      
  51132. +      if(act_menu_num < 0)
  51133. +          abort();
  51134. +      
  51135. +      prefixes[submenu_depth+1] = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_VALUE];
  51136. +
  51137. +      if((act_menu_num == menu_num) && 
  51138. +         (act_item_num == item_num) &&
  51139. +         ((subitem_num == NOSUB) || (act_subitem_num == subitem_num)))
  51140. +        {
  51141. +        if(subitem_num == NOSUB)
  51142. +            prefixes[2] = Qnil;
  51143. +          return 1;
  51144. +        }
  51145. +      i += MENU_ITEMS_ITEM_LENGTH;
  51146. +    }
  51147. +    }
  51148. +
  51149. +  return 0;
  51150. +}
  51151. +
  51152. +#if 0
  51153. +extern Lisp_Object Qexternal_debugging_output;
  51154. +void
  51155. +print_menu_items_vector(Lisp_Object items, int level)
  51156. +{
  51157. +    int i;
  51158. +    int submenu_depth = 0;
  51159. +
  51160. +#if 0
  51161. +    if(level)
  51162. +    {
  51163. +    for(i = 0; i < level; i++)
  51164. +        fprintf(stderr,"    ");
  51165. +    }
  51166. +#endif
  51167. +    for (i = 0; i < XVECTOR (items)->size;i += 3)
  51168. +    {
  51169. +      Lisp_Object string;
  51170. +      Lisp_Object key, enable, descrip;
  51171. +      Lisp_Object binding;
  51172. +
  51173. +      string = XVECTOR (items)->contents[i + 1];
  51174. +      binding = XVECTOR (items)->contents[i + 2];
  51175. +      if(NILP(string))
  51176. +    break;
  51177. +
  51178. +      fprintf(stderr,"\tname = %s\n",
  51179. +          (char *) XSTRING (string)->data);
  51180. +      fprintf(stderr,"binding type: %d\n", XTYPE(binding));
  51181. +      Fprin1(binding, Qexternal_debugging_output);
  51182. +    }
  51183. +}
  51184. +#endif
  51185. +
  51186. +/* from xmenu.c */
  51187. +
  51188. +void
  51189. +set_frame_menubar (FRAME_PTR f, int first_time)
  51190. +{
  51191. +  int id = (int) f;
  51192. +  Lisp_Object tail, items;
  51193. +  int i;
  51194. +
  51195. +#if 0 /* CHFIXME: needed ? */
  51196. +  BLOCK_INPUT;
  51197. +#endif
  51198. +#if 0
  51199. +  fprintf(stderr,"set_frame_menubar\n");
  51200. +#endif
  51201. +  if (NILP (items = FRAME_MENU_BAR_ITEMS (f)))
  51202. +    items = FRAME_MENU_BAR_ITEMS (f) = menu_bar_items (FRAME_MENU_BAR_ITEMS (f));
  51203. +
  51204. +#if 0
  51205. +    make_menu_items(f, items);
  51206. +    print_amiga_menu(f);
  51207. +#else
  51208. +    make_amiga_menu(f, items);
  51209. +#endif
  51210. +  
  51211. +#if 0
  51212. +  if (menubar_widget)
  51213. +    lw_modify_all_widgets (id, first_wv, False);
  51214. +  else
  51215. +    {
  51216. +      menubar_widget = lw_create_widget ("menubar", "menubar", 
  51217. +                     id, first_wv, 
  51218. +                     f->display.x->column_widget, 
  51219. +                     0, 0,
  51220. +                     0, 0);
  51221. +      f->display.x->menubar_widget = menubar_widget;
  51222. +      XtVaSetValues (menubar_widget,
  51223. +             XtNshowGrip, 0,
  51224. +             XtNresizeToPreferred, 1,
  51225. +             XtNallowResize, 1,
  51226. +             0);
  51227. +    }
  51228. +  
  51229. +  free_menubar_widget_value_tree (first_wv);
  51230. +
  51231. +  /* Don't update the menubar the first time it is created via x_window.  */
  51232. +  if (!first_time)
  51233. +    update_frame_menubar (f);
  51234. +#endif
  51235. +#if 0 /* CHFIXME: needed ? */
  51236. +  UNBLOCK_INPUT;
  51237. +#endif
  51238. +}
  51239. +
  51240. +/* CHFIXME */
  51241. +Lisp_Object 
  51242. +map_event_to_object (struct input_event *event, FRAME_PTR f)
  51243. +{
  51244. +  fprintf(stderr, "map_event_to_object () called !\n");
  51245. +
  51246. +  return Qnil;
  51247. +}
  51248. +
  51249. +
  51250. +void
  51251. +syms_of_amiga_xmenu (void)
  51252. +{
  51253. +  staticpro (&menu_items);
  51254. +  menu_items = Qnil;
  51255. +}
  51256. diff -ru --new-file baseline/fsf/emacs/src/amiga_xmenu_protos.h amiga/fsf/emacs/src/amiga_xmenu_protos.h
  51257. --- baseline/fsf/emacs/src/amiga_xmenu_protos.h    Wed Dec 31 17:00:00 1969
  51258. +++ amiga/fsf/emacs/src/amiga_xmenu_protos.h    Sun Oct 15 17:09:46 1995
  51259. @@ -0,0 +1,63 @@
  51260. +/* Prototypes for functions defined in
  51261. +amiga_xmenu.c
  51262. + */
  51263. +
  51264. +extern int menu_items;
  51265. +
  51266. +extern int menu_items_allocated;
  51267. +
  51268. +extern int menu_items_num_items;
  51269. +
  51270. +extern int menu_items_used;
  51271. +
  51272. +extern int menu_items_n_panes;
  51273. +
  51274. +extern int menu_items_submenu_depth;
  51275. +
  51276. +extern int menu_items_string_len;
  51277. +
  51278. +void init_menu_items(void);
  51279. +
  51280. +void finish_menu_items(void);
  51281. +
  51282. +void discard_menu_items(void);
  51283. +
  51284. +void grow_menu_items(void);
  51285. +
  51286. +void push_submenu_start(void);
  51287. +
  51288. +void push_submenu_end(void);
  51289. +
  51290. +void push_left_right_boundary(void);
  51291. +
  51292. +void push_menu_pane(int , int , int );
  51293. +
  51294. +void push_menu_item(int , int , int , int , int );
  51295. +
  51296. +int menu_item_equiv_key(int item_string,
  51297. +                        int item1,
  51298. +                        int * descrip_ptr);
  51299. +
  51300. +int menu_item_enabled_p_1(int arg);
  51301. +
  51302. +int menu_item_enabled_p(int def,
  51303. +                        int notreal);
  51304. +
  51305. +void make_amiga_menu(int , int );
  51306. +
  51307. +void print_amiga_menu(int );
  51308. +
  51309. +void make_amiga_menu_1(int , int );
  51310. +
  51311. +void make_menu_items(int , int );
  51312. +
  51313. +int make_menu_items_1(int , int , int );
  51314. +
  51315. +int map_menu_selection(int , int , int , int * );
  51316. +
  51317. +void set_frame_menubar(int , int );
  51318. +
  51319. +int map_event_to_object(struct input_event * , int );
  51320. +
  51321. +void syms_of_amiga_xmenu(void);
  51322. +
  51323. diff -ru --new-file baseline/fsf/emacs/src/buffer.c amiga/fsf/emacs/src/buffer.c
  51324. --- baseline/fsf/emacs/src/buffer.c    Sun Sep  4 16:56:11 1994
  51325. +++ amiga/fsf/emacs/src/buffer.c    Sun Oct 15 17:09:48 1995
  51326. @@ -37,6 +37,10 @@
  51327.  #include "indent.h"
  51328.  #include "blockinput.h"
  51329.  
  51330. +#ifdef USE_PROTOS
  51331. +#include "protos.h"
  51332. +#endif
  51333. +
  51334.  struct buffer *current_buffer;        /* the current buffer */
  51335.  
  51336.  /* First buffer in chain of all buffers (in reverse order of creation).
  51337. @@ -2456,8 +2460,12 @@
  51338.  #ifndef VMS
  51339.    /* Maybe this should really use some standard subroutine
  51340.       whose definition is filename syntax dependent.  */
  51341. -  if (buf[strlen (buf) - 1] != '/')
  51342. -    strcat (buf, "/");
  51343. +  if (buf[strlen (buf) - 1] != '/'
  51344. +#ifdef AMIGA
  51345. +      && buf[strlen (buf) -1] != ':'
  51346. +#endif /* AMIGA  */
  51347. +      )
  51348. +        strcat (buf, "/");
  51349.  #endif /* not VMS */
  51350.    current_buffer->directory = build_string (buf);
  51351.  
  51352. diff -ru --new-file baseline/fsf/emacs/src/buffer_protos.h amiga/fsf/emacs/src/buffer_protos.h
  51353. --- baseline/fsf/emacs/src/buffer_protos.h    Wed Dec 31 17:00:00 1969
  51354. +++ amiga/fsf/emacs/src/buffer_protos.h    Sun Oct 15 17:09:51 1995
  51355. @@ -0,0 +1,277 @@
  51356. +/* Prototypes for functions defined in
  51357. +buffer.c
  51358. + */
  51359. +
  51360. +extern struct buffer * current_buffer;
  51361. +
  51362. +extern struct buffer * all_buffers;
  51363. +
  51364. +extern struct buffer buffer_defaults;
  51365. +
  51366. +extern int Vbuffer_defaults;
  51367. +
  51368. +extern struct buffer buffer_local_flags;
  51369. +
  51370. +extern struct buffer buffer_local_symbols;
  51371. +
  51372. +extern int Vbuffer_local_symbols;
  51373. +
  51374. +extern struct buffer buffer_local_types;
  51375. +
  51376. +extern int Vbuffer_alist;
  51377. +
  51378. +extern int Vbefore_change_function;
  51379. +
  51380. +extern int Vafter_change_function;
  51381. +
  51382. +extern int Vbefore_change_functions;
  51383. +
  51384. +extern int Vafter_change_functions;
  51385. +
  51386. +extern int Vtransient_mark_mode;
  51387. +
  51388. +extern int Vinhibit_read_only;
  51389. +
  51390. +extern int Vkill_buffer_query_functions;
  51391. +
  51392. +extern int Vfirst_change_hook;
  51393. +
  51394. +extern int Qfirst_change_hook;
  51395. +
  51396. +extern int Qfundamental_mode;
  51397. +
  51398. +extern int Qmode_class;
  51399. +
  51400. +extern int Qpermanent_local;
  51401. +
  51402. +extern int Qprotected_field;
  51403. +
  51404. +extern int QSFundamental;
  51405. +
  51406. +extern int Qkill_buffer_hook;
  51407. +
  51408. +extern int Qget_file_buffer;
  51409. +
  51410. +extern int Qoverlayp;
  51411. +
  51412. +extern int Qpriority;
  51413. +
  51414. +extern int Qwindow;
  51415. +
  51416. +extern int Qmodification_hooks;
  51417. +
  51418. +extern int Qinsert_in_front_hooks;
  51419. +
  51420. +extern int Qinsert_behind_hooks;
  51421. +
  51422. +int nsberror(int spec);
  51423. +
  51424. +extern struct Lisp_Subr Sbuffer_list;
  51425. +
  51426. +int Fbuffer_list(void);
  51427. +
  51428. +extern struct Lisp_Subr Sget_buffer;
  51429. +
  51430. +int Fget_buffer(int );
  51431. +
  51432. +extern struct Lisp_Subr Sget_file_buffer;
  51433. +
  51434. +int Fget_file_buffer(int );
  51435. +
  51436. +extern int buffer_count;
  51437. +
  51438. +extern struct Lisp_Subr Sget_buffer_create;
  51439. +
  51440. +int Fget_buffer_create(int );
  51441. +
  51442. +void reset_buffer(register struct buffer * b);
  51443. +
  51444. +int reset_buffer_local_variables(register struct buffer * b);
  51445. +
  51446. +extern struct Lisp_Subr Sgenerate_new_buffer_name;
  51447. +
  51448. +int Fgenerate_new_buffer_name(int , int );
  51449. +
  51450. +extern struct Lisp_Subr Sbuffer_name;
  51451. +
  51452. +int Fbuffer_name(int );
  51453. +
  51454. +extern struct Lisp_Subr Sbuffer_file_name;
  51455. +
  51456. +int Fbuffer_file_name(int );
  51457. +
  51458. +extern struct Lisp_Subr Sbuffer_local_variables;
  51459. +
  51460. +int Fbuffer_local_variables(int );
  51461. +
  51462. +extern struct Lisp_Subr Sbuffer_modified_p;
  51463. +
  51464. +int Fbuffer_modified_p(int );
  51465. +
  51466. +extern struct Lisp_Subr Sset_buffer_modified_p;
  51467. +
  51468. +int Fset_buffer_modified_p(int );
  51469. +
  51470. +extern struct Lisp_Subr Sbuffer_modified_tick;
  51471. +
  51472. +int Fbuffer_modified_tick(int );
  51473. +
  51474. +extern struct Lisp_Subr Srename_buffer;
  51475. +
  51476. +int Frename_buffer(int , int );
  51477. +
  51478. +extern struct Lisp_Subr Sother_buffer;
  51479. +
  51480. +int Fother_buffer(int , int );
  51481. +
  51482. +extern struct Lisp_Subr Sbuffer_disable_undo;
  51483. +
  51484. +int Fbuffer_disable_undo(int );
  51485. +
  51486. +extern struct Lisp_Subr Sbuffer_enable_undo;
  51487. +
  51488. +int Fbuffer_enable_undo(int );
  51489. +
  51490. +extern struct Lisp_Subr Skill_buffer;
  51491. +
  51492. +int Fkill_buffer(int );
  51493. +
  51494. +int record_buffer(int buf);
  51495. +
  51496. +extern struct Lisp_Subr Sswitch_to_buffer;
  51497. +
  51498. +int Fswitch_to_buffer(int , int );
  51499. +
  51500. +extern struct Lisp_Subr Spop_to_buffer;
  51501. +
  51502. +int Fpop_to_buffer(int , int );
  51503. +
  51504. +extern struct Lisp_Subr Scurrent_buffer;
  51505. +
  51506. +int Fcurrent_buffer(void);
  51507. +
  51508. +void set_buffer_internal(register struct buffer * b);
  51509. +
  51510. +extern struct Lisp_Subr Sset_buffer;
  51511. +
  51512. +int Fset_buffer(int );
  51513. +
  51514. +extern struct Lisp_Subr Sbarf_if_buffer_read_only;
  51515. +
  51516. +int Fbarf_if_buffer_read_only(void);
  51517. +
  51518. +extern struct Lisp_Subr Sbury_buffer;
  51519. +
  51520. +int Fbury_buffer(int );
  51521. +
  51522. +extern struct Lisp_Subr Serase_buffer;
  51523. +
  51524. +int Ferase_buffer(void);
  51525. +
  51526. +int validate_region(register int * b,
  51527. +                    register int * e);
  51528. +
  51529. +int list_buffers_1(int files);
  51530. +
  51531. +extern struct Lisp_Subr Slist_buffers;
  51532. +
  51533. +int Flist_buffers(int );
  51534. +
  51535. +extern struct Lisp_Subr Skill_all_local_variables;
  51536. +
  51537. +int Fkill_all_local_variables(void);
  51538. +
  51539. +int overlays_at(int pos,
  51540. +                int extend,
  51541. +                int ** vec_ptr,
  51542. +                int * len_ptr,
  51543. +                int * next_ptr);
  51544. +
  51545. +int compare_overlays(struct sortvec * s1,
  51546. +                     struct sortvec * s2);
  51547. +
  51548. +int sort_overlays(int * overlay_vec,
  51549. +                  int noverlays,
  51550. +                  struct window * w);
  51551. +
  51552. +void recenter_overlay_lists(struct buffer * buf,
  51553. +                            int pos);
  51554. +
  51555. +void fix_overlays_in_range(register int start,
  51556. +                           register int end);
  51557. +
  51558. +extern struct Lisp_Subr Soverlayp;
  51559. +
  51560. +int Foverlayp(int );
  51561. +
  51562. +extern struct Lisp_Subr Smake_overlay;
  51563. +
  51564. +int Fmake_overlay(int , int , int );
  51565. +
  51566. +extern struct Lisp_Subr Smove_overlay;
  51567. +
  51568. +int Fmove_overlay(int , int , int , int );
  51569. +
  51570. +extern struct Lisp_Subr Sdelete_overlay;
  51571. +
  51572. +int Fdelete_overlay(int );
  51573. +
  51574. +extern struct Lisp_Subr Soverlay_start;
  51575. +
  51576. +int Foverlay_start(int );
  51577. +
  51578. +extern struct Lisp_Subr Soverlay_end;
  51579. +
  51580. +int Foverlay_end(int );
  51581. +
  51582. +extern struct Lisp_Subr Soverlay_buffer;
  51583. +
  51584. +int Foverlay_buffer(int );
  51585. +
  51586. +extern struct Lisp_Subr Soverlay_properties;
  51587. +
  51588. +int Foverlay_properties(int );
  51589. +
  51590. +extern struct Lisp_Subr Soverlays_at;
  51591. +
  51592. +int Foverlays_at(int );
  51593. +
  51594. +extern struct Lisp_Subr Snext_overlay_change;
  51595. +
  51596. +int Fnext_overlay_change(int );
  51597. +
  51598. +extern struct Lisp_Subr Soverlay_lists;
  51599. +
  51600. +int Foverlay_lists(void);
  51601. +
  51602. +extern struct Lisp_Subr Soverlay_recenter;
  51603. +
  51604. +int Foverlay_recenter(int );
  51605. +
  51606. +extern struct Lisp_Subr Soverlay_get;
  51607. +
  51608. +int Foverlay_get(int , int );
  51609. +
  51610. +extern struct Lisp_Subr Soverlay_put;
  51611. +
  51612. +int Foverlay_put(int , int , int );
  51613. +
  51614. +void verify_overlay_modification(int start,
  51615. +                                 int end);
  51616. +
  51617. +void call_overlay_mod_hooks(int list,
  51618. +                            int overlay,
  51619. +                            int start,
  51620. +                            int end);
  51621. +
  51622. +void buffer_slot_type_mismatch(int valcontents,
  51623. +                               int newval);
  51624. +
  51625. +int init_buffer_once(void);
  51626. +
  51627. +int init_buffer(void);
  51628. +
  51629. +int syms_of_buffer(void);
  51630. +
  51631. +int keys_of_buffer(void);
  51632. +
  51633. diff -ru --new-file baseline/fsf/emacs/src/bytecode_protos.h amiga/fsf/emacs/src/bytecode_protos.h
  51634. --- baseline/fsf/emacs/src/bytecode_protos.h    Wed Dec 31 17:00:00 1969
  51635. +++ amiga/fsf/emacs/src/bytecode_protos.h    Sun Oct 15 17:09:53 1995
  51636. @@ -0,0 +1,12 @@
  51637. +/* Prototypes for functions defined in
  51638. +bytecode.c
  51639. + */
  51640. +
  51641. +extern int Qbytecode;
  51642. +
  51643. +extern struct Lisp_Subr Sbyte_code;
  51644. +
  51645. +int Fbyte_code(int , int , int );
  51646. +
  51647. +int syms_of_bytecode(void);
  51648. +
  51649. diff -ru --new-file baseline/fsf/emacs/src/callint_protos.h amiga/fsf/emacs/src/callint_protos.h
  51650. --- baseline/fsf/emacs/src/callint_protos.h    Wed Dec 31 17:00:00 1969
  51651. +++ amiga/fsf/emacs/src/callint_protos.h    Sun Oct 15 17:09:54 1995
  51652. @@ -0,0 +1,48 @@
  51653. +/* Prototypes for functions defined in
  51654. +callint.c
  51655. + */
  51656. +
  51657. +extern int Vprefix_arg;
  51658. +
  51659. +extern int Vcurrent_prefix_arg;
  51660. +
  51661. +extern int Qminus;
  51662. +
  51663. +extern int Qcall_interactively;
  51664. +
  51665. +extern int Vcommand_history;
  51666. +
  51667. +extern int Vcommand_debug_status;
  51668. +
  51669. +extern int Qcommand_debug_status;
  51670. +
  51671. +extern int Qenable_recursive_minibuffers;
  51672. +
  51673. +extern int Vmark_even_if_inactive;
  51674. +
  51675. +extern int Qlist;
  51676. +
  51677. +extern int preserved_fns;
  51678. +
  51679. +extern struct Lisp_Subr Sinteractive;
  51680. +
  51681. +int Finteractive(int );
  51682. +
  51683. +int quotify_arg(register int exp);
  51684. +
  51685. +int quotify_args(int exp);
  51686. +
  51687. +extern char * callint_argfuns[5];
  51688. +
  51689. +void check_mark(void);
  51690. +
  51691. +extern struct Lisp_Subr Scall_interactively;
  51692. +
  51693. +int Fcall_interactively(int , int );
  51694. +
  51695. +extern struct Lisp_Subr Sprefix_numeric_value;
  51696. +
  51697. +int Fprefix_numeric_value(int );
  51698. +
  51699. +int syms_of_callint(void);
  51700. +
  51701. diff -ru --new-file baseline/fsf/emacs/src/callproc.c amiga/fsf/emacs/src/callproc.c
  51702. --- baseline/fsf/emacs/src/callproc.c    Wed Aug 17 14:42:19 1994
  51703. +++ amiga/fsf/emacs/src/callproc.c    Sun Oct 15 17:09:56 1995
  51704. @@ -24,6 +24,8 @@
  51705.  #include <config.h>
  51706.  #include <stdio.h>
  51707.  
  51708. +#include "paths.h"
  51709. +
  51710.  extern int errno;
  51711.  extern char *strerror ();
  51712.  
  51713. @@ -327,6 +329,22 @@
  51714.  #endif
  51715.      }
  51716.  
  51717. +#ifdef AMIGA
  51718. +  {
  51719. +    register unsigned char *temp;
  51720. +
  51721. +    if (XTYPE (current_buffer->directory) == Lisp_String)
  51722. +      {
  51723. +    register int i;
  51724. +
  51725. +    i = XSTRING (current_buffer->directory)->size;
  51726. +    temp = (unsigned char *) alloca (i + 1);
  51727. +    bcopy (XSTRING (current_buffer->directory)->data, temp, i);
  51728. +    temp[i] = 0;
  51729. +      }
  51730. +    pid = exec(new_argv[0], new_argv, filefd, fd[1], temp, amiga_process_stack_size);
  51731. +  }
  51732. +#else  
  51733.    {
  51734.      /* child_setup must clobber environ in systems with true vfork.
  51735.         Protect it from permanent change.  */
  51736. @@ -383,6 +401,7 @@
  51737.      if (fd1 >= 0)
  51738.        close (fd1);
  51739.    }
  51740. +#endif /* not AMIGA */
  51741.  
  51742.    if (pid < 0)
  51743.      {
  51744. @@ -511,11 +530,15 @@
  51745.    strcat (tempfile, "detmp.XXX");
  51746.  #else /* not MSDOS */
  51747.  
  51748. +#ifdef PATH_TEMP
  51749. +  strcpy (tempfile, PATH_TEMP);
  51750. +#else /* not PATH_TEMP */
  51751.  #ifdef VMS
  51752.    strcpy (tempfile, "tmp:emacsXXXXXX.");
  51753.  #else
  51754.    strcpy (tempfile, "/tmp/emacsXXXXXX");
  51755.  #endif
  51756. +#endif /* not PATH_TEMP */
  51757.  #endif /* not MSDOS */
  51758.  
  51759.    mktemp (tempfile);
  51760. @@ -543,6 +566,7 @@
  51761.  }
  51762.  
  51763.  #ifndef VMS /* VMS version is in vmsproc.c.  */
  51764. +#ifndef AMIGA
  51765.  
  51766.  /* This is the last thing run in a newly forked inferior
  51767.     either synchronous or asynchronous.
  51768. @@ -727,7 +751,9 @@
  51769.    _exit (1);
  51770.  #endif /* not MSDOS */
  51771.  }
  51772. +#endif /* not AMIGA */
  51773.  
  51774. +#ifndef AMIGA
  51775.  /* Move the file descriptor FD so that its number is not less than MIN.
  51776.     If the file descriptor is moved at all, the original is freed.  */
  51777.  int
  51778. @@ -756,6 +782,7 @@
  51779.        return new;
  51780.      }
  51781.  }
  51782. +#endif /* not AMIGA */
  51783.  
  51784.  static int
  51785.  getenv_internal (var, varlen, value, valuelen)
  51786. @@ -815,7 +842,17 @@
  51787.    if (getenv_internal (var, strlen (var), &value, &valuelen))
  51788.      return value;
  51789.    else
  51790. +#ifdef AMIGA
  51791. +    /* a global env var on the Amiga does not appear in envp.  I don't
  51792. +     * think that there is a parallel for most other systems.
  51793. +     * Anyways, we get thing explicitly here.  Note that other
  51794. +     * processes can change global env vars out from under us --- so
  51795. +     * caching them isn't smart.  Local vars should be caught
  51796. +     * somwhere... either by this func, or before.  */
  51797. +    return(getenv(var));
  51798. +#else
  51799.      return 0;
  51800. +#endif
  51801.  }
  51802.  
  51803.  #endif /* not VMS */
  51804. @@ -838,7 +875,17 @@
  51805.       PATH_EXEC path from paths.h.  */
  51806.    Vexec_path = decode_env_path ("EMACSPATH", PATH_EXEC);
  51807.    Vexec_directory = Ffile_name_as_directory (Fcar (Vexec_path));
  51808. +#ifndef AMIGA
  51809.    Vexec_path = nconc2 (decode_env_path ("PATH", ""), Vexec_path);
  51810. +#else
  51811. +  {
  51812. +    char *amiga_path(), *apath = amiga_path();
  51813. +
  51814. +    Vexec_path = nconc2 (decode_env_path (0, apath), Vexec_path);
  51815. +    Vexec_path = nconc2 (decode_env_path (0, PATH_BIN), Vexec_path);
  51816. +    free(apath);
  51817. +  }
  51818. +#endif  
  51819.  }
  51820.  
  51821.  /* This is run after init_cmdargs, so that Vinvocation_directory is valid.  */
  51822. @@ -890,8 +937,13 @@
  51823.        tem1 = Ffile_exists_p (tem);
  51824.        if (NILP (tem1))
  51825.      {
  51826. +#ifdef RELPATH_ETC        
  51827. +      newdir = Fexpand_file_name (build_string (RELPATH_ETC),
  51828. +                      build_string (PATH_DUMPLOADSEARCH));
  51829. +#else
  51830.        newdir = Fexpand_file_name (build_string ("../etc/"),
  51831.                        build_string (PATH_DUMPLOADSEARCH));
  51832. +#endif
  51833.        tem = Fexpand_file_name (build_string ("GNU"), newdir);
  51834.        tem1 = Ffile_exists_p (tem);
  51835.        if (!NILP (tem1))
  51836. @@ -921,7 +973,7 @@
  51837.    Vshell_file_name = build_string ("*dcl*");
  51838.  #else
  51839.    sh = (char *) getenv ("SHELL");
  51840. -  Vshell_file_name = build_string (sh ? sh : "/bin/sh");
  51841. +  Vshell_file_name = build_string (sh ? sh : NAME_SHELL);
  51842.  #endif
  51843.  }
  51844.  
  51845. diff -ru --new-file baseline/fsf/emacs/src/callproc_protos.h amiga/fsf/emacs/src/callproc_protos.h
  51846. --- baseline/fsf/emacs/src/callproc_protos.h    Wed Dec 31 17:00:00 1969
  51847. +++ amiga/fsf/emacs/src/callproc_protos.h    Sun Oct 15 17:09:59 1995
  51848. @@ -0,0 +1,59 @@
  51849. +/* Prototypes for functions defined in
  51850. +callproc.c
  51851. + */
  51852. +
  51853. +extern int Vexec_path;
  51854. +
  51855. +extern int Vexec_directory;
  51856. +
  51857. +extern int Vdata_directory;
  51858. +
  51859. +extern int Vdoc_directory;
  51860. +
  51861. +extern int Vconfigure_info_directory;
  51862. +
  51863. +extern int Vshell_file_name;
  51864. +
  51865. +extern int Vprocess_environment;
  51866. +
  51867. +extern int synch_process_alive;
  51868. +
  51869. +extern char * synch_process_death;
  51870. +
  51871. +extern int synch_process_retcode;
  51872. +
  51873. +extern int call_process_exited;
  51874. +
  51875. +int call_process_kill(int fdpid);
  51876. +
  51877. +int call_process_cleanup(int fdpid);
  51878. +
  51879. +extern struct Lisp_Subr Scall_process;
  51880. +
  51881. +int Fcall_process(int , int * );
  51882. +
  51883. +int delete_temp_file(int name);
  51884. +
  51885. +extern struct Lisp_Subr Scall_process_region;
  51886. +
  51887. +int Fcall_process_region(int , int * );
  51888. +
  51889. +int getenv_internal(char * var,
  51890. +                    int varlen,
  51891. +                    char ** value,
  51892. +                    int * valuelen);
  51893. +
  51894. +extern struct Lisp_Subr Sgetenv;
  51895. +
  51896. +int Fgetenv(int );
  51897. +
  51898. +char * egetenv(char * var);
  51899. +
  51900. +int init_callproc_1(void);
  51901. +
  51902. +int init_callproc(void);
  51903. +
  51904. +int set_process_environment(void);
  51905. +
  51906. +int syms_of_callproc(void);
  51907. +
  51908. diff -ru --new-file baseline/fsf/emacs/src/casefiddle_protos.h amiga/fsf/emacs/src/casefiddle_protos.h
  51909. --- baseline/fsf/emacs/src/casefiddle_protos.h    Wed Dec 31 17:00:00 1969
  51910. +++ amiga/fsf/emacs/src/casefiddle_protos.h    Sun Oct 15 17:10:01 1995
  51911. @@ -0,0 +1,57 @@
  51912. +/* Prototypes for functions defined in
  51913. +casefiddle.c
  51914. + */
  51915. +
  51916. +int casify_object(enum case_action flag,
  51917. +                  int obj);
  51918. +
  51919. +extern struct Lisp_Subr Supcase;
  51920. +
  51921. +int Fupcase(int );
  51922. +
  51923. +extern struct Lisp_Subr Sdowncase;
  51924. +
  51925. +int Fdowncase(int );
  51926. +
  51927. +extern struct Lisp_Subr Scapitalize;
  51928. +
  51929. +int Fcapitalize(int );
  51930. +
  51931. +int casify_region(enum case_action flag,
  51932. +                  int b,
  51933. +                  int e);
  51934. +
  51935. +extern struct Lisp_Subr Supcase_region;
  51936. +
  51937. +int Fupcase_region(int , int );
  51938. +
  51939. +extern struct Lisp_Subr Sdowncase_region;
  51940. +
  51941. +int Fdowncase_region(int , int );
  51942. +
  51943. +extern struct Lisp_Subr Scapitalize_region;
  51944. +
  51945. +int Fcapitalize_region(int , int );
  51946. +
  51947. +int upcase_initials_region(int b,
  51948. +                           int e);
  51949. +
  51950. +int operate_on_word(int arg,
  51951. +                    int * newpoint);
  51952. +
  51953. +extern struct Lisp_Subr Supcase_word;
  51954. +
  51955. +int Fupcase_word(int );
  51956. +
  51957. +extern struct Lisp_Subr Sdowncase_word;
  51958. +
  51959. +int Fdowncase_word(int );
  51960. +
  51961. +extern struct Lisp_Subr Scapitalize_word;
  51962. +
  51963. +int Fcapitalize_word(int );
  51964. +
  51965. +int syms_of_casefiddle(void);
  51966. +
  51967. +int keys_of_casefiddle(void);
  51968. +
  51969. diff -ru --new-file baseline/fsf/emacs/src/casetab_protos.h amiga/fsf/emacs/src/casetab_protos.h
  51970. --- baseline/fsf/emacs/src/casetab_protos.h    Wed Dec 31 17:00:00 1969
  51971. +++ amiga/fsf/emacs/src/casetab_protos.h    Sun Oct 15 17:10:04 1995
  51972. @@ -0,0 +1,46 @@
  51973. +/* Prototypes for functions defined in
  51974. +casetab.c
  51975. + */
  51976. +
  51977. +extern int Qcase_table_p;
  51978. +
  51979. +extern int Vascii_downcase_table;
  51980. +
  51981. +extern int Vascii_upcase_table;
  51982. +
  51983. +extern int Vascii_canon_table;
  51984. +
  51985. +extern int Vascii_eqv_table;
  51986. +
  51987. +extern struct Lisp_Subr Scase_table_p;
  51988. +
  51989. +int Fcase_table_p(int );
  51990. +
  51991. +int check_case_table(int obj);
  51992. +
  51993. +extern struct Lisp_Subr Scurrent_case_table;
  51994. +
  51995. +int Fcurrent_case_table(void);
  51996. +
  51997. +extern struct Lisp_Subr Sstandard_case_table;
  51998. +
  51999. +int Fstandard_case_table(void);
  52000. +
  52001. +extern struct Lisp_Subr Sset_case_table;
  52002. +
  52003. +int Fset_case_table(int );
  52004. +
  52005. +extern struct Lisp_Subr Sset_standard_case_table;
  52006. +
  52007. +int Fset_standard_case_table(int );
  52008. +
  52009. +int set_case_table(int table,
  52010. +                   int standard);
  52011. +
  52012. +void compute_trt_inverse(register unsigned char * trt,
  52013. +                         register unsigned char * inverse);
  52014. +
  52015. +int init_casetab_once(void);
  52016. +
  52017. +int syms_of_casetab(void);
  52018. +
  52019. diff -ru --new-file baseline/fsf/emacs/src/cdodump.sh amiga/fsf/emacs/src/cdodump.sh
  52020. --- baseline/fsf/emacs/src/cdodump.sh    Wed Dec 31 17:00:00 1969
  52021. +++ amiga/fsf/emacs/src/cdodump.sh    Sun Oct 15 17:10:06 1995
  52022. @@ -0,0 +1,5 @@
  52023. +semacs
  52024. +if -f GNUEmacs-19.28:etc/EMACS-DATA then ; rm GNUEmacs-19.28:etc/EMACS-DATA ; endif
  52025. +Stack 500000
  52026. +stack 500000
  52027. +cpr -w /src/temacs -batch -l loadup dump
  52028. diff -ru --new-file baseline/fsf/emacs/src/cm.c amiga/fsf/emacs/src/cm.c
  52029. --- baseline/fsf/emacs/src/cm.c    Mon Apr 25 18:31:05 1994
  52030. +++ amiga/fsf/emacs/src/cm.c    Sun Oct 15 17:10:07 1995
  52031. @@ -24,6 +24,10 @@
  52032.  #include "cm.h"
  52033.  #include "termhooks.h"
  52034.  
  52035. +#ifdef USE_PROTOS
  52036. +#include "protos.h"
  52037. +#endif
  52038. +
  52039.  #define    BIG    9999        /* 9999 good on VAXen.  For 16 bit machines
  52040.                     use about 2000.... */
  52041.  
  52042. diff -ru --new-file baseline/fsf/emacs/src/cm_protos.h amiga/fsf/emacs/src/cm_protos.h
  52043. --- baseline/fsf/emacs/src/cm_protos.h    Wed Dec 31 17:00:00 1969
  52044. +++ amiga/fsf/emacs/src/cm_protos.h    Sun Oct 15 17:10:09 1995
  52045. @@ -0,0 +1,25 @@
  52046. +/* Prototypes for functions defined in
  52047. +cm.c
  52048. + */
  52049. +
  52050. +extern int cost;
  52051. +
  52052. +int evalcost(int c);
  52053. +
  52054. +void cmputc(int c);
  52055. +
  52056. +int cmcostinit(void);
  52057. +
  52058. +int calccost(int srcy,
  52059. +             int srcx,
  52060. +             int dsty,
  52061. +             int dstx,
  52062. +             int doit);
  52063. +
  52064. +int cmgoto(int row,
  52065. +           int col);
  52066. +
  52067. +int Wcm_clear(void);
  52068. +
  52069. +int Wcm_init(void);
  52070. +
  52071. diff -ru --new-file baseline/fsf/emacs/src/cmds_protos.h amiga/fsf/emacs/src/cmds_protos.h
  52072. --- baseline/fsf/emacs/src/cmds_protos.h    Wed Dec 31 17:00:00 1969
  52073. +++ amiga/fsf/emacs/src/cmds_protos.h    Sun Oct 15 17:10:11 1995
  52074. @@ -0,0 +1,55 @@
  52075. +/* Prototypes for functions defined in
  52076. +cmds.c
  52077. + */
  52078. +
  52079. +extern int Qkill_forward_chars;
  52080. +
  52081. +extern int Qkill_backward_chars;
  52082. +
  52083. +extern int Vblink_paren_function;
  52084. +
  52085. +extern int Qoverwrite_mode_binary;
  52086. +
  52087. +extern struct Lisp_Subr Sforward_char;
  52088. +
  52089. +int Fforward_char(int );
  52090. +
  52091. +extern struct Lisp_Subr Sbackward_char;
  52092. +
  52093. +int Fbackward_char(int );
  52094. +
  52095. +extern struct Lisp_Subr Sforward_line;
  52096. +
  52097. +int Fforward_line(int );
  52098. +
  52099. +extern struct Lisp_Subr Sbeginning_of_line;
  52100. +
  52101. +int Fbeginning_of_line(int );
  52102. +
  52103. +extern struct Lisp_Subr Send_of_line;
  52104. +
  52105. +int Fend_of_line(int );
  52106. +
  52107. +extern struct Lisp_Subr Sdelete_char;
  52108. +
  52109. +int Fdelete_char(int , int );
  52110. +
  52111. +extern struct Lisp_Subr Sdelete_backward_char;
  52112. +
  52113. +int Fdelete_backward_char(int , int );
  52114. +
  52115. +extern struct Lisp_Subr Sself_insert_command;
  52116. +
  52117. +int Fself_insert_command(int );
  52118. +
  52119. +extern struct Lisp_Subr Snewline;
  52120. +
  52121. +int Fnewline(int );
  52122. +
  52123. +int internal_self_insert(int c1,
  52124. +                         int noautofill);
  52125. +
  52126. +int syms_of_cmds(void);
  52127. +
  52128. +int keys_of_cmds(void);
  52129. +
  52130. diff -ru --new-file baseline/fsf/emacs/src/config.h.in-sasc amiga/fsf/emacs/src/config.h.in-sasc
  52131. --- baseline/fsf/emacs/src/config.h.in-sasc    Wed Dec 31 17:00:00 1969
  52132. +++ amiga/fsf/emacs/src/config.h.in-sasc    Sun Oct 15 17:10:13 1995
  52133. @@ -0,0 +1,284 @@
  52134. +/* src/config.h.  Generated automatically by configure and HAND MODIFIED
  52135. +   for use with SAS/C on AmigaDOS.  Must track any changes in automatically
  52136. +   generated config.h, preserved as config.h-gcc.  */
  52137. +
  52138. +/* GNU Emacs site configuration template file.  -*- C -*-
  52139. +   Copyright (C) 1988, 1993, 1994 Free Software Foundation, Inc.
  52140. +
  52141. +This file is part of GNU Emacs.
  52142. +
  52143. +GNU Emacs is distributed in the hope that it will be useful,
  52144. +but WITHOUT ANY WARRANTY.  No author or distributor
  52145. +accepts responsibility to anyone for the consequences of using it
  52146. +or for whether it serves any particular purpose or works at all,
  52147. +unless he says so in writing.  Refer to the GNU Emacs General Public
  52148. +License for full details.
  52149. +
  52150. +Everyone is granted permission to copy, modify and redistribute
  52151. +GNU Emacs, but only under the conditions described in the
  52152. +GNU Emacs General Public License.   A copy of this license is
  52153. +supposed to have been given to you along with GNU Emacs so you
  52154. +can know your rights and responsibilities.  It should be in a
  52155. +file named COPYING.  Among other things, the copyright notice
  52156. +and this notice must be preserved on all copies.  */
  52157. +
  52158. +
  52159. +/* No code in Emacs #includes config.h twice, but some of the code
  52160. +   intended to work with other packages as well (like gmalloc.c) 
  52161. +   think they can include it as many times as they like.  */
  52162. +#ifndef EMACS_CONFIG_H
  52163. +#define EMACS_CONFIG_H
  52164. +
  52165. +
  52166. +/* These are all defined in the top-level Makefile by configure.
  52167. +   They're here only for reference.  */
  52168. +
  52169. +/* Define LISP_FLOAT_TYPE if you want emacs to support floating-point
  52170. +   numbers. */
  52171. +/* #undef LISP_FLOAT_TYPE */
  52172. +
  52173. +/* Define GNU_MALLOC if you want to use the *new* GNU memory allocator. */
  52174. +/* #undef GNU_MALLOC */
  52175. +
  52176. +/* Define REL_ALLOC if you want to use the relocating allocator for
  52177. +   buffer space. */
  52178. +/* #undef REL_ALLOC */
  52179. +  
  52180. +/* Define HAVE_X_WINDOWS if you want to use the X window system.  */
  52181. +/* #undef HAVE_X_WINDOWS */
  52182. +
  52183. +/* Define HAVE_X11 if you want to use version 11 of X windows.
  52184. +   Otherwise, Emacs expects to use version 10.  */
  52185. +/* #undef HAVE_X11 */
  52186. +
  52187. +/* Define if we have the X11R6 or newer.  */
  52188. +/* #undef HAVE_X11R6 */
  52189. +
  52190. +/* Define if using an X toolkit.  */
  52191. +/* #undef USE_X_TOOLKIT */
  52192. +
  52193. +/* Define this if you're using XFree386.  */
  52194. +/* #undef HAVE_XFREE386 */
  52195. +
  52196. +/* Define HAVE_X_MENU if you want to use the X window menu system.
  52197. +   This appears to work on some machines that support X
  52198. +   and not on others.  */
  52199. +/* #undef HAVE_X_MENU */
  52200. +
  52201. +/* Define if we have the X11R6 or newer version of Xt.  */
  52202. +/* #undef HAVE_X11XTR6 */
  52203. +
  52204. +/* Define if netdb.h declares h_errno.  */
  52205. +/* #undef HAVE_H_ERRNO */
  52206. +
  52207. +/* If we're using any sort of window system, define MULTI_FRAME.  */
  52208. +#ifdef HAVE_X_WINDOWS
  52209. +#define MULTI_FRAME
  52210. +#endif
  52211. +
  52212. +/* Define USE_TEXT_PROPERTIES to support visual and other properties
  52213. +   on text. */
  52214. +#define USE_TEXT_PROPERTIES
  52215. +
  52216. +/* Define USER_FULL_NAME to return a string
  52217. +   that is the user's full name.
  52218. +   It can assume that the variable `pw'
  52219. +   points to the password file entry for this user.
  52220. +
  52221. +   At some sites, the pw_gecos field contains
  52222. +   the user's full name.  If neither this nor any other
  52223. +   field contains the right thing, use pw_name,
  52224. +   giving the user's login name, since that is better than nothing.  */
  52225. +#define USER_FULL_NAME pw->pw_gecos
  52226. +
  52227. +/* Define AMPERSAND_FULL_NAME if you use the convention
  52228. +   that & in the full name stands for the login id.  */
  52229. +/* #undef AMPERSAND_FULL_NAME */
  52230. +
  52231. +/* Some things figured out by the configure script, grouped as they are in
  52232. +   configure.in.  */
  52233. +/* #undef HAVE_SYS_TIMEB_H */
  52234. +/* #undef HAVE_SYS_TIME_H */
  52235. +/* #undef HAVE_UNISTD_H */
  52236. +/* #undef STDC_HEADERS */
  52237. +/* #undef TIME_WITH_SYS_TIME */
  52238. +
  52239. +/* #undef HAVE_LIBDNET */
  52240. +/* #undef HAVE_LIBRESOLV */
  52241. +
  52242. +/* #undef HAVE_ALLOCA_H */
  52243. +
  52244. +/* #undef HAVE_GETTIMEOFDAY */
  52245. +/* #undef HAVE_GETHOSTNAME */
  52246. +/* #undef HAVE_DUP2 */
  52247. +/* #undef HAVE_RENAME */
  52248. +/* #undef HAVE_CLOSEDIR */
  52249. +
  52250. +/* #undef TM_IN_SYS_TIME */
  52251. +/* #undef HAVE_TM_ZONE */
  52252. +/* #undef HAVE_TZNAME */
  52253. +
  52254. +/* #undef const */
  52255. +
  52256. +/* #undef HAVE_LONG_FILE_NAMES */
  52257. +
  52258. +/* #undef CRAY_STACKSEG_END */
  52259. +/* #undef STACK_DIRECTION */
  52260. +
  52261. +#define UNEXEC_SRC amiga_dump.c
  52262. +
  52263. +/* #undef HAVE_LIBXBSD */
  52264. +/* #undef HAVE_XRMSETDATABASE */
  52265. +/* #undef HAVE_XSCREENRESOURCESTRING */
  52266. +/* #undef HAVE_XSCREENNUMBEROFSCREEN */
  52267. +/* #undef HAVE_XSETWMPROTOCOLS */
  52268. +
  52269. +/* #undef HAVE_MKDIR */
  52270. +/* #undef HAVE_RMDIR */
  52271. +/* #undef HAVE_RANDOM */
  52272. +/* #undef HAVE_LRAND48 */
  52273. +/* #undef HAVE_BCOPY */
  52274. +/* #undef HAVE_BCMP */
  52275. +/* #undef HAVE_LOGB */
  52276. +/* #undef HAVE_FREXP */
  52277. +/* #undef HAVE_FMOD */
  52278. +/* #undef HAVE_FTIME */
  52279. +/* #undef HAVE_RES_INIT */ /* For -lresolv on Suns.  */
  52280. +/* #undef HAVE_SETSID */
  52281. +/* #undef HAVE_FPATHCONF */
  52282. +
  52283. +/* #undef HAVE_INET_SOCKETS */
  52284. +
  52285. +/* #undef HAVE_AIX_SMT_EXP */
  52286. +
  52287. +/* Define if you have the ANSI `strerror' function.
  52288. +   Otherwise you must have the variable `char *sys_errlist[]'.  */
  52289. +#define HAVE_STRERROR
  52290. +
  52291. +/* Define if `sys_siglist' is declared by <signal.h>.  */
  52292. +/* #undef SYS_SIGLIST_DECLARED */
  52293. +
  52294. +/* If using GNU, then support inline function declarations. */
  52295. +#ifdef __GNUC__
  52296. +#define INLINE __inline__
  52297. +#else
  52298. +#define INLINE
  52299. +#endif
  52300. +
  52301. +#define EMACS_CONFIGURATION "amigados"
  52302. +
  52303. +/* The configuration script defines opsysfile to be the name of the
  52304. +   s/*.h file that describes the system type you are using.  The file
  52305. +   is chosen based on the configuration name you give.
  52306. +
  52307. +   See the file ../etc/MACHINES for a list of systems and the
  52308. +   configuration names to use for them.
  52309. +
  52310. +   See s/template.h for documentation on writing s/*.h files.  */
  52311. +#define config_opsysfile "s/amigados.h" 
  52312. +#include config_opsysfile
  52313. +
  52314. +/* The configuration script defines machfile to be the name of the
  52315. +   m/*.h file that describes the machine you are using.  The file is
  52316. +   chosen based on the configuration name you give.
  52317. +
  52318. +   See the file ../etc/MACHINES for a list of machines and the
  52319. +   configuration names to use for them.
  52320. +
  52321. +   See m/template.h for documentation on writing m/*.h files.  */
  52322. +#define config_machfile "m/amiga.h"
  52323. +#include config_machfile
  52324. +
  52325. +/* These typedefs shouldn't appear when alloca.s or Makefile.in
  52326. +   includes config.h.  */
  52327. +#ifndef NOT_C_CODE
  52328. +#ifndef SPECIAL_EMACS_INT
  52329. +typedef long EMACS_INT;
  52330. +typedef unsigned long EMACS_UINT;
  52331. +#endif
  52332. +#endif
  52333. +
  52334. +/* Load in the conversion definitions if this system
  52335. +   needs them and the source file being compiled has not
  52336. +   said to inhibit this.  There should be no need for you
  52337. +   to alter these lines.  */
  52338. +
  52339. +#ifdef SHORTNAMES
  52340. +#ifndef NO_SHORTNAMES
  52341. +#include "../shortnames/remap.h"
  52342. +#endif /* not NO_SHORTNAMES */
  52343. +#endif /* SHORTNAMES */
  52344. +
  52345. +/* Define `subprocesses' should be defined if you want to
  52346. +   have code for asynchronous subprocesses
  52347. +   (as used in M-x compile and M-x shell).
  52348. +   These do not work for some USG systems yet;
  52349. +   for the ones where they work, the s/*.h file defines this flag.  */
  52350. +
  52351. +#ifndef VMS
  52352. +#ifndef USG
  52353. +/* #define subprocesses */
  52354. +#endif
  52355. +#endif
  52356. +
  52357. +/* Define LD_SWITCH_SITE to contain any special flags your loader may need.  */
  52358. +/* #undef LD_SWITCH_SITE */
  52359. +
  52360. +/* Define C_SWITCH_SITE to contain any special flags your compiler needs.  */
  52361. +/* #undef C_SWITCH_SITE */
  52362. +
  52363. +/* Define LD_SWITCH_X_SITE to contain any special flags your loader
  52364. +   may need to deal with X Windows.  For instance, if you've defined
  52365. +   HAVE_X_WINDOWS above and your X libraries aren't in a place that
  52366. +   your loader can find on its own, you might want to add "-L/..." or
  52367. +   something similar.  */
  52368. +/* #undef LD_SWITCH_X_SITE */
  52369. +
  52370. +/* Define LD_SWITCH_X_SITE_AUX with an -R option
  52371. +   in case it's needed (for Solaris, for example).  */
  52372. +/* #undef LD_SWITCH_X_SITE_AUX */
  52373. +
  52374. +/* Define C_SWITCH_X_SITE to contain any special flags your compiler
  52375. +   may need to deal with X Windows.  For instance, if you've defined
  52376. +   HAVE_X_WINDOWS above and your X include files aren't in a place
  52377. +   that your compiler can find on its own, you might want to add
  52378. +   "-I/..." or something similar.  */
  52379. +/* #undef C_SWITCH_X_SITE */
  52380. +
  52381. +/* Define the return type of signal handlers if the s-xxx file
  52382. +   did not already do so.  */
  52383. +#define RETSIGTYPE void
  52384. +
  52385. +/* SIGTYPE is the macro we actually use.  */
  52386. +#ifndef SIGTYPE
  52387. +#define SIGTYPE RETSIGTYPE
  52388. +#endif
  52389. +
  52390. +/* The rest of the code currently tests the CPP symbol BSTRING.
  52391. +   Override any claims made by the system-description files.
  52392. +   Note that on some SCO version it is possible to have bcopy and not bcmp.  */
  52393. +/* #undef BSTRING */
  52394. +#if defined (HAVE_BCOPY) && defined (HAVE_BCMP)
  52395. +#define BSTRING
  52396. +#endif
  52397. +
  52398. +#define HAVE_VOLATILE
  52399. +
  52400. +/* Non-ANSI C compilers usually don't have volatile.  */
  52401. +#ifndef HAVE_VOLATILE
  52402. +#ifndef __STDC__
  52403. +#define volatile
  52404. +#endif
  52405. +#endif
  52406. +
  52407. +/* Some of the files of Emacs which are intended for use with other
  52408. +   programs assume that if you have a config.h file, you must declare
  52409. +   the type of getenv.
  52410. +
  52411. +   This declaration shouldn't appear when alloca.s or Makefile.in
  52412. +   includes config.h.  */
  52413. +#ifndef NOT_C_CODE
  52414. +extern char *getenv ();
  52415. +#endif
  52416. +
  52417. +#endif /* EMACS_CONFIG_H */
  52418. Binary files baseline/fsf/emacs/src/cover.dat and amiga/fsf/emacs/src/cover.dat differ
  52419. diff -ru --new-file baseline/fsf/emacs/src/cprinit amiga/fsf/emacs/src/cprinit
  52420. --- baseline/fsf/emacs/src/cprinit    Wed Dec 31 17:00:00 1969
  52421. +++ amiga/fsf/emacs/src/cprinit    Sun Oct 15 17:10:16 1995
  52422. @@ -0,0 +1,9 @@
  52423. +b abort
  52424. +b cpr
  52425. +b bailout
  52426. +/* b Fsignal
  52427. +b error
  52428. +b amiga_abort
  52429. +/* b command_loop_1
  52430. +b x_set_menu_bar_lines
  52431. +b set_frame_menubar
  52432. \ No newline at end of file
  52433. diff -ru --new-file baseline/fsf/emacs/src/ct.sh amiga/fsf/emacs/src/ct.sh
  52434. --- baseline/fsf/emacs/src/ct.sh    Wed Dec 31 17:00:00 1969
  52435. +++ amiga/fsf/emacs/src/ct.sh    Sun Oct 15 17:10:18 1995
  52436. @@ -0,0 +1,6 @@
  52437. +semacs 
  52438. +Stack 600000
  52439. +stack 600000
  52440. +Path reset
  52441. +Path add sc:c
  52442. +cpr -w /src/temacs -pure 300000 -malloc 400000 -q
  52443. diff -ru --new-file baseline/fsf/emacs/src/data.c amiga/fsf/emacs/src/data.c
  52444. --- baseline/fsf/emacs/src/data.c    Thu Aug  4 15:54:00 1994
  52445. +++ amiga/fsf/emacs/src/data.c    Sun Oct 15 17:10:20 1995
  52446. @@ -40,6 +40,9 @@
  52447.  #ifdef LISP_FLOAT_TYPE
  52448.  
  52449.  #ifdef STDC_HEADERS
  52450. +#ifdef AMIGA /* CHFIXME */
  52451. +#undef abort
  52452. +#endif
  52453.  #include <stdlib.h>
  52454.  #endif
  52455.  
  52456. diff -ru --new-file baseline/fsf/emacs/src/data_protos.h amiga/fsf/emacs/src/data_protos.h
  52457. --- baseline/fsf/emacs/src/data_protos.h    Wed Dec 31 17:00:00 1969
  52458. +++ amiga/fsf/emacs/src/data_protos.h    Sun Oct 15 17:10:22 1995
  52459. @@ -0,0 +1,457 @@
  52460. +/* Prototypes for functions defined in
  52461. +data.c
  52462. + */
  52463. +
  52464. +extern int Qnil;
  52465. +
  52466. +extern int Qt;
  52467. +
  52468. +extern int Qquote;
  52469. +
  52470. +extern int Qlambda;
  52471. +
  52472. +extern int Qsubr;
  52473. +
  52474. +extern int Qunbound;
  52475. +
  52476. +extern int Qerror_conditions;
  52477. +
  52478. +extern int Qerror_message;
  52479. +
  52480. +extern int Qtop_level;
  52481. +
  52482. +extern int Qerror;
  52483. +
  52484. +extern int Qquit;
  52485. +
  52486. +extern int Qwrong_type_argument;
  52487. +
  52488. +extern int Qargs_out_of_range;
  52489. +
  52490. +extern int Qvoid_variable;
  52491. +
  52492. +extern int Qvoid_function;
  52493. +
  52494. +extern int Qcyclic_function_indirection;
  52495. +
  52496. +extern int Qsetting_constant;
  52497. +
  52498. +extern int Qinvalid_read_syntax;
  52499. +
  52500. +extern int Qinvalid_function;
  52501. +
  52502. +extern int Qwrong_number_of_arguments;
  52503. +
  52504. +extern int Qno_catch;
  52505. +
  52506. +extern int Qend_of_file;
  52507. +
  52508. +extern int Qarith_error;
  52509. +
  52510. +extern int Qmark_inactive;
  52511. +
  52512. +extern int Qbeginning_of_buffer;
  52513. +
  52514. +extern int Qend_of_buffer;
  52515. +
  52516. +extern int Qbuffer_read_only;
  52517. +
  52518. +extern int Qintegerp;
  52519. +
  52520. +extern int Qnatnump;
  52521. +
  52522. +extern int Qwholenump;
  52523. +
  52524. +extern int Qsymbolp;
  52525. +
  52526. +extern int Qlistp;
  52527. +
  52528. +extern int Qconsp;
  52529. +
  52530. +extern int Qstringp;
  52531. +
  52532. +extern int Qarrayp;
  52533. +
  52534. +extern int Qsequencep;
  52535. +
  52536. +extern int Qbufferp;
  52537. +
  52538. +extern int Qchar_or_string_p;
  52539. +
  52540. +extern int Qmarkerp;
  52541. +
  52542. +extern int Qinteger_or_marker_p;
  52543. +
  52544. +extern int Qvectorp;
  52545. +
  52546. +extern int Qbuffer_or_string_p;
  52547. +
  52548. +extern int Qboundp;
  52549. +
  52550. +extern int Qfboundp;
  52551. +
  52552. +extern int Qcdr;
  52553. +
  52554. +extern int Qrange_error;
  52555. +
  52556. +extern int Qdomain_error;
  52557. +
  52558. +extern int Qsingularity_error;
  52559. +
  52560. +extern int Qoverflow_error;
  52561. +
  52562. +extern int Qunderflow_error;
  52563. +
  52564. +int wrong_type_argument(register int predicate,
  52565. +                        register int value);
  52566. +
  52567. +int pure_write_error(void);
  52568. +
  52569. +void args_out_of_range(int a1,
  52570. +                       int a2);
  52571. +
  52572. +void args_out_of_range_3(int a1,
  52573. +                         int a2,
  52574. +                         int a3);
  52575. +
  52576. +int make_number(int num);
  52577. +
  52578. +extern int sign_extend_temp;
  52579. +
  52580. +int sign_extend_lisp_int(int num);
  52581. +
  52582. +extern struct Lisp_Subr Seq;
  52583. +
  52584. +int Feq(int , int );
  52585. +
  52586. +extern struct Lisp_Subr Snull;
  52587. +
  52588. +int Fnull(int );
  52589. +
  52590. +extern struct Lisp_Subr Sconsp;
  52591. +
  52592. +int Fconsp(int );
  52593. +
  52594. +extern struct Lisp_Subr Satom;
  52595. +
  52596. +int Fatom(int );
  52597. +
  52598. +extern struct Lisp_Subr Slistp;
  52599. +
  52600. +int Flistp(int );
  52601. +
  52602. +extern struct Lisp_Subr Snlistp;
  52603. +
  52604. +int Fnlistp(int );
  52605. +
  52606. +extern struct Lisp_Subr Ssymbolp;
  52607. +
  52608. +int Fsymbolp(int );
  52609. +
  52610. +extern struct Lisp_Subr Svectorp;
  52611. +
  52612. +int Fvectorp(int );
  52613. +
  52614. +extern struct Lisp_Subr Sstringp;
  52615. +
  52616. +int Fstringp(int );
  52617. +
  52618. +extern struct Lisp_Subr Sarrayp;
  52619. +
  52620. +int Farrayp(int );
  52621. +
  52622. +extern struct Lisp_Subr Ssequencep;
  52623. +
  52624. +int Fsequencep(int );
  52625. +
  52626. +extern struct Lisp_Subr Sbufferp;
  52627. +
  52628. +int Fbufferp(int );
  52629. +
  52630. +extern struct Lisp_Subr Smarkerp;
  52631. +
  52632. +int Fmarkerp(int );
  52633. +
  52634. +extern struct Lisp_Subr Ssubrp;
  52635. +
  52636. +int Fsubrp(int );
  52637. +
  52638. +extern struct Lisp_Subr Sbyte_code_function_p;
  52639. +
  52640. +int Fbyte_code_function_p(int );
  52641. +
  52642. +extern struct Lisp_Subr Schar_or_string_p;
  52643. +
  52644. +int Fchar_or_string_p(int );
  52645. +
  52646. +extern struct Lisp_Subr Sintegerp;
  52647. +
  52648. +int Fintegerp(int );
  52649. +
  52650. +extern struct Lisp_Subr Sinteger_or_marker_p;
  52651. +
  52652. +int Finteger_or_marker_p(int );
  52653. +
  52654. +extern struct Lisp_Subr Snatnump;
  52655. +
  52656. +int Fnatnump(int );
  52657. +
  52658. +extern struct Lisp_Subr Snumberp;
  52659. +
  52660. +int Fnumberp(int );
  52661. +
  52662. +extern struct Lisp_Subr Snumber_or_marker_p;
  52663. +
  52664. +int Fnumber_or_marker_p(int );
  52665. +
  52666. +extern struct Lisp_Subr Scar;
  52667. +
  52668. +int Fcar(int );
  52669. +
  52670. +extern struct Lisp_Subr Scar_safe;
  52671. +
  52672. +int Fcar_safe(int );
  52673. +
  52674. +extern struct Lisp_Subr Scdr;
  52675. +
  52676. +int Fcdr(int );
  52677. +
  52678. +extern struct Lisp_Subr Scdr_safe;
  52679. +
  52680. +int Fcdr_safe(int );
  52681. +
  52682. +extern struct Lisp_Subr Ssetcar;
  52683. +
  52684. +int Fsetcar(int , int );
  52685. +
  52686. +extern struct Lisp_Subr Ssetcdr;
  52687. +
  52688. +int Fsetcdr(int , int );
  52689. +
  52690. +extern struct Lisp_Subr Sboundp;
  52691. +
  52692. +int Fboundp(int );
  52693. +
  52694. +extern struct Lisp_Subr Sfboundp;
  52695. +
  52696. +int Ffboundp(int );
  52697. +
  52698. +extern struct Lisp_Subr Smakunbound;
  52699. +
  52700. +int Fmakunbound(int );
  52701. +
  52702. +extern struct Lisp_Subr Sfmakunbound;
  52703. +
  52704. +int Ffmakunbound(int );
  52705. +
  52706. +extern struct Lisp_Subr Ssymbol_function;
  52707. +
  52708. +int Fsymbol_function(int );
  52709. +
  52710. +extern struct Lisp_Subr Ssymbol_plist;
  52711. +
  52712. +int Fsymbol_plist(int );
  52713. +
  52714. +extern struct Lisp_Subr Ssymbol_name;
  52715. +
  52716. +int Fsymbol_name(int );
  52717. +
  52718. +extern struct Lisp_Subr Sfset;
  52719. +
  52720. +int Ffset(int , int );
  52721. +
  52722. +extern struct Lisp_Subr Sdefalias;
  52723. +
  52724. +int Fdefalias(int , int );
  52725. +
  52726. +extern struct Lisp_Subr Sdefine_function;
  52727. +
  52728. +int Fdefine_function(int , int );
  52729. +
  52730. +extern struct Lisp_Subr Ssetplist;
  52731. +
  52732. +int Fsetplist(int , int );
  52733. +
  52734. +int do_symval_forwarding(register int valcontents);
  52735. +
  52736. +void store_symval_forwarding(int sym,
  52737. +                             register int valcontents,
  52738. +                             register int newval);
  52739. +
  52740. +int swap_in_symval_forwarding(int sym,
  52741. +                              int valcontents);
  52742. +
  52743. +int find_symbol_value(int sym);
  52744. +
  52745. +extern struct Lisp_Subr Ssymbol_value;
  52746. +
  52747. +int Fsymbol_value(int );
  52748. +
  52749. +extern struct Lisp_Subr Sset;
  52750. +
  52751. +int Fset(int , int );
  52752. +
  52753. +int default_value(int sym);
  52754. +
  52755. +extern struct Lisp_Subr Sdefault_boundp;
  52756. +
  52757. +int Fdefault_boundp(int );
  52758. +
  52759. +extern struct Lisp_Subr Sdefault_value;
  52760. +
  52761. +int Fdefault_value(int );
  52762. +
  52763. +extern struct Lisp_Subr Sset_default;
  52764. +
  52765. +int Fset_default(int , int );
  52766. +
  52767. +extern struct Lisp_Subr Ssetq_default;
  52768. +
  52769. +int Fsetq_default(int );
  52770. +
  52771. +extern struct Lisp_Subr Smake_variable_buffer_local;
  52772. +
  52773. +int Fmake_variable_buffer_local(int );
  52774. +
  52775. +extern struct Lisp_Subr Smake_local_variable;
  52776. +
  52777. +int Fmake_local_variable(int );
  52778. +
  52779. +extern struct Lisp_Subr Skill_local_variable;
  52780. +
  52781. +int Fkill_local_variable(int );
  52782. +
  52783. +int indirect_function(register int object);
  52784. +
  52785. +extern struct Lisp_Subr Sindirect_function;
  52786. +
  52787. +int Findirect_function(int );
  52788. +
  52789. +extern struct Lisp_Subr Saref;
  52790. +
  52791. +int Faref(int , int );
  52792. +
  52793. +extern struct Lisp_Subr Saset;
  52794. +
  52795. +int Faset(int , int , int );
  52796. +
  52797. +int Farray_length(register int array);
  52798. +
  52799. +int arithcompare(int num1,
  52800. +                 int num2,
  52801. +                 enum comparison comparison);
  52802. +
  52803. +extern struct Lisp_Subr Seqlsign;
  52804. +
  52805. +int Feqlsign(int , int );
  52806. +
  52807. +extern struct Lisp_Subr Slss;
  52808. +
  52809. +int Flss(int , int );
  52810. +
  52811. +extern struct Lisp_Subr Sgtr;
  52812. +
  52813. +int Fgtr(int , int );
  52814. +
  52815. +extern struct Lisp_Subr Sleq;
  52816. +
  52817. +int Fleq(int , int );
  52818. +
  52819. +extern struct Lisp_Subr Sgeq;
  52820. +
  52821. +int Fgeq(int , int );
  52822. +
  52823. +extern struct Lisp_Subr Sneq;
  52824. +
  52825. +int Fneq(int , int );
  52826. +
  52827. +extern struct Lisp_Subr Szerop;
  52828. +
  52829. +int Fzerop(int );
  52830. +
  52831. +int long_to_cons(unsigned long i);
  52832. +
  52833. +unsigned long cons_to_long(int c);
  52834. +
  52835. +extern struct Lisp_Subr Snumber_to_string;
  52836. +
  52837. +int Fnumber_to_string(int );
  52838. +
  52839. +extern struct Lisp_Subr Sstring_to_number;
  52840. +
  52841. +int Fstring_to_number(int );
  52842. +
  52843. +int arith_driver(enum arithop code,
  52844. +                 int nargs,
  52845. +                 register int * args);
  52846. +
  52847. +extern struct Lisp_Subr Splus;
  52848. +
  52849. +int Fplus(int , int * );
  52850. +
  52851. +extern struct Lisp_Subr Sminus;
  52852. +
  52853. +int Fminus(int , int * );
  52854. +
  52855. +extern struct Lisp_Subr Stimes;
  52856. +
  52857. +int Ftimes(int , int * );
  52858. +
  52859. +extern struct Lisp_Subr Squo;
  52860. +
  52861. +int Fquo(int , int * );
  52862. +
  52863. +extern struct Lisp_Subr Srem;
  52864. +
  52865. +int Frem(int , int );
  52866. +
  52867. +extern struct Lisp_Subr Smod;
  52868. +
  52869. +int Fmod(int , int );
  52870. +
  52871. +extern struct Lisp_Subr Smax;
  52872. +
  52873. +int Fmax(int , int * );
  52874. +
  52875. +extern struct Lisp_Subr Smin;
  52876. +
  52877. +int Fmin(int , int * );
  52878. +
  52879. +extern struct Lisp_Subr Slogand;
  52880. +
  52881. +int Flogand(int , int * );
  52882. +
  52883. +extern struct Lisp_Subr Slogior;
  52884. +
  52885. +int Flogior(int , int * );
  52886. +
  52887. +extern struct Lisp_Subr Slogxor;
  52888. +
  52889. +int Flogxor(int , int * );
  52890. +
  52891. +extern struct Lisp_Subr Sash;
  52892. +
  52893. +int Fash(int , int );
  52894. +
  52895. +extern struct Lisp_Subr Slsh;
  52896. +
  52897. +int Flsh(int , int );
  52898. +
  52899. +extern struct Lisp_Subr Sadd1;
  52900. +
  52901. +int Fadd1(int );
  52902. +
  52903. +extern struct Lisp_Subr Ssub1;
  52904. +
  52905. +int Fsub1(int );
  52906. +
  52907. +extern struct Lisp_Subr Slognot;
  52908. +
  52909. +int Flognot(int );
  52910. +
  52911. +void syms_of_data(void);
  52912. +
  52913. +void arith_error(int signo);
  52914. +
  52915. +int init_data(void);
  52916. +
  52917. diff -ru --new-file baseline/fsf/emacs/src/dired.c amiga/fsf/emacs/src/dired.c
  52918. --- baseline/fsf/emacs/src/dired.c    Tue Jun 14 20:41:11 1994
  52919. +++ amiga/fsf/emacs/src/dired.c    Sun Oct 15 17:10:24 1995
  52920. @@ -496,7 +496,11 @@
  52921.  
  52922.    bcopy (XSTRING (dirname)->data, fullname, pos);
  52923.  #ifndef VMS
  52924. +#ifdef AMIGA
  52925. +  if ((fullname[pos - 1] != '/')&&(fullname[pos - 1] != ':'))
  52926. +#else
  52927.    if (fullname[pos - 1] != '/')
  52928. +#endif
  52929.      fullname[pos++] = '/';
  52930.  #endif
  52931.  
  52932. diff -ru --new-file baseline/fsf/emacs/src/dired_protos.h amiga/fsf/emacs/src/dired_protos.h
  52933. --- baseline/fsf/emacs/src/dired_protos.h    Wed Dec 31 17:00:00 1969
  52934. +++ amiga/fsf/emacs/src/dired_protos.h    Sun Oct 15 17:10:26 1995
  52935. @@ -0,0 +1,45 @@
  52936. +/* Prototypes for functions defined in
  52937. +dired.c
  52938. + */
  52939. +
  52940. +extern int Vcompletion_ignored_extensions;
  52941. +
  52942. +extern int Qcompletion_ignore_case;
  52943. +
  52944. +extern int Qdirectory_files;
  52945. +
  52946. +extern int Qfile_name_completion;
  52947. +
  52948. +extern int Qfile_name_all_completions;
  52949. +
  52950. +extern int Qfile_attributes;
  52951. +
  52952. +extern struct Lisp_Subr Sdirectory_files;
  52953. +
  52954. +int Fdirectory_files(int , int , int , int );
  52955. +
  52956. +extern struct Lisp_Subr Sfile_name_completion;
  52957. +
  52958. +int Ffile_name_completion(int , int );
  52959. +
  52960. +extern struct Lisp_Subr Sfile_name_all_completions;
  52961. +
  52962. +int Ffile_name_all_completions(int , int );
  52963. +
  52964. +int file_name_completion(int file,
  52965. +                         int dirname,
  52966. +                         int all_flag,
  52967. +                         int ver_flag);
  52968. +
  52969. +int file_name_completion_stat(int dirname,
  52970. +                              struct dirent * dp,
  52971. +                              struct stat * st_addr);
  52972. +
  52973. +int make_time(int time);
  52974. +
  52975. +extern struct Lisp_Subr Sfile_attributes;
  52976. +
  52977. +int Ffile_attributes(int );
  52978. +
  52979. +int syms_of_dired(void);
  52980. +
  52981. diff -ru --new-file baseline/fsf/emacs/src/dispnew.c amiga/fsf/emacs/src/dispnew.c
  52982. --- baseline/fsf/emacs/src/dispnew.c    Sun Aug 28 17:24:24 1994
  52983. +++ amiga/fsf/emacs/src/dispnew.c    Sun Oct 15 17:10:29 1995
  52984. @@ -50,6 +50,10 @@
  52985.  
  52986.  #include <errno.h>
  52987.  
  52988. +#ifdef USE_PROTOS
  52989. +#include "protos.h"
  52990. +#endif
  52991. +
  52992.  #define max(a, b) ((a) > (b) ? (a) : (b))
  52993.  #define min(a, b) ((a) < (b) ? (a) : (b))
  52994.  
  52995. @@ -494,7 +498,8 @@
  52996.  clear_frame_records (frame)
  52997.       register FRAME_PTR frame;
  52998.  {
  52999. -  bzero (FRAME_CURRENT_GLYPHS (frame)->enable, FRAME_HEIGHT (frame));
  53000. +  if(FRAME_CURRENT_GLYPHS (frame))
  53001. +      bzero (FRAME_CURRENT_GLYPHS (frame)->enable, FRAME_HEIGHT (frame));
  53002.  }
  53003.  
  53004.  /* Prepare to display on line VPOS starting at HPOS within it.  */
  53005. @@ -1196,8 +1201,26 @@
  53006.    if (preempt_count <= 0)
  53007.      preempt_count = 1;
  53008.  
  53009. +#ifdef AMIGA
  53010. +  start_count(0); /* CHFIXME: check, evt. remove? define? */
  53011. +#endif
  53012. +
  53013.    if (FRAME_HEIGHT (f) == 0) abort (); /* Some bug zeros some core */
  53014.  
  53015. +#ifdef FAST_DISPLAY
  53016. +  /* Don't compute for i/d line if just want cursor motion. */
  53017. +  /* Don't allow preemption, etc either */
  53018. +  for (i = 0; i < FRAME_HEIGHT (f); i++)
  53019. +    if (desired_frame->enable[i])
  53020. +      break;
  53021. +
  53022. +  if (i >= FRAME_HEIGHT (f))
  53023. +    {
  53024. +      update_begin();
  53025. +      goto update_done;
  53026. +    }
  53027. +#endif
  53028. +
  53029.    detect_input_pending ();
  53030.    if (input_pending && !force)
  53031.      {
  53032. @@ -1214,12 +1237,14 @@
  53033.    current_frame = FRAME_CURRENT_GLYPHS (f);
  53034.    desired_frame = FRAME_DESIRED_GLYPHS (f);
  53035.  
  53036. +#ifndef FAST_DISPLAY
  53037.    /* See if any of the desired lines are enabled; don't compute for
  53038.       i/d line if just want cursor motion. */
  53039.    for (i = 0; i < FRAME_HEIGHT (f); i++)
  53040.      if (desired_frame->enable[i])
  53041.        break;
  53042. -
  53043. +#endif
  53044. +  
  53045.    /* Try doing i/d line, if not yet inhibited.  */
  53046.    if (!inhibit_hairy_id && i < FRAME_HEIGHT (f))
  53047.      force |= scrolling (f);
  53048. @@ -1293,6 +1318,9 @@
  53049.      downto += current_frame->pix_height[i];
  53050.  #endif
  53051.      }
  53052. +#ifdef FAST_DISPLAY
  53053. +update_done:
  53054. +#endif
  53055.    pause = (i < FRAME_HEIGHT (f) - 1) ? i : 0;
  53056.  
  53057.    /* Now just clean up termcap drivers and set cursor, etc.  */
  53058. @@ -1350,8 +1378,12 @@
  53059.  
  53060.    if (FRAME_HEIGHT (f) == 0) abort (); /* Some bug zeros some core */
  53061.    display_completed = !pause;
  53062. -
  53063. -  bzero (FRAME_DESIRED_GLYPHS (f)->enable, FRAME_HEIGHT (f));
  53064. +  
  53065. +  if(FRAME_DESIRED_GLYPHS (f))
  53066. +      bzero (FRAME_DESIRED_GLYPHS (f)->enable, FRAME_HEIGHT (f));
  53067. +#ifdef AMIGA
  53068. +  stop_count(0);
  53069. +#endif
  53070.    return pause;
  53071.  }
  53072.  
  53073. @@ -1544,6 +1576,57 @@
  53074.    else
  53075.      reassert_line_highlight (desired_frame->highlight[vpos], vpos);
  53076.  
  53077. +#ifdef FAST_DISPLAY
  53078. +  if (current_frame->enable[vpos])
  53079. +  {
  53080. +      obody = current_frame->contents[vpos];
  53081. +      olen = current_frame->used[vpos];
  53082. +  }
  53083. +  else olen = 0;
  53084. +
  53085. +  nbody = desired_frame->contents[vpos];
  53086. +  nlen = desired_frame->used[vpos];
  53087. +
  53088. +  /* Pretend trailing spaces are not there at all,
  53089. +     unless for one reason or another we must write all spaces.  */
  53090. +  /* We know that the previous character byte contains 0.  */
  53091. +  if (! new_screen->highlight[vpos])
  53092. +  {
  53093. +      if (!must_write_spaces)
  53094. +      while (nbody[nlen - 1] == ' ')
  53095. +          nlen--;
  53096. +  }
  53097. +  else
  53098. +  {
  53099. +      /* For an inverse-video line, give it extra trailing spaces
  53100. +     all the way to the screen edge
  53101. +     so that the reverse video extends all the way across.  */
  53102. +      while (nlen < FRAME_WIDTH(current_frame) - 1)
  53103. +      nbody[nlen++] = ' ';
  53104. +  }
  53105. +  
  53106. +  while (olen > 0 && nlen > 0 && *obody == *nbody)
  53107. +  {
  53108. +      olen--; nlen--; obody++; nbody++;
  53109. +  }
  53110. +  if (olen > 0 || nlen > 0)
  53111. +      move_cursor (vpos, nbody - new_screen->contents[vpos]);
  53112. +  if (nlen > 0) output_chars (nbody, nlen);
  53113. +  
  53114. +  if (olen > nlen && new_screen->used[vpos] != screen_width)
  53115. +      clear_end_of_line(current_screen->used[vpos]);
  53116. +  /* Exchange contents between current_screen and new_screen.  */
  53117. +  temp = new_screen->contents[vpos];
  53118. +  new_screen->contents[vpos] = current_screen->contents[vpos];
  53119. +  current_screen->contents[vpos] = temp;
  53120. +
  53121. +  /* One way or another, this will enable the line being updated.  */
  53122. +  current_screen->enable[vpos] = 1;
  53123. +  current_screen->used[vpos] = new_screen->used[vpos];
  53124. +  current_screen->highlight[vpos] = new_screen->highlight[vpos];
  53125. +
  53126. +#else /* not FAST_DISPLAY */
  53127.    if (! current_frame->enable[vpos])
  53128.      {
  53129.        olen = 0;
  53130. @@ -1788,7 +1871,7 @@
  53131.        olen = nlen - (nsp - osp);
  53132.      }
  53133.        cursor_to (vpos, osp);
  53134. -      insert_glyphs ((char *)0, nsp - osp);
  53135. +      insert_glyphs ((GLYPH *) 0, nsp - osp);
  53136.      }
  53137.    olen += nsp - osp;
  53138.  
  53139. @@ -1860,6 +1943,7 @@
  53140.    temp1 = desired_frame->charstarts[vpos];
  53141.    desired_frame->charstarts[vpos] = current_frame->charstarts[vpos];
  53142.    current_frame->charstarts[vpos] = temp1;
  53143. +#endif /* not FAST_DISPLAY */
  53144.  }
  53145.  
  53146.  /* A vector of size >= NFRAMES + 3 * NBUFFERS + 1, containing the session's
  53147. @@ -2374,6 +2458,28 @@
  53148.       If the DISPLAY environment variable is set, try to use X, and die
  53149.       with an error message if that doesn't work.  */
  53150.  
  53151. +#ifdef AMIGA
  53152. +  amiga_term_open();
  53153. +  if (!inhibit_window_system) 
  53154. +    {
  53155. +      amiga_term_init();
  53156. +      /* Using Intuition V2.04 */
  53157. +      Vwindow_system = intern ("intuition");
  53158. +      Vwindow_system_version = make_number (2);
  53159. +
  53160. +      /* CHFIXME: following ok?, move to amiga_term_init? */
  53161. +      
  53162. +      remake_frame_glyphs (selected_frame);
  53163. +      calculate_costs (selected_frame);
  53164. +
  53165. +      /* X and Y coordinates of the cursor between updates. */
  53166. +      FRAME_CURSOR_X (selected_frame) = 0;
  53167. +      FRAME_CURSOR_Y (selected_frame) = 0;
  53168. +
  53169. +      return;
  53170. +    }
  53171. +#endif /* AMIGA */
  53172. +
  53173.  #ifdef HAVE_X_WINDOWS
  53174.    if (! display_arg)
  53175.      {
  53176. @@ -2454,7 +2560,7 @@
  53177.  
  53178.  syms_of_display ()
  53179.  {
  53180. -#ifdef MULTI_FRAME
  53181. +#if defined(MULTI_FRAME) || defined(AMIGA) /* CHFIXME: why disabled if non MULTI_FRAME? */
  53182.    defsubr (&Sredraw_frame);
  53183.  #endif
  53184.    defsubr (&Sredraw_display);
  53185. diff -ru --new-file baseline/fsf/emacs/src/dispnew_protos.h amiga/fsf/emacs/src/dispnew_protos.h
  53186. --- baseline/fsf/emacs/src/dispnew_protos.h    Wed Dec 31 17:00:00 1969
  53187. +++ amiga/fsf/emacs/src/dispnew_protos.h    Sun Oct 15 17:10:31 1995
  53188. @@ -0,0 +1,164 @@
  53189. +/* Prototypes for functions defined in
  53190. +dispnew.c
  53191. + */
  53192. +
  53193. +extern int frame_garbaged;
  53194. +
  53195. +extern int display_completed;
  53196. +
  53197. +extern int visible_bell;
  53198. +
  53199. +extern int inverse_video;
  53200. +
  53201. +extern int baud_rate;
  53202. +
  53203. +extern int Vwindow_system;
  53204. +
  53205. +extern int Vwindow_system_version;
  53206. +
  53207. +extern int Vglyph_table;
  53208. +
  53209. +extern int Vstandard_display_table;
  53210. +
  53211. +extern int cursor_in_echo_area;
  53212. +
  53213. +extern int selected_frame;
  53214. +
  53215. +extern int last_nonminibuf_frame;
  53216. +
  53217. +extern struct frame the_only_frame;
  53218. +
  53219. +extern struct frame_glyphs ** ophys_lines;
  53220. +
  53221. +extern int ophys_lines_length;
  53222. +
  53223. +extern struct __iobuf * termscript;
  53224. +
  53225. +extern struct cm Wcm;
  53226. +
  53227. +extern int delayed_size_change;
  53228. +
  53229. +extern struct Lisp_Subr Sredraw_frame;
  53230. +
  53231. +int Fredraw_frame(int );
  53232. +
  53233. +extern struct Lisp_Subr Sredraw_display;
  53234. +
  53235. +int Fredraw_display(void);
  53236. +
  53237. +void redraw_garbaged_frames(void);
  53238. +
  53239. +struct frame_glyphs * make_frame_glyphs(register int frame,
  53240. +                                        int empty);
  53241. +
  53242. +void free_frame_glyphs(int frame,
  53243. +                       struct frame_glyphs * glyphs);
  53244. +
  53245. +void remake_frame_glyphs(int frame);
  53246. +
  53247. +int line_hash_code(register struct frame_glyphs * m,
  53248. +                   int vpos);
  53249. +
  53250. +unsigned int line_draw_cost(struct frame_glyphs * m,
  53251. +                            int vpos);
  53252. +
  53253. +int cancel_line(int vpos,
  53254. +                register int frame);
  53255. +
  53256. +int clear_frame_records(register int frame);
  53257. +
  53258. +void get_display_line(register int frame,
  53259. +                      int vpos,
  53260. +                      register int hpos);
  53261. +
  53262. +void safe_bcopy(char * from,
  53263. +                char * to,
  53264. +                int size);
  53265. +
  53266. +void rotate_vector(char * vector,
  53267. +                   int size,
  53268. +                   int distance);
  53269. +
  53270. +int scroll_frame_lines(register int frame,
  53271. +                       int from,
  53272. +                       int end,
  53273. +                       int amount,
  53274. +                       int newpos);
  53275. +
  53276. +int preserve_other_columns(struct window * w);
  53277. +
  53278. +void adjust_window_charstarts(struct window * w,
  53279. +                              int vpos,
  53280. +                              int adjust);
  53281. +
  53282. +int verify_charstarts(struct window * w);
  53283. +
  53284. +int cancel_my_columns(struct window * w);
  53285. +
  53286. +int direct_output_for_insert(int g);
  53287. +
  53288. +int direct_output_forward_char(int n);
  53289. +
  53290. +int update_frame(int f,
  53291. +                 int force,
  53292. +                 int inhibit_hairy_id);
  53293. +
  53294. +void quit_error_check(void);
  53295. +
  53296. +int scrolling(int frame);
  53297. +
  53298. +int buffer_posn_from_coords(struct window * window,
  53299. +                            int col,
  53300. +                            int line);
  53301. +
  53302. +int count_blanks(register unsigned int * r);
  53303. +
  53304. +int count_match(unsigned int * str1,
  53305. +                unsigned int * str2);
  53306. +
  53307. +void update_line(register int frame,
  53308. +                 int vpos);
  53309. +
  53310. +extern struct Lisp_Subr Sopen_termscript;
  53311. +
  53312. +int Fopen_termscript(int );
  53313. +
  53314. +void window_change_signal(void);
  53315. +
  53316. +int do_pending_window_change(void);
  53317. +
  53318. +int change_frame_size(register int frame,
  53319. +                      int newheight,
  53320. +                      int newwidth,
  53321. +                      int pretend,
  53322. +                      int delay);
  53323. +
  53324. +extern struct Lisp_Subr Ssend_string_to_terminal;
  53325. +
  53326. +int Fsend_string_to_terminal(int );
  53327. +
  53328. +extern struct Lisp_Subr Sding;
  53329. +
  53330. +int Fding(int );
  53331. +
  53332. +int bitch_at_user(void);
  53333. +
  53334. +extern struct Lisp_Subr Ssleep_for;
  53335. +
  53336. +int Fsleep_for(int , int );
  53337. +
  53338. +int sit_for(int sec,
  53339. +            int usec,
  53340. +            int reading,
  53341. +            int display);
  53342. +
  53343. +extern struct Lisp_Subr Ssit_for;
  53344. +
  53345. +int Fsit_for(int , int , int );
  53346. +
  53347. +extern char * terminal_type;
  53348. +
  53349. +int init_display(void);
  53350. +
  53351. +int syms_of_display(void);
  53352. +
  53353. diff -ru --new-file baseline/fsf/emacs/src/doc.c amiga/fsf/emacs/src/doc.c
  53354. --- baseline/fsf/emacs/src/doc.c    Wed Aug 17 13:05:55 1994
  53355. +++ amiga/fsf/emacs/src/doc.c    Sun Oct 15 17:10:34 1995
  53356. @@ -36,6 +36,7 @@
  53357.  #endif
  53358.  
  53359.  #include "lisp.h"
  53360. +#include "paths.h"
  53361.  #include "buffer.h"
  53362.  #include "keyboard.h"
  53363.  
  53364. @@ -280,7 +281,11 @@
  53365.  
  53366.  #ifndef CANNOT_DUMP
  53367.    name = (char *) alloca (XSTRING (filename)->size + 14);
  53368. +#ifdef RELPATH_DOC
  53369. +  strcpy (name, RELPATH_DOC);
  53370. +#else
  53371.    strcpy (name, "../etc/");
  53372. +#endif
  53373.  #else /* CANNOT_DUMP */
  53374.    CHECK_STRING (Vdoc_directory, 0);
  53375.    name = (char *) alloca (XSTRING (filename)->size +
  53376. diff -ru --new-file baseline/fsf/emacs/src/doc_protos.h amiga/fsf/emacs/src/doc_protos.h
  53377. --- baseline/fsf/emacs/src/doc_protos.h    Wed Dec 31 17:00:00 1969
  53378. +++ amiga/fsf/emacs/src/doc_protos.h    Sun Oct 15 17:10:37 1995
  53379. @@ -0,0 +1,29 @@
  53380. +/* Prototypes for functions defined in
  53381. +doc.c
  53382. + */
  53383. +
  53384. +extern int Vdoc_file_name;
  53385. +
  53386. +int get_doc_string(long filepos);
  53387. +
  53388. +extern struct Lisp_Subr Sdocumentation;
  53389. +
  53390. +int Fdocumentation(int , int );
  53391. +
  53392. +extern struct Lisp_Subr Sdocumentation_property;
  53393. +
  53394. +int Fdocumentation_property(int , int , int );
  53395. +
  53396. +void store_function_docstring(int fun,
  53397. +                              int offset);
  53398. +
  53399. +extern struct Lisp_Subr Ssnarf_documentation;
  53400. +
  53401. +int Fsnarf_documentation(int );
  53402. +
  53403. +extern struct Lisp_Subr Ssubstitute_command_keys;
  53404. +
  53405. +int Fsubstitute_command_keys(int );
  53406. +
  53407. +int syms_of_doc(void);
  53408. +
  53409. diff -ru --new-file baseline/fsf/emacs/src/dodump.sh amiga/fsf/emacs/src/dodump.sh
  53410. --- baseline/fsf/emacs/src/dodump.sh    Wed Dec 31 17:00:00 1969
  53411. +++ amiga/fsf/emacs/src/dodump.sh    Sun Oct 15 17:10:39 1995
  53412. @@ -0,0 +1,5 @@
  53413. +semacs
  53414. +if -f GNUEmacs-19.28:etc/EMACS-DATA then ; rm GNUEmacs-19.28:etc/EMACS-DATA ; endif
  53415. +Stack 500000
  53416. +stack 500000
  53417. +/src/temacs -batch -l loadup dump
  53418. diff -ru --new-file baseline/fsf/emacs/src/doprnt_protos.h amiga/fsf/emacs/src/doprnt_protos.h
  53419. --- baseline/fsf/emacs/src/doprnt_protos.h    Wed Dec 31 17:00:00 1969
  53420. +++ amiga/fsf/emacs/src/doprnt_protos.h    Sun Oct 15 17:10:40 1995
  53421. @@ -0,0 +1,11 @@
  53422. +/* Prototypes for functions defined in
  53423. +doprnt.c
  53424. + */
  53425. +
  53426. +int doprnt(char * buffer,
  53427. +           register int bufsize,
  53428. +           char * format,
  53429. +           char * format_end,
  53430. +           int nargs,
  53431. +           char ** args);
  53432. +
  53433. diff -ru --new-file baseline/fsf/emacs/src/dostrip.c amiga/fsf/emacs/src/dostrip.c
  53434. --- baseline/fsf/emacs/src/dostrip.c    Wed Dec 31 17:00:00 1969
  53435. +++ amiga/fsf/emacs/src/dostrip.c    Sun Oct 15 17:10:42 1995
  53436. @@ -0,0 +1,23 @@
  53437. +#include <stdio.h>
  53438. +
  53439. +#define SIZE 2048
  53440. +
  53441. +main(int argc, char **argv)
  53442. +{
  53443. +    char buf[SIZE];
  53444. +
  53445. +    buf[SIZE - 1] = 0;
  53446. +    while (fgets(buf, SIZE - 1, stdin))
  53447. +    {
  53448. +    if (buf[0] != '#')
  53449. +    {
  53450. +        char *p = buf, *e;
  53451. +
  53452. +        while (*p && *p == ' ') p++;
  53453. +        e = p + strlen(p);
  53454. +        while (e > p && (e[-1] == ' ' || e[-1] == '\t' || e[-1] == '\n')) e--;
  53455. +        *e = '\0';
  53456. +        if (*p) puts(p);
  53457. +    }
  53458. +    }
  53459. +}
  53460. diff -ru --new-file baseline/fsf/emacs/src/dostrip.lnk amiga/fsf/emacs/src/dostrip.lnk
  53461. --- baseline/fsf/emacs/src/dostrip.lnk    Wed Dec 31 17:00:00 1969
  53462. +++ amiga/fsf/emacs/src/dostrip.lnk    Sun Oct 15 17:10:43 1995
  53463. @@ -0,0 +1,7 @@
  53464. +FROM LIB:c.o "dostrip.o"
  53465. +TO "dostrip"
  53466. +LIB LIB:scm881.lib
  53467. +    LIB:sc.lib LIB:amiga.lib
  53468. +ADDSYM
  53469. +QUIET
  53470. +
  53471. diff -ru --new-file baseline/fsf/emacs/src/editfns.c amiga/fsf/emacs/src/editfns.c
  53472. --- baseline/fsf/emacs/src/editfns.c    Tue Aug 30 00:18:50 1994
  53473. +++ amiga/fsf/emacs/src/editfns.c    Sun Oct 15 17:10:46 1995
  53474. @@ -920,10 +920,10 @@
  53475.    result = make_uninit_string (end - start);
  53476.    bcopy (&FETCH_CHAR (start), XSTRING (result)->data, end - start);
  53477.  
  53478. +#ifdef USE_TEXT_PROPERTIES
  53479.    tem = Fnext_property_change (make_number (start), Qnil, make_number (end));
  53480.    tem1 = Ftext_properties_at (make_number (start), Qnil);
  53481.  
  53482. -#ifdef USE_TEXT_PROPERTIES
  53483.    if (XINT (tem) != end || !NILP (tem1))
  53484.      copy_intervals_to_string (result, current_buffer, start, end - start);
  53485.  #endif
  53486. @@ -1384,7 +1384,10 @@
  53487.  }
  53488.  
  53489.  /* Buffer for the most recent text displayed by Fmessage.  */
  53490. -static char *message_text;
  53491. +#ifndef AMIGA
  53492. +static
  53493. +#endif
  53494. +char *message_text;
  53495.  
  53496.  /* Allocated length of that buffer.  */
  53497.  static int message_length;
  53498. diff -ru --new-file baseline/fsf/emacs/src/editfns_protos.h amiga/fsf/emacs/src/editfns_protos.h
  53499. --- baseline/fsf/emacs/src/editfns_protos.h    Wed Dec 31 17:00:00 1969
  53500. +++ amiga/fsf/emacs/src/editfns_protos.h    Sun Oct 15 17:10:48 1995
  53501. @@ -0,0 +1,254 @@
  53502. +/* Prototypes for functions defined in
  53503. +editfns.c
  53504. + */
  53505. +
  53506. +extern int Vsystem_name;
  53507. +
  53508. +extern int Vuser_real_name;
  53509. +
  53510. +extern int Vuser_full_name;
  53511. +
  53512. +extern int Vuser_name;
  53513. +
  53514. +void init_editfns(void);
  53515. +
  53516. +extern struct Lisp_Subr Schar_to_string;
  53517. +
  53518. +int Fchar_to_string(int );
  53519. +
  53520. +extern struct Lisp_Subr Sstring_to_char;
  53521. +
  53522. +int Fstring_to_char(int );
  53523. +
  53524. +int buildmark(int val);
  53525. +
  53526. +extern struct Lisp_Subr Spoint;
  53527. +
  53528. +int Fpoint(void);
  53529. +
  53530. +extern struct Lisp_Subr Spoint_marker;
  53531. +
  53532. +int Fpoint_marker(void);
  53533. +
  53534. +int clip_to_bounds(int lower,
  53535. +                   int num,
  53536. +                   int upper);
  53537. +
  53538. +extern struct Lisp_Subr Sgoto_char;
  53539. +
  53540. +int Fgoto_char(int );
  53541. +
  53542. +int region_limit(int beginningp);
  53543. +
  53544. +extern struct Lisp_Subr Sregion_beginning;
  53545. +
  53546. +int Fregion_beginning(void);
  53547. +
  53548. +extern struct Lisp_Subr Sregion_end;
  53549. +
  53550. +int Fregion_end(void);
  53551. +
  53552. +extern struct Lisp_Subr Smark_marker;
  53553. +
  53554. +int Fmark_marker(void);
  53555. +
  53556. +int save_excursion_save(void);
  53557. +
  53558. +int save_excursion_restore(register int info);
  53559. +
  53560. +extern struct Lisp_Subr Ssave_excursion;
  53561. +
  53562. +int Fsave_excursion(int );
  53563. +
  53564. +extern struct Lisp_Subr Sbufsize;
  53565. +
  53566. +int Fbufsize(void);
  53567. +
  53568. +extern struct Lisp_Subr Spoint_min;
  53569. +
  53570. +int Fpoint_min(void);
  53571. +
  53572. +extern struct Lisp_Subr Spoint_min_marker;
  53573. +
  53574. +int Fpoint_min_marker(void);
  53575. +
  53576. +extern struct Lisp_Subr Spoint_max;
  53577. +
  53578. +int Fpoint_max(void);
  53579. +
  53580. +extern struct Lisp_Subr Spoint_max_marker;
  53581. +
  53582. +int Fpoint_max_marker(void);
  53583. +
  53584. +extern struct Lisp_Subr Sfollowing_char;
  53585. +
  53586. +int Ffollowing_char(void);
  53587. +
  53588. +extern struct Lisp_Subr Sprevious_char;
  53589. +
  53590. +int Fprevious_char(void);
  53591. +
  53592. +extern struct Lisp_Subr Sbobp;
  53593. +
  53594. +int Fbobp(void);
  53595. +
  53596. +extern struct Lisp_Subr Seobp;
  53597. +
  53598. +int Feobp(void);
  53599. +
  53600. +extern struct Lisp_Subr Sbolp;
  53601. +
  53602. +int Fbolp(void);
  53603. +
  53604. +extern struct Lisp_Subr Seolp;
  53605. +
  53606. +int Feolp(void);
  53607. +
  53608. +extern struct Lisp_Subr Schar_after;
  53609. +
  53610. +int Fchar_after(int );
  53611. +
  53612. +extern struct Lisp_Subr Suser_login_name;
  53613. +
  53614. +int Fuser_login_name(void);
  53615. +
  53616. +extern struct Lisp_Subr Suser_real_login_name;
  53617. +
  53618. +int Fuser_real_login_name(void);
  53619. +
  53620. +extern struct Lisp_Subr Suser_uid;
  53621. +
  53622. +int Fuser_uid(void);
  53623. +
  53624. +extern struct Lisp_Subr Suser_real_uid;
  53625. +
  53626. +int Fuser_real_uid(void);
  53627. +
  53628. +extern struct Lisp_Subr Suser_full_name;
  53629. +
  53630. +int Fuser_full_name(void);
  53631. +
  53632. +extern struct Lisp_Subr Ssystem_name;
  53633. +
  53634. +int Fsystem_name(void);
  53635. +
  53636. +extern struct Lisp_Subr Semacs_pid;
  53637. +
  53638. +int Femacs_pid(void);
  53639. +
  53640. +extern struct Lisp_Subr Scurrent_time;
  53641. +
  53642. +int Fcurrent_time(void);
  53643. +
  53644. +int lisp_time_argument(int specified_time,
  53645. +                       long * result);
  53646. +
  53647. +extern struct Lisp_Subr Scurrent_time_string;
  53648. +
  53649. +int Fcurrent_time_string(int );
  53650. +
  53651. +long difftm(struct tm * a,
  53652. +            struct tm * b);
  53653. +
  53654. +extern struct Lisp_Subr Scurrent_time_zone;
  53655. +
  53656. +int Fcurrent_time_zone(int );
  53657. +
  53658. +void insert1(int arg);
  53659. +
  53660. +extern struct Lisp_Subr Sinsert;
  53661. +
  53662. +int Finsert(int , int * );
  53663. +
  53664. +extern struct Lisp_Subr Sinsert_and_inherit;
  53665. +
  53666. +int Finsert_and_inherit(int , int * );
  53667. +
  53668. +extern struct Lisp_Subr Sinsert_before_markers;
  53669. +
  53670. +int Finsert_before_markers(int , int * );
  53671. +
  53672. +extern struct Lisp_Subr Sinsert_and_inherit_before_marke;
  53673. +
  53674. +int Finsert_and_inherit_before_marke(int , int * );
  53675. +
  53676. +extern struct Lisp_Subr Sinsert_char;
  53677. +
  53678. +int Finsert_char(int , int );
  53679. +
  53680. +int make_buffer_string(int start,
  53681. +                       int end);
  53682. +
  53683. +extern struct Lisp_Subr Sbuffer_substring;
  53684. +
  53685. +int Fbuffer_substring(int , int );
  53686. +
  53687. +extern struct Lisp_Subr Sbuffer_string;
  53688. +
  53689. +int Fbuffer_string(void);
  53690. +
  53691. +extern struct Lisp_Subr Sinsert_buffer_substring;
  53692. +
  53693. +int Finsert_buffer_substring(int , int , int );
  53694. +
  53695. +extern struct Lisp_Subr Scompare_buffer_substrings;
  53696. +
  53697. +int Fcompare_buffer_substrings(int , int , int , int , int , int );
  53698. +
  53699. +extern struct Lisp_Subr Ssubst_char_in_region;
  53700. +
  53701. +int Fsubst_char_in_region(int , int , int , int , int );
  53702. +
  53703. +extern struct Lisp_Subr Stranslate_region;
  53704. +
  53705. +int Ftranslate_region(int , int , int );
  53706. +
  53707. +extern struct Lisp_Subr Sdelete_region;
  53708. +
  53709. +int Fdelete_region(int , int );
  53710. +
  53711. +extern struct Lisp_Subr Swiden;
  53712. +
  53713. +int Fwiden(void);
  53714. +
  53715. +extern struct Lisp_Subr Snarrow_to_region;
  53716. +
  53717. +int Fnarrow_to_region(int , int );
  53718. +
  53719. +int save_restriction_save(void);
  53720. +
  53721. +int save_restriction_restore(int data);
  53722. +
  53723. +extern struct Lisp_Subr Ssave_restriction;
  53724. +
  53725. +int Fsave_restriction(int );
  53726. +
  53727. +extern char * message_text;
  53728. +
  53729. +extern int message_length;
  53730. +
  53731. +extern struct Lisp_Subr Smessage;
  53732. +
  53733. +int Fmessage(int , int * );
  53734. +
  53735. +extern struct Lisp_Subr Sformat;
  53736. +
  53737. +int Fformat(int , int * );
  53738. +
  53739. +int format1(char * string1, ...);
  53740. +
  53741. +extern struct Lisp_Subr Schar_equal;
  53742. +
  53743. +int Fchar_equal(int , int );
  53744. +
  53745. +void transpose_markers(register int start1,
  53746. +                       register int end1,
  53747. +                       register int start2,
  53748. +                       register int end2);
  53749. +
  53750. +extern struct Lisp_Subr Stranspose_regions;
  53751. +
  53752. +int Ftranspose_regions(int , int , int , int , int );
  53753. +
  53754. +void syms_of_editfns(void);
  53755. +
  53756. diff -ru --new-file baseline/fsf/emacs/src/emacs.c amiga/fsf/emacs/src/emacs.c
  53757. --- baseline/fsf/emacs/src/emacs.c    Wed Oct  5 22:07:12 1994
  53758. +++ amiga/fsf/emacs/src/emacs.c    Sun Oct 15 17:10:50 1995
  53759. @@ -42,6 +42,7 @@
  53760.  #endif
  53761.  
  53762.  #include "lisp.h"
  53763. +#include "paths.h"
  53764.  #include "commands.h"
  53765.  #include "intervals.h"
  53766.  
  53767. @@ -49,6 +50,10 @@
  53768.  #include "syssignal.h"
  53769.  #include "process.h"
  53770.  
  53771. +#ifdef AMIGA_DUMP
  53772. +#define HAVE_SHM        /* Simplifies the ifdefs */
  53773. +#endif
  53774. +
  53775.  #ifndef O_RDWR
  53776.  #define O_RDWR 2
  53777.  #endif
  53778. @@ -241,15 +246,27 @@
  53779.          }
  53780.  
  53781.        /* See if dir's parent contains those subdirs.  */
  53782. +#ifdef RELPATH_LIBSRC
  53783. +      tem = Fexpand_file_name (build_string (RELPATH_LIBSRC), dir);
  53784. +#else
  53785.        tem = Fexpand_file_name (build_string ("../lib-src"), dir);
  53786. +#endif
  53787.        lib_src_exists = Ffile_exists_p (tem);
  53788.        if (!NILP (lib_src_exists))
  53789.          {
  53790. +#ifdef RELPATH_ETC
  53791. +          tem = Fexpand_file_name (build_string (RELPATH_ETC), dir);
  53792. +#else
  53793.            tem = Fexpand_file_name (build_string ("../etc"), dir);
  53794. +#endif
  53795.            etc_exists = Ffile_exists_p (tem);
  53796.            if (!NILP (etc_exists))
  53797.          {
  53798. +#ifdef RELPATH_DOTDOT
  53799. +          tem = Fexpand_file_name (build_string (RELPATH_DOTDOT), dir);
  53800. +#else
  53801.            tem = Fexpand_file_name (build_string (".."), dir);
  53802. +#endif
  53803.            Vinstallation_directory
  53804.              = Ffile_name_as_directory (tem);
  53805.            break;
  53806. @@ -458,6 +475,7 @@
  53807.  
  53808.    inhibit_window_system = 0;
  53809.  
  53810. +#ifndef AMIGA
  53811.    /* Handle the -t switch, which specifies filename to use as terminal */
  53812.    if (skip_args + 2 < argc && !strcmp (argv[skip_args + 1], "-t"))
  53813.      {
  53814. @@ -483,7 +501,8 @@
  53815.        inhibit_window_system = 1;    /* -t => -nw */
  53816.  #endif
  53817.      }
  53818. -
  53819. +#endif /* not AMIGA */
  53820. +  
  53821.    if (skip_args + 1 < argc
  53822.        && (!strcmp (argv[skip_args + 1], "-nw")))
  53823.      {
  53824. diff -ru --new-file baseline/fsf/emacs/src/emacs.sh amiga/fsf/emacs/src/emacs.sh
  53825. --- baseline/fsf/emacs/src/emacs.sh    Wed Dec 31 17:00:00 1969
  53826. +++ amiga/fsf/emacs/src/emacs.sh    Sun Oct 15 17:10:52 1995
  53827. @@ -0,0 +1,29 @@
  53828. +.key a1,a2,a3,a4,a5,a6,a7,a8,a9
  53829. +.bra {                                       
  53830. +.ket }   
  53831. +; Startup script for GNU Emacs                                    
  53832. +; Make sure the FIFO handler is ready        
  53833. +assign >NIL: FIFO: exists                    
  53834. +if warn                                      
  53835. +  if exists L:fifo-handler                   
  53836. +    echo "Starting fifo-handler"             
  53837. +    run <NIL: >NIL: L:fifo-handler           
  53838. +  else                                       
  53839. +    echo "Cannot find L:fifo-handler."       
  53840. +    echo "External processes will not work." 
  53841. +  endif                                      
  53842. +endif                                        
  53843. +; Increase the stack size as needed          
  53844. +set stk=`stack`
  53845. +rx "fortytwo=42"
  53846. +set stack `rx "say subword($stk, 5, 1)"`
  53847. +unset stk
  53848. +if not $stack gt 40000 val
  53849. +  stack 40000
  53850. +endif
  53851. +; Invoke GNU Emacs
  53852. +run gnuemacs:temacs {a1} {a2} {a3} {a4} {a5} {a6} {a7} {a8} {a9}
  53853. +; Restore the previous stack size                                       
  53854. +stack $stack
  53855. +unset stack
  53856. +
  53857. diff -ru --new-file baseline/fsf/emacs/src/emacs_protos.h amiga/fsf/emacs/src/emacs_protos.h
  53858. --- baseline/fsf/emacs/src/emacs_protos.h    Wed Dec 31 17:00:00 1969
  53859. +++ amiga/fsf/emacs/src/emacs_protos.h    Sun Oct 15 17:10:54 1995
  53860. @@ -0,0 +1,69 @@
  53861. +/* Prototypes for functions defined in
  53862. +emacs.c
  53863. + */
  53864. +
  53865. +extern int Vcommand_line_args;
  53866. +
  53867. +extern int Vinvocation_name;
  53868. +
  53869. +extern int Vinvocation_directory;
  53870. +
  53871. +extern int Vinstallation_directory;
  53872. +
  53873. +extern int Vkill_emacs_hook;
  53874. +
  53875. +extern int initialized;
  53876. +
  53877. +extern int Vsystem_type;
  53878. +
  53879. +extern int Vsystem_configuration;
  53880. +
  53881. +extern int inhibit_window_system;
  53882. +
  53883. +extern int emacs_priority;
  53884. +
  53885. +extern char * stack_bottom;
  53886. +
  53887. +extern int noninteractive;
  53888. +
  53889. +extern int noninteractive1;
  53890. +
  53891. +extern int fatal_error_code;
  53892. +
  53893. +extern int fatal_error_in_progress;
  53894. +
  53895. +void fatal_error_signal(int sig);
  53896. +
  53897. +int init_cmdargs(int argc,
  53898. +                 char ** argv,
  53899. +                 int skip_args);
  53900. +
  53901. +extern struct Lisp_Subr Sinvocation_name;
  53902. +
  53903. +int Finvocation_name(void);
  53904. +
  53905. +extern struct Lisp_Subr Sinvocation_directory;
  53906. +
  53907. +int Finvocation_directory(void);
  53908. +
  53909. +int emacs_main(int argc,
  53910. +               char ** argv,
  53911. +               char ** envp);
  53912. +
  53913. +extern struct Lisp_Subr Skill_emacs;
  53914. +
  53915. +int Fkill_emacs(int );
  53916. +
  53917. +void shut_down_emacs(int sig,
  53918. +                     int no_x,
  53919. +                     int stuff);
  53920. +
  53921. +extern struct Lisp_Subr Sdump_emacs_data;
  53922. +
  53923. +int Fdump_emacs_data(int );
  53924. +
  53925. +int decode_env_path(char * evarname,
  53926. +                    char * defalt);
  53927. +
  53928. +int syms_of_emacs(void);
  53929. +
  53930. diff -ru --new-file baseline/fsf/emacs/src/emacssignal.h amiga/fsf/emacs/src/emacssignal.h
  53931. --- baseline/fsf/emacs/src/emacssignal.h    Wed Dec 31 17:00:00 1969
  53932. +++ amiga/fsf/emacs/src/emacssignal.h    Sun Oct 15 17:10:56 1995
  53933. @@ -0,0 +1,57 @@
  53934. +#ifdef POSIX_SIGNALS
  53935. +
  53936. +#define SIGMASKTYPE sigset_t
  53937. +#define SIGEMPTYMASK (signal_empty_mask)
  53938. +#define SIGFULLMASK (signal_full_mask)
  53939. +extern sigset_t signal_empty_mask, signal_full_mask;
  53940. +
  53941. +#ifdef sigmask
  53942. +#undef sigmask
  53943. +#endif
  53944. +#define sigmask(SIG) \
  53945. +(_mask = SIGEMPTYMASK, sigaddset (&_mask, SIG), _mask)
  53946. +
  53947. +/* Local mask is used to avoid problems if code using any of the macros 
  53948. +   below could be reentered due to a signal occurring.
  53949. +   This can't happen in Emacs 18.58, but just to be safe... - DJB
  53950. +   These macros require GCC.  */
  53951. +#define sigpause(SIG)    ({ sigset_t _mask; sys_sigpause(SIG); })
  53952. +#define sigblock(SIG)    ({ sigset_t _mask; sys_sigblock(SIG); })
  53953. +#define sigunblock(SIG)  ({ sigset_t _mask; sys_sigunblock(SIG); })
  53954. +#define sigsetmask(SIG)  ({ sigset_t _mask; sys_sigsetmask(SIG); })
  53955. +#define sighold(SIG)     ONLY_USED_IN_BSD_4_1
  53956. +#define sigrelse(SIG)    ONLY_USED_IN_BSD_4_1
  53957. +
  53958. +int (*sys_signal (int signal_number, int (*action)())) ();
  53959. +int sys_sigpause (sigset_t new_mask);
  53960. +sigset_t sys_sigblock (sigset_t new_mask);
  53961. +sigset_t sys_sigunblock (sigset_t new_mask);
  53962. +sigset_t sys_sigsetmask (sigset_t new_mask);
  53963. +
  53964. +#define sys_sigdel(MASK,SIG) sigdelset(&MASK,SIG)
  53965. +#endif /* POSIX_SIGNALS */
  53966. +
  53967. +#ifndef SIGMASKTYPE
  53968. +#define SIGMASKTYPE int
  53969. +#endif
  53970. +
  53971. +#ifndef SIGEMPTYMASK
  53972. +#define SIGEMPTYMASK 0
  53973. +#endif
  53974. +
  53975. +#ifndef SIGFULLMASK
  53976. +#define SIGFULLMASK 0xffffffff
  53977. +#endif
  53978. +
  53979. +#ifndef sigmask
  53980. +#define sigmask(no) (1L << ((no) - 1))
  53981. +#endif
  53982. +
  53983. +#ifndef sigunblock
  53984. +#define sigunblock(SIG) \
  53985. +{ SIGMASKTYPE omask = sigblock (SIGFULLMASK); sigsetmask (omask & ~SIG); }
  53986. +#endif
  53987. +
  53988. +#ifndef sys_sigdel
  53989. +#define sys_sigdel(MASK,SIG) MASK &= ~(1 << SIG)
  53990. +#endif
  53991. diff -ru --new-file baseline/fsf/emacs/src/eval_protos.h amiga/fsf/emacs/src/eval_protos.h
  53992. --- baseline/fsf/emacs/src/eval_protos.h    Wed Dec 31 17:00:00 1969
  53993. +++ amiga/fsf/emacs/src/eval_protos.h    Sun Oct 15 17:10:57 1995
  53994. @@ -0,0 +1,303 @@
  53995. +/* Prototypes for functions defined in
  53996. +eval.c
  53997. + */
  53998. +
  53999. +extern struct backtrace * backtrace_list;
  54000. +
  54001. +extern struct catchtag * catchlist;
  54002. +
  54003. +extern int Qautoload;
  54004. +
  54005. +extern int Qmacro;
  54006. +
  54007. +extern int Qexit;
  54008. +
  54009. +extern int Qinteractive;
  54010. +
  54011. +extern int Qcommandp;
  54012. +
  54013. +extern int Qdefun;
  54014. +
  54015. +extern int Qinhibit_quit;
  54016. +
  54017. +extern int Vinhibit_quit;
  54018. +
  54019. +extern int Vquit_flag;
  54020. +
  54021. +extern int Qmocklisp_arguments;
  54022. +
  54023. +extern int Vmocklisp_arguments;
  54024. +
  54025. +extern int Qmocklisp;
  54026. +
  54027. +extern int Qand_rest;
  54028. +
  54029. +extern int Qand_optional;
  54030. +
  54031. +extern int Qdebug_on_error;
  54032. +
  54033. +extern int Vrun_hooks;
  54034. +
  54035. +extern int Vautoload_queue;
  54036. +
  54037. +extern int specpdl_size;
  54038. +
  54039. +extern struct specbinding * specpdl;
  54040. +
  54041. +extern struct specbinding * specpdl_ptr;
  54042. +
  54043. +extern int max_specpdl_size;
  54044. +
  54045. +extern int lisp_eval_depth;
  54046. +
  54047. +extern int max_lisp_eval_depth;
  54048. +
  54049. +extern int debug_on_next_call;
  54050. +
  54051. +extern int Vstack_trace_on_error;
  54052. +
  54053. +extern int Vdebug_on_error;
  54054. +
  54055. +extern int debug_on_quit;
  54056. +
  54057. +extern int when_entered_debugger;
  54058. +
  54059. +extern int Vdebugger;
  54060. +
  54061. +int init_eval_once(void);
  54062. +
  54063. +int init_eval(void);
  54064. +
  54065. +int call_debugger(int arg);
  54066. +
  54067. +int do_debug_on_call(int code);
  54068. +
  54069. +extern struct Lisp_Subr Sor;
  54070. +
  54071. +int For(int );
  54072. +
  54073. +extern struct Lisp_Subr Sand;
  54074. +
  54075. +int Fand(int );
  54076. +
  54077. +extern struct Lisp_Subr Sif;
  54078. +
  54079. +int Fif(int );
  54080. +
  54081. +extern struct Lisp_Subr Scond;
  54082. +
  54083. +int Fcond(int );
  54084. +
  54085. +extern struct Lisp_Subr Sprogn;
  54086. +
  54087. +int Fprogn(int );
  54088. +
  54089. +extern struct Lisp_Subr Sprog1;
  54090. +
  54091. +int Fprog1(int );
  54092. +
  54093. +extern struct Lisp_Subr Sprog2;
  54094. +
  54095. +int Fprog2(int );
  54096. +
  54097. +extern struct Lisp_Subr Ssetq;
  54098. +
  54099. +int Fsetq(int );
  54100. +
  54101. +extern struct Lisp_Subr Squote;
  54102. +
  54103. +int Fquote(int );
  54104. +
  54105. +extern struct Lisp_Subr Sfunction;
  54106. +
  54107. +int Ffunction(int );
  54108. +
  54109. +extern struct Lisp_Subr Sinteractive_p;
  54110. +
  54111. +int Finteractive_p(void);
  54112. +
  54113. +extern struct Lisp_Subr Sdefun;
  54114. +
  54115. +int Fdefun(int );
  54116. +
  54117. +extern struct Lisp_Subr Sdefmacro;
  54118. +
  54119. +int Fdefmacro(int );
  54120. +
  54121. +extern struct Lisp_Subr Sdefvar;
  54122. +
  54123. +int Fdefvar(int );
  54124. +
  54125. +extern struct Lisp_Subr Sdefconst;
  54126. +
  54127. +int Fdefconst(int );
  54128. +
  54129. +extern struct Lisp_Subr Suser_variable_p;
  54130. +
  54131. +int Fuser_variable_p(int );
  54132. +
  54133. +extern struct Lisp_Subr SletX;
  54134. +
  54135. +int FletX(int );
  54136. +
  54137. +extern struct Lisp_Subr Slet;
  54138. +
  54139. +int Flet(int );
  54140. +
  54141. +extern struct Lisp_Subr Swhile;
  54142. +
  54143. +int Fwhile(int );
  54144. +
  54145. +extern struct Lisp_Subr Smacroexpand;
  54146. +
  54147. +int Fmacroexpand(int , int );
  54148. +
  54149. +extern struct Lisp_Subr Scatch;
  54150. +
  54151. +int Fcatch(int );
  54152. +
  54153. +int internal_catch(int tag,
  54154. +                   int (* func)(),
  54155. +                   int arg);
  54156. +
  54157. +void unwind_to_catch(struct catchtag * catch,
  54158. +                     int value);
  54159. +
  54160. +extern struct Lisp_Subr Sthrow;
  54161. +
  54162. +int Fthrow(int , int );
  54163. +
  54164. +extern struct Lisp_Subr Sunwind_protect;
  54165. +
  54166. +int Funwind_protect(int );
  54167. +
  54168. +extern struct handler * handlerlist;
  54169. +
  54170. +extern struct Lisp_Subr Scondition_case;
  54171. +
  54172. +int Fcondition_case(int );
  54173. +
  54174. +int internal_condition_case(int (* bfun)(),
  54175. +                            int handlers,
  54176. +                            int (* hfun)());
  54177. +
  54178. +int internal_condition_case_1(int (* bfun)(),
  54179. +                              int arg,
  54180. +                              int handlers,
  54181. +                              int (* hfun)());
  54182. +
  54183. +extern struct Lisp_Subr Ssignal;
  54184. +
  54185. +int Fsignal(int , int );
  54186. +
  54187. +int wants_debugger(int list,
  54188. +                   int conditions);
  54189. +
  54190. +int find_handler_clause(int handlers,
  54191. +                        int conditions,
  54192. +                        int sig,
  54193. +                        int data,
  54194. +                        int * debugger_value_ptr);
  54195. +
  54196. +void error(char * m, ...);
  54197. +/*           char * a1,
  54198. +           char * a2,
  54199. +           char * a3);
  54200. +       */
  54201. +
  54202. +extern struct Lisp_Subr Scommandp;
  54203. +
  54204. +int Fcommandp(int );
  54205. +
  54206. +extern struct Lisp_Subr Sautoload;
  54207. +
  54208. +int Fautoload(int , int , int , int , int );
  54209. +
  54210. +int un_autoload(int oldqueue);
  54211. +
  54212. +int do_autoload(int fundef,
  54213. +                int funname);
  54214. +
  54215. +extern struct Lisp_Subr Seval;
  54216. +
  54217. +int Feval(int );
  54218. +
  54219. +extern struct Lisp_Subr Sapply;
  54220. +
  54221. +int Fapply(int , int * );
  54222. +
  54223. +int apply1(int fn,
  54224. +           int arg);
  54225. +
  54226. +int call0(int fn);
  54227. +
  54228. +int call1(int fn,
  54229. +          int arg1);
  54230. +
  54231. +int call2(int fn,
  54232. +          int arg1,
  54233. +          int arg2);
  54234. +
  54235. +int call3(int fn,
  54236. +          int arg1,
  54237. +          int arg2,
  54238. +          int arg3);
  54239. +
  54240. +int call4(int fn,
  54241. +          int arg1,
  54242. +          int arg2,
  54243. +          int arg3,
  54244. +          int arg4);
  54245. +
  54246. +int call5(int fn,
  54247. +          int arg1,
  54248. +          int arg2,
  54249. +          int arg3,
  54250. +          int arg4,
  54251. +          int arg5);
  54252. +
  54253. +int call6(int fn,
  54254. +          int arg1,
  54255. +          int arg2,
  54256. +          int arg3,
  54257. +          int arg4,
  54258. +          int arg5,
  54259. +          int arg6);
  54260. +
  54261. +extern struct Lisp_Subr Sfuncall;
  54262. +
  54263. +int Ffuncall(int , int * );
  54264. +
  54265. +int apply_lambda(int fun,
  54266. +                 int args,
  54267. +                 int eval_flag);
  54268. +
  54269. +int funcall_lambda(int fun,
  54270. +                   int nargs,
  54271. +                   register int * arg_vector);
  54272. +
  54273. +void grow_specpdl(void);
  54274. +
  54275. +void specbind(int symbol,
  54276. +              int value);
  54277. +
  54278. +void record_unwind_protect(int (* function)(),
  54279. +                           int arg);
  54280. +
  54281. +int unbind_to(int count,
  54282. +              int value);
  54283. +
  54284. +extern struct Lisp_Subr Sbacktrace_debug;
  54285. +
  54286. +int Fbacktrace_debug(int , int );
  54287. +
  54288. +extern struct Lisp_Subr Sbacktrace;
  54289. +
  54290. +int Fbacktrace(void);
  54291. +
  54292. +extern struct Lisp_Subr Sbacktrace_frame;
  54293. +
  54294. +int Fbacktrace_frame(int );
  54295. +
  54296. +int syms_of_eval(void);
  54297. +
  54298. diff -ru --new-file baseline/fsf/emacs/src/fileio.c amiga/fsf/emacs/src/fileio.c
  54299. --- baseline/fsf/emacs/src/fileio.c    Sun Sep  4 18:10:14 1994
  54300. +++ amiga/fsf/emacs/src/fileio.c    Sun Oct 15 17:11:00 1995
  54301. @@ -294,6 +294,9 @@
  54302.    p = beg + XSTRING (file)->size;
  54303.  
  54304.    while (p != beg && p[-1] != '/'
  54305. +#ifdef    AMIGA
  54306. +          && p[-1] != ':' /* CHFIXME: replace this call with AmigaDOS function? */
  54307. +#endif    /* AMIGA */
  54308.  #ifdef VMS
  54309.       && p[-1] != ':' && p[-1] != ']' && p[-1] != '>'
  54310.  #endif /* VMS */
  54311. @@ -349,6 +352,9 @@
  54312.    end = p = beg + XSTRING (file)->size;
  54313.  
  54314.    while (p != beg && p[-1] != '/'
  54315. +#ifdef    AMIGA
  54316. +         && p[-1] != ':' /* CHFIXME: dos.library call, also check this function and above */
  54317. +#endif    /* AMIGA */
  54318.  #ifdef VMS
  54319.       && p[-1] != ':' && p[-1] != ']' && p[-1] != '>'
  54320.  #endif /* VMS */
  54321. @@ -449,6 +455,11 @@
  54322.        out[size] = '\0';
  54323.      }
  54324.  #else /* not VMS */
  54325. +#ifdef    AMIGA /* CHFIXME: check */
  54326. +  /* AmigaDOS syntax, append slash if the last char isn't a ':' or '/' */
  54327. +  if (out[size] != '/' && out[size] != ':' && size != 0)
  54328. +    strcat (out, "/");
  54329. +#else    /* not AMIGA */
  54330.    /* For Unix syntax, Append a slash if necessary */
  54331.  #ifdef MSDOS
  54332.    if (out[size] != ':' && out[size] != '/' && out[size] != '\\')
  54333. @@ -456,6 +467,7 @@
  54334.    if (out[size] != '/')
  54335.  #endif
  54336.      strcat (out, "/");
  54337. +#endif /* not AMIGA */
  54338.  #endif /* not VMS */
  54339.    return out;
  54340.  }
  54341. @@ -631,7 +643,7 @@
  54342.       But leave "/" unchanged; do not change it to "".  */
  54343.    strcpy (dst, src);
  54344.    if (slen > 1 
  54345. -#ifdef MSDOS
  54346. +#if defined(MSDOS) || defined(AMIGA)
  54347.        && (dst[slen - 1] == '/' || dst[slen - 1] == '/')
  54348.        && dst[slen - 2] != ':'
  54349.  #else
  54350. @@ -708,6 +720,110 @@
  54351.       (name, defalt)
  54352.       Lisp_Object name, defalt;
  54353.  {
  54354. +#ifdef AMIGA
  54355. +  unsigned char *nm, *tilde, *newdir, *colon, *t_pos, *target;
  54356. +
  54357. +  CHECK_STRING (name, 0);
  54358. +
  54359. +  nm = XSTRING (name)->data;
  54360. +  /* Find base directory */
  54361. +  if (NILP (defalt))
  54362. +      defalt = current_buffer->directory;
  54363. +  CHECK_STRING (defalt, 1);
  54364. +  newdir = XSTRING (defalt)->data;
  54365. +
  54366. +  /* Concat newdir w/ nm and canonicalize */
  54367. +  /* newdir always contains at least the device name.
  54368. +     It is assumed canonical */
  54369. +  target = (unsigned char *)alloca(strlen(nm) + strlen(newdir) + 2);
  54370. +  file_name_as_directory (target, newdir);
  54371. +  t_pos = target + strlen(target);
  54372. +
  54373. +  while (*nm)
  54374. +  {
  54375. +      unsigned char *comp_end = nm;
  54376. +      int comp_len;
  54377. +
  54378. +      /* Find next component of path (everything upto the next /) */
  54379. +      do comp_end++; while (comp_end[0] && comp_end[-1] != '/' && comp_end[-1] != ':');
  54380. +      comp_len = comp_end - nm;
  54381. +
  54382. +      if (comp_len == 1 && nm[0] == '/' ||
  54383. +      nm[0] == '.' && nm[1] == '.' &&
  54384. +      (comp_len == 2 || comp_len == 3 && nm[2] == '/'))
  54385. +      {
  54386. +      /* Previous directory */
  54387. +      if (t_pos > target && t_pos[-1] != ':')
  54388. +      {
  54389. +          t_pos--; /* Back up over / */
  54390. +          while (t_pos > target &&
  54391. +             t_pos[-1] != ':' && t_pos[-1] != '/') t_pos--;
  54392. +      }
  54393. +      }
  54394. +      else if (comp_len == 2 && nm[0] == '.' && nm[1] == '/' ||
  54395. +           comp_len == 1 && nm[0] == '.') ; /* Ignore . */
  54396. +      else if (nm[0] == ':') /* Just keep disk name */
  54397. +      {
  54398. +      char *new_pos;
  54399. +
  54400. +      *t_pos = 0; /* Limit search for : */
  54401. +      t_pos = index(target, ':');
  54402. +      if (t_pos) t_pos++;
  54403. +      else t_pos = target;
  54404. +      }
  54405. +      else if (nm[0] == '~' || index(nm, ':'))
  54406. +      {
  54407. +      char *exp_name;
  54408. +
  54409. +      if (nm[0] == '~')
  54410. +          if (nm[1] == '/' || nm[1] == 0) /* Home directory */
  54411. +          {
  54412. +          newdir = (unsigned char *) egetenv ("HOME");
  54413. +          if (!newdir) newdir = (unsigned char *) "s:";
  54414. +          }
  54415. +          else
  54416. +          {
  54417. +          /* Handle ~ followed by user name.  */
  54418. +          char lastc = nm[comp_len - 1];
  54419. +          int len = comp_len - 1;
  54420. +
  54421. +          if (lastc == ':' || lastc == '/') len--;
  54422. +
  54423. +          /* ~name becomes name: */
  54424. +          newdir = (unsigned char *) alloca (len + 2);
  54425. +          bcopy((char *) nm + 1, newdir, len);
  54426. +          newdir[len] = ':';
  54427. +          newdir[len + 1] = 0;
  54428. +          }
  54429. +      else /* we have name: */
  54430. +      {
  54431. +          newdir = (char *)alloca(comp_len + 1);
  54432. +          bcopy(nm, newdir, comp_len);
  54433. +          newdir[comp_len] = 0;
  54434. +      }
  54435. +      exp_name = (char *)alloca(1024);
  54436. +      if (expand_path(newdir, exp_name, 1024))
  54437. +      {
  54438. +          char *colon = strchr(exp_name, ':');
  54439. +
  54440. +          /* Detect paths with multiple colons (eg from PATH:) and
  54441. +         leave them alone. They create confusion. */
  54442. +          if (!(colon && strchr(colon + 1, ':'))) newdir = exp_name;
  54443. +      }
  54444. +      target = (unsigned char *)alloca(strlen(nm) + strlen(newdir) + 2);
  54445. +      file_name_as_directory (target, newdir);
  54446. +      t_pos = target + strlen(target);
  54447. +      }
  54448. +      else /* Copy component */
  54449. +      {
  54450. +      bcopy(nm, t_pos, comp_len);
  54451. +       t_pos += comp_len;
  54452. +      }
  54453. +
  54454. +      nm = comp_end;
  54455. +  }
  54456. +  return make_string (target, t_pos - target);
  54457. +#else /* not AMIGA */
  54458.    unsigned char *nm;
  54459.    
  54460.    register unsigned char *newdir, *p, *o;
  54461. @@ -1151,6 +1267,7 @@
  54462.  #endif
  54463.  
  54464.    return make_string (target, o - target);
  54465. +#endif /* not AMIGA */
  54466.  }
  54467.  #if 0
  54468.  /* Changed this DEFUN to a DEAFUN, so as not to confuse `make-docfile'.
  54469. @@ -1510,6 +1627,23 @@
  54470.  
  54471.    for (p = nm; p != endp; p++)
  54472.      {
  54473. +#ifdef AMIGA /* CHFIXME: check */
  54474. +      if (p[0] == '~' && p != nm && p[-1] == '/')
  54475. +    {
  54476. +        nm = p;
  54477. +        substituted = 1;
  54478. +    }
  54479. +      else if (p[0] == ':')
  54480. +    {
  54481. +          char *p2 = p;
  54482. +      while (p2 > nm && p2[-1] != ':' && p2[-1] != '/') p2--;
  54483. +      if (p2 != nm)
  54484. +        {
  54485. +          nm = p2;
  54486. +          substituted = 1;
  54487. +        }
  54488. +    }
  54489. +#else /* not AMIGA */
  54490.        if ((p[0] == '~' ||
  54491.  #ifdef APOLLO
  54492.         /* // at start of file name is meaningful in Apollo system */
  54493. @@ -1537,6 +1671,7 @@
  54494.        substituted = 1;
  54495.      }
  54496.  #endif /* MSDOS */
  54497. +#endif /* not AMIGA */
  54498.      }
  54499.  
  54500.  #ifdef VMS
  54501. @@ -2153,6 +2288,13 @@
  54502.  
  54503.    CHECK_STRING (filename, 0);
  54504.    ptr = XSTRING (filename)->data;
  54505. +#ifdef    AMIGA
  54506. +  /* An absolute filename has a non-leading ':' in it */
  54507. +  if (*ptr != ':')
  54508. +      while (*ptr)
  54509. +      if (*ptr++ == ':') return Qt;
  54510. +  return Qnil;
  54511. +#else    /* not AMIGA */
  54512.    if (*ptr == '/' || *ptr == '~'
  54513.  #ifdef VMS
  54514.  /* ??? This criterion is probably wrong for '<'.  */
  54515. @@ -2167,6 +2309,7 @@
  54516.      return Qt;
  54517.    else
  54518.      return Qnil;
  54519. +#endif /* not AMIGA */
  54520.  }
  54521.  
  54522.  DEFUN ("file-exists-p", Ffile_exists_p, Sfile_exists_p, 1, 1, 0,
  54523. @@ -2273,7 +2416,15 @@
  54524.        xfree (buf);
  54525.        bufsize *= 2;
  54526.      }
  54527. +  /* OK.  This is required on the Amiga, but I suspect that it makes
  54528. +   * sense to not accept a NULL link.  This should probably be merged in,
  54529. +   * but that is someone else's decision.
  54530. +   */
  54531. +#ifndef AMIGA
  54532.    if (valsize == -1)
  54533. +#else
  54534. +  if (valsize <= 0)
  54535. +#endif
  54536.      {
  54537.        xfree (buf);
  54538.        return Qnil;
  54539. diff -ru --new-file baseline/fsf/emacs/src/fileio_protos.h amiga/fsf/emacs/src/fileio_protos.h
  54540. --- baseline/fsf/emacs/src/fileio_protos.h    Wed Dec 31 17:00:00 1969
  54541. +++ amiga/fsf/emacs/src/fileio_protos.h    Sun Oct 15 17:11:03 1995
  54542. @@ -0,0 +1,297 @@
  54543. +/* Prototypes for functions defined in
  54544. +fileio.c
  54545. + */
  54546. +
  54547. +extern int auto_saving;
  54548. +
  54549. +extern int auto_save_mode_bits;
  54550. +
  54551. +extern int Vfile_name_handler_alist;
  54552. +
  54553. +extern int Vafter_insert_file_functions;
  54554. +
  54555. +extern int Vwrite_region_annotate_functions;
  54556. +
  54557. +extern int Vauto_save_list_file_name;
  54558. +
  54559. +extern int insert_default_directory;
  54560. +
  54561. +extern int vms_stmlf_recfm;
  54562. +
  54563. +extern int Vinhibit_file_name_handlers;
  54564. +
  54565. +extern int Vinhibit_file_name_operation;
  54566. +
  54567. +extern int Qfile_error;
  54568. +
  54569. +extern int Qfile_already_exists;
  54570. +
  54571. +extern int Qfile_name_history;
  54572. +
  54573. +extern int Qcar_less_than_car;
  54574. +
  54575. +int report_file_error(char * string,
  54576. +                      int data);
  54577. +
  54578. +int close_file_unwind(int fd);
  54579. +
  54580. +int restore_point_unwind(int location);
  54581. +
  54582. +extern int Qexpand_file_name;
  54583. +
  54584. +extern int Qdirectory_file_name;
  54585. +
  54586. +extern int Qfile_name_directory;
  54587. +
  54588. +extern int Qfile_name_nondirectory;
  54589. +
  54590. +extern int Qunhandled_file_name_directory;
  54591. +
  54592. +extern int Qfile_name_as_directory;
  54593. +
  54594. +extern int Qcopy_file;
  54595. +
  54596. +extern int Qmake_directory;
  54597. +
  54598. +extern int Qdelete_directory;
  54599. +
  54600. +extern int Qdelete_file;
  54601. +
  54602. +extern int Qrename_file;
  54603. +
  54604. +extern int Qadd_name_to_file;
  54605. +
  54606. +extern int Qmake_symbolic_link;
  54607. +
  54608. +extern int Qfile_exists_p;
  54609. +
  54610. +extern int Qfile_executable_p;
  54611. +
  54612. +extern int Qfile_readable_p;
  54613. +
  54614. +extern int Qfile_symlink_p;
  54615. +
  54616. +extern int Qfile_writable_p;
  54617. +
  54618. +extern int Qfile_directory_p;
  54619. +
  54620. +extern int Qfile_accessible_directory_p;
  54621. +
  54622. +extern int Qfile_modes;
  54623. +
  54624. +extern int Qset_file_modes;
  54625. +
  54626. +extern int Qfile_newer_than_file_p;
  54627. +
  54628. +extern int Qinsert_file_contents;
  54629. +
  54630. +extern int Qwrite_region;
  54631. +
  54632. +extern int Qverify_visited_file_modtime;
  54633. +
  54634. +extern int Qset_visited_file_modtime;
  54635. +
  54636. +extern struct Lisp_Subr Sfind_file_name_handler;
  54637. +
  54638. +int Ffind_file_name_handler(int , int );
  54639. +
  54640. +extern struct Lisp_Subr Sfile_name_directory;
  54641. +
  54642. +int Ffile_name_directory(int );
  54643. +
  54644. +extern struct Lisp_Subr Sfile_name_nondirectory;
  54645. +
  54646. +int Ffile_name_nondirectory(int );
  54647. +
  54648. +extern struct Lisp_Subr Sunhandled_file_name_directory;
  54649. +
  54650. +int Funhandled_file_name_directory(int );
  54651. +
  54652. +char * file_name_as_directory(char * out,
  54653. +                              char * in);
  54654. +
  54655. +extern struct Lisp_Subr Sfile_name_as_directory;
  54656. +
  54657. +int Ffile_name_as_directory(int );
  54658. +
  54659. +int directory_file_name(char * src,
  54660. +                        char * dst);
  54661. +
  54662. +extern struct Lisp_Subr Sdirectory_file_name;
  54663. +
  54664. +int Fdirectory_file_name(int );
  54665. +
  54666. +extern struct Lisp_Subr Smake_temp_name;
  54667. +
  54668. +int Fmake_temp_name(int );
  54669. +
  54670. +extern struct Lisp_Subr Sexpand_file_name;
  54671. +
  54672. +int Fexpand_file_name(int , int );
  54673. +
  54674. +extern struct Lisp_Subr Ssubstitute_in_file_name;
  54675. +
  54676. +int Fsubstitute_in_file_name(int );
  54677. +
  54678. +int expand_and_dir_to_file(int filename,
  54679. +                           int defdir);
  54680. +
  54681. +int barf_or_query_if_file_exists(int absname,
  54682. +                                 unsigned char * querystring,
  54683. +                                 int interactive);
  54684. +
  54685. +extern struct Lisp_Subr Scopy_file;
  54686. +
  54687. +int Fcopy_file(int , int , int , int );
  54688. +
  54689. +extern struct Lisp_Subr Smake_directory_internal;
  54690. +
  54691. +int Fmake_directory_internal(int );
  54692. +
  54693. +extern struct Lisp_Subr Sdelete_directory;
  54694. +
  54695. +int Fdelete_directory(int );
  54696. +
  54697. +extern struct Lisp_Subr Sdelete_file;
  54698. +
  54699. +int Fdelete_file(int );
  54700. +
  54701. +extern struct Lisp_Subr Srename_file;
  54702. +
  54703. +int Frename_file(int , int , int );
  54704. +
  54705. +extern struct Lisp_Subr Sadd_name_to_file;
  54706. +
  54707. +int Fadd_name_to_file(int , int , int );
  54708. +
  54709. +extern struct Lisp_Subr Smake_symbolic_link;
  54710. +
  54711. +int Fmake_symbolic_link(int , int , int );
  54712. +
  54713. +extern struct Lisp_Subr Sfile_name_absolute_p;
  54714. +
  54715. +int Ffile_name_absolute_p(int );
  54716. +
  54717. +extern struct Lisp_Subr Sfile_exists_p;
  54718. +
  54719. +int Ffile_exists_p(int );
  54720. +
  54721. +extern struct Lisp_Subr Sfile_executable_p;
  54722. +
  54723. +int Ffile_executable_p(int );
  54724. +
  54725. +extern struct Lisp_Subr Sfile_readable_p;
  54726. +
  54727. +int Ffile_readable_p(int );
  54728. +
  54729. +extern struct Lisp_Subr Sfile_symlink_p;
  54730. +
  54731. +int Ffile_symlink_p(int );
  54732. +
  54733. +extern struct Lisp_Subr Sfile_writable_p;
  54734. +
  54735. +int Ffile_writable_p(int );
  54736. +
  54737. +extern struct Lisp_Subr Sfile_directory_p;
  54738. +
  54739. +int Ffile_directory_p(int );
  54740. +
  54741. +extern struct Lisp_Subr Sfile_accessible_directory_p;
  54742. +
  54743. +int Ffile_accessible_directory_p(int );
  54744. +
  54745. +extern struct Lisp_Subr Sfile_modes;
  54746. +
  54747. +int Ffile_modes(int );
  54748. +
  54749. +extern struct Lisp_Subr Sset_file_modes;
  54750. +
  54751. +int Fset_file_modes(int , int );
  54752. +
  54753. +extern struct Lisp_Subr Sset_default_file_modes;
  54754. +
  54755. +int Fset_default_file_modes(int );
  54756. +
  54757. +extern struct Lisp_Subr Sdefault_file_modes;
  54758. +
  54759. +int Fdefault_file_modes(void);
  54760. +
  54761. +extern struct Lisp_Subr Sfile_newer_than_file_p;
  54762. +
  54763. +int Ffile_newer_than_file_p(int , int );
  54764. +
  54765. +extern struct Lisp_Subr Sinsert_file_contents;
  54766. +
  54767. +int Finsert_file_contents(int , int , int , int , int );
  54768. +
  54769. +extern struct Lisp_Subr Swrite_region;
  54770. +
  54771. +int Fwrite_region(int , int , int , int , int );
  54772. +
  54773. +extern struct Lisp_Subr Scar_less_than_car;
  54774. +
  54775. +int Fcar_less_than_car(int , int );
  54776. +
  54777. +int build_annotations(int start,
  54778. +                      int end);
  54779. +
  54780. +int a_write(int desc,
  54781. +            register char * addr,
  54782. +            register int len,
  54783. +            int pos,
  54784. +            int * annot);
  54785. +
  54786. +int e_write(int desc,
  54787. +            register char * addr,
  54788. +            register int len);
  54789. +
  54790. +extern struct Lisp_Subr Sverify_visited_file_modtime;
  54791. +
  54792. +int Fverify_visited_file_modtime(int );
  54793. +
  54794. +extern struct Lisp_Subr Sclear_visited_file_modtime;
  54795. +
  54796. +int Fclear_visited_file_modtime(void);
  54797. +
  54798. +extern struct Lisp_Subr Svisited_file_modtime;
  54799. +
  54800. +int Fvisited_file_modtime(void);
  54801. +
  54802. +extern struct Lisp_Subr Sset_visited_file_modtime;
  54803. +
  54804. +int Fset_visited_file_modtime(int );
  54805. +
  54806. +int auto_save_error(void);
  54807. +
  54808. +int auto_save_1(void);
  54809. +
  54810. +int do_auto_save_unwind(int desc);
  54811. +
  54812. +extern struct Lisp_Subr Sdo_auto_save;
  54813. +
  54814. +int Fdo_auto_save(int , int );
  54815. +
  54816. +extern struct Lisp_Subr Sset_buffer_auto_saved;
  54817. +
  54818. +int Fset_buffer_auto_saved(void);
  54819. +
  54820. +extern struct Lisp_Subr Sclear_buffer_auto_save_failure;
  54821. +
  54822. +int Fclear_buffer_auto_save_failure(void);
  54823. +
  54824. +extern struct Lisp_Subr Srecent_auto_save_p;
  54825. +
  54826. +int Frecent_auto_save_p(void);
  54827. +
  54828. +int double_dollars(int val);
  54829. +
  54830. +extern struct Lisp_Subr Sread_file_name_internal;
  54831. +
  54832. +int Fread_file_name_internal(int , int , int );
  54833. +
  54834. +extern struct Lisp_Subr Sread_file_name;
  54835. +
  54836. +int Fread_file_name(int , int , int , int , int );
  54837. +
  54838. +int syms_of_fileio(void);
  54839. +
  54840. diff -ru --new-file baseline/fsf/emacs/src/filelock.c amiga/fsf/emacs/src/filelock.c
  54841. --- baseline/fsf/emacs/src/filelock.c    Wed Oct  5 22:02:41 1994
  54842. +++ amiga/fsf/emacs/src/filelock.c    Sun Oct 15 17:11:07 1995
  54843. @@ -57,7 +57,9 @@
  54844.  extern int errno;
  54845.  
  54846.  extern char *egetenv ();
  54847. +#ifndef AMIGA
  54848.  extern char *strcpy ();
  54849. +#endif
  54850.  
  54851.  #ifdef DECLARE_GETPWUID_WITH_UID_T
  54852.  extern struct passwd *getpwuid (uid_t);
  54853. diff -ru --new-file baseline/fsf/emacs/src/filelock_protos.h amiga/fsf/emacs/src/filelock_protos.h
  54854. --- baseline/fsf/emacs/src/filelock_protos.h    Wed Dec 31 17:00:00 1969
  54855. +++ amiga/fsf/emacs/src/filelock_protos.h    Sun Oct 15 17:11:09 1995
  54856. @@ -0,0 +1,4 @@
  54857. +/* Prototypes for functions defined in
  54858. +filelock.c
  54859. + */
  54860. +
  54861. diff -ru --new-file baseline/fsf/emacs/src/filemode_protos.h amiga/fsf/emacs/src/filemode_protos.h
  54862. --- baseline/fsf/emacs/src/filemode_protos.h    Wed Dec 31 17:00:00 1969
  54863. +++ amiga/fsf/emacs/src/filemode_protos.h    Sun Oct 15 17:11:10 1995
  54864. @@ -0,0 +1,18 @@
  54865. +/* Prototypes for functions defined in
  54866. +filemode.c
  54867. + */
  54868. +
  54869. +void filemodestring(struct stat * statp,
  54870. +                    char * str);
  54871. +
  54872. +void mode_string(int mode,
  54873. +                 char * str);
  54874. +
  54875. +char ftypelet(long bits);
  54876. +
  54877. +void rwx(int bits,
  54878. +         char * chars);
  54879. +
  54880. +void setst(int bits,
  54881. +           char * chars);
  54882. +
  54883. diff -ru --new-file baseline/fsf/emacs/src/firstfile.c amiga/fsf/emacs/src/firstfile.c
  54884. --- baseline/fsf/emacs/src/firstfile.c    Wed Dec 31 17:00:00 1969
  54885. +++ amiga/fsf/emacs/src/firstfile.c    Sun Oct 15 17:11:12 1995
  54886. @@ -0,0 +1,4 @@
  54887. +int first_data = 1;
  54888. +int first_bss;
  54889. +
  54890. +void first_function() { }
  54891. diff -ru --new-file baseline/fsf/emacs/src/floatfns.c amiga/fsf/emacs/src/floatfns.c
  54892. --- baseline/fsf/emacs/src/floatfns.c    Tue May 10 17:17:39 1994
  54893. +++ amiga/fsf/emacs/src/floatfns.c    Sun Oct 15 17:11:14 1995
  54894. @@ -49,7 +49,7 @@
  54895.  #include "lisp.h"
  54896.  #include "syssignal.h"
  54897.  
  54898. -Lisp_Object Qarith_error;
  54899. +extern Lisp_Object Qarith_error;
  54900.  
  54901.  #ifdef LISP_FLOAT_TYPE
  54902.  
  54903. @@ -911,9 +911,15 @@
  54904.  #endif /* FLOAT_CATCH_SIGILL */
  54905.  
  54906.  #ifdef HAVE_MATHERR
  54907. +#ifdef AMIGA
  54908. +int
  54909. +__matherr (x)
  54910. +     struct __exception *x;
  54911. +#else
  54912.  int 
  54913.  matherr (x)
  54914.       struct exception *x;
  54915. +#endif
  54916.  {
  54917.    Lisp_Object args;
  54918.    if (! in_float)
  54919. diff -ru --new-file baseline/fsf/emacs/src/floatfns_protos.h amiga/fsf/emacs/src/floatfns_protos.h
  54920. --- baseline/fsf/emacs/src/floatfns_protos.h    Wed Dec 31 17:00:00 1969
  54921. +++ amiga/fsf/emacs/src/floatfns_protos.h    Sun Oct 15 17:11:16 1995
  54922. @@ -0,0 +1,12 @@
  54923. +/* Prototypes for functions defined in
  54924. +floatfns.c
  54925. + */
  54926. +
  54927. +extern struct Lisp_Subr Sfloor;
  54928. +
  54929. +int Ffloor(int , int );
  54930. +
  54931. +int init_floatfns(void);
  54932. +
  54933. +int syms_of_floatfns(void);
  54934. +
  54935. diff -ru --new-file baseline/fsf/emacs/src/fns_protos.h amiga/fsf/emacs/src/fns_protos.h
  54936. --- baseline/fsf/emacs/src/fns_protos.h    Wed Dec 31 17:00:00 1969
  54937. +++ amiga/fsf/emacs/src/fns_protos.h    Sun Oct 15 17:11:18 1995
  54938. @@ -0,0 +1,193 @@
  54939. +/* Prototypes for functions defined in
  54940. +fns.c
  54941. + */
  54942. +
  54943. +extern int Qstring_lessp;
  54944. +
  54945. +extern int Qprovide;
  54946. +
  54947. +extern int Qrequire;
  54948. +
  54949. +extern int Qyes_or_no_p_history;
  54950. +
  54951. +extern struct Lisp_Subr Sidentity;
  54952. +
  54953. +int Fidentity(int );
  54954. +
  54955. +extern struct Lisp_Subr Srandom;
  54956. +
  54957. +int Frandom(int );
  54958. +
  54959. +extern struct Lisp_Subr Slength;
  54960. +
  54961. +int Flength(int );
  54962. +
  54963. +extern struct Lisp_Subr Sstring_equal;
  54964. +
  54965. +int Fstring_equal(int , int );
  54966. +
  54967. +extern struct Lisp_Subr Sstring_lessp;
  54968. +
  54969. +int Fstring_lessp(int , int );
  54970. +
  54971. +int concat2(int s1,
  54972. +            int s2);
  54973. +
  54974. +extern struct Lisp_Subr Sappend;
  54975. +
  54976. +int Fappend(int , int * );
  54977. +
  54978. +extern struct Lisp_Subr Sconcat;
  54979. +
  54980. +int Fconcat(int , int * );
  54981. +
  54982. +extern struct Lisp_Subr Svconcat;
  54983. +
  54984. +int Fvconcat(int , int * );
  54985. +
  54986. +extern struct Lisp_Subr Scopy_sequence;
  54987. +
  54988. +int Fcopy_sequence(int );
  54989. +
  54990. +int concat(int nargs,
  54991. +           int * args,
  54992. +           enum Lisp_Type target_type,
  54993. +           int last_special);
  54994. +
  54995. +extern struct Lisp_Subr Scopy_alist;
  54996. +
  54997. +int Fcopy_alist(int );
  54998. +
  54999. +extern struct Lisp_Subr Ssubstring;
  55000. +
  55001. +int Fsubstring(int , int , int );
  55002. +
  55003. +extern struct Lisp_Subr Snthcdr;
  55004. +
  55005. +int Fnthcdr(int , int );
  55006. +
  55007. +extern struct Lisp_Subr Snth;
  55008. +
  55009. +int Fnth(int , int );
  55010. +
  55011. +extern struct Lisp_Subr Selt;
  55012. +
  55013. +int Felt(int , int );
  55014. +
  55015. +extern struct Lisp_Subr Smember;
  55016. +
  55017. +int Fmember(int , int );
  55018. +
  55019. +extern struct Lisp_Subr Smemq;
  55020. +
  55021. +int Fmemq(int , int );
  55022. +
  55023. +extern struct Lisp_Subr Sassq;
  55024. +
  55025. +int Fassq(int , int );
  55026. +
  55027. +int assq_no_quit(register int key,
  55028. +                 int list);
  55029. +
  55030. +extern struct Lisp_Subr Sassoc;
  55031. +
  55032. +int Fassoc(int , int );
  55033. +
  55034. +extern struct Lisp_Subr Srassq;
  55035. +
  55036. +int Frassq(int , int );
  55037. +
  55038. +extern struct Lisp_Subr Sdelq;
  55039. +
  55040. +int Fdelq(int , int );
  55041. +
  55042. +extern struct Lisp_Subr Sdelete;
  55043. +
  55044. +int Fdelete(int , int );
  55045. +
  55046. +extern struct Lisp_Subr Snreverse;
  55047. +
  55048. +int Fnreverse(int );
  55049. +
  55050. +extern struct Lisp_Subr Sreverse;
  55051. +
  55052. +int Freverse(int );
  55053. +
  55054. +extern struct Lisp_Subr Ssort;
  55055. +
  55056. +int Fsort(int , int );
  55057. +
  55058. +int merge(int org_l1,
  55059. +          int org_l2,
  55060. +          int pred);
  55061. +
  55062. +extern struct Lisp_Subr Sget;
  55063. +
  55064. +int Fget(int , int );
  55065. +
  55066. +extern struct Lisp_Subr Sput;
  55067. +
  55068. +int Fput(int , int , int );
  55069. +
  55070. +extern struct Lisp_Subr Sequal;
  55071. +
  55072. +int Fequal(int , int );
  55073. +
  55074. +int internal_equal(register int o1,
  55075. +                   register int o2,
  55076. +                   int depth);
  55077. +
  55078. +extern struct Lisp_Subr Sfillarray;
  55079. +
  55080. +int Ffillarray(int , int );
  55081. +
  55082. +int nconc2(int s1,
  55083. +           int s2);
  55084. +
  55085. +extern struct Lisp_Subr Snconc;
  55086. +
  55087. +int Fnconc(int , int * );
  55088. +
  55089. +void mapcar1(int leni,
  55090. +             int * vals,
  55091. +             int fn,
  55092. +             int seq);
  55093. +
  55094. +extern struct Lisp_Subr Smapconcat;
  55095. +
  55096. +int Fmapconcat(int , int , int );
  55097. +
  55098. +extern struct Lisp_Subr Smapcar;
  55099. +
  55100. +int Fmapcar(int , int );
  55101. +
  55102. +extern struct Lisp_Subr Sy_or_n_p;
  55103. +
  55104. +int Fy_or_n_p(int );
  55105. +
  55106. +int do_yes_or_no_p(int prompt);
  55107. +
  55108. +extern struct Lisp_Subr Syes_or_no_p;
  55109. +
  55110. +int Fyes_or_no_p(int );
  55111. +
  55112. +extern struct Lisp_Subr Sload_average;
  55113. +
  55114. +int Fload_average(void);
  55115. +
  55116. +extern int Vfeatures;
  55117. +
  55118. +extern struct Lisp_Subr Sfeaturep;
  55119. +
  55120. +int Ffeaturep(int );
  55121. +
  55122. +extern struct Lisp_Subr Sprovide;
  55123. +
  55124. +int Fprovide(int );
  55125. +
  55126. +extern struct Lisp_Subr Srequire;
  55127. +
  55128. +int Frequire(int , int );
  55129. +
  55130. +int syms_of_fns(void);
  55131. +
  55132. diff -ru --new-file baseline/fsf/emacs/src/frame.c amiga/fsf/emacs/src/frame.c
  55133. --- baseline/fsf/emacs/src/frame.c    Fri Sep  9 21:01:36 1994
  55134. +++ amiga/fsf/emacs/src/frame.c    Sun Oct 15 17:11:21 1995
  55135. @@ -25,6 +25,15 @@
  55136.  #include "termhooks.h"
  55137.  #include "window.h"
  55138.  
  55139. +#ifdef USE_PROTOS
  55140. +#include "protos.h"
  55141. +#endif
  55142. +
  55143. +/* CHFIXME: cleanup HAVE_MOUSE changes, add staticpro, cleanup AMIGA changes (undo/change MULTI_FRAME changes) */
  55144. +#ifdef AMIGA /* CHFIXME */
  55145. +#include "amiga.h"
  55146. +#endif
  55147. +
  55148.  #ifdef MULTI_FRAME
  55149.  
  55150.  #include "buffer.h"
  55151. @@ -1082,7 +1091,9 @@
  55152.  
  55153.    return Qnil;
  55154.  }
  55155. +#endif
  55156.  
  55157. +#ifdef AMIGA
  55158.  DEFUN ("make-frame-visible", Fmake_frame_visible, Smake_frame_visible,
  55159.         0, 1, "",
  55160.    "Make the frame FRAME visible (assuming it is an X-window).\n\
  55161. @@ -1090,13 +1101,15 @@
  55162.    (frame)
  55163.       Lisp_Object frame;
  55164.  {
  55165. +#ifdef MULTI_FRAME
  55166.    if (NILP (frame))
  55167.      XSET (frame, Lisp_Frame, selected_frame);
  55168. -
  55169. +#endif
  55170. +  
  55171.    CHECK_LIVE_FRAME (frame, 0);
  55172.  
  55173.    /* I think this should be done with a hook.  */
  55174. -#ifdef HAVE_X_WINDOWS
  55175. +#if defined(HAVE_X_WINDOWS) || defined(AMIGA)
  55176.    if (FRAME_X_P (XFRAME (frame)))
  55177.      {
  55178.        FRAME_SAMPLE_VISIBILITY (XFRAME (frame));
  55179. @@ -1109,7 +1122,8 @@
  55180.  
  55181.    return frame;
  55182.  }
  55183. -
  55184. +#endif
  55185. +#ifdef MULTI_FRAME
  55186.  DEFUN ("make-frame-invisible", Fmake_frame_invisible, Smake_frame_invisible,
  55187.         0, 2, "",
  55188.    "Make the frame FRAME invisible (assuming it is an X-window).\n\
  55189. @@ -1232,8 +1246,8 @@
  55190.      }
  55191.    return value;
  55192.  }
  55193. -
  55194. -
  55195. +#endif
  55196. +#ifdef AMIGA
  55197.  DEFUN ("raise-frame", Fraise_frame, Sraise_frame, 1, 1, 0,
  55198.    "Bring FRAME to the front, so it occludes any frames it overlaps.\n\
  55199.  If FRAME is invisible, make it visible.\n\
  55200. @@ -1268,7 +1282,7 @@
  55201.  
  55202.    return Qnil;
  55203.  }
  55204. -
  55205. +#ifdef MULTI_FRAME
  55206.  
  55207.  DEFUN ("redirect-frame-focus", Fredirect_frame_focus, Sredirect_frame_focus,
  55208.         1, 2, 0,
  55209. @@ -1336,19 +1350,8 @@
  55210.  
  55211.  
  55212.  
  55213. -Lisp_Object
  55214. -get_frame_param (frame, prop)
  55215. -     register struct frame *frame;
  55216. -     Lisp_Object prop;
  55217. -{
  55218. -  register Lisp_Object tem;
  55219. -
  55220. -  tem = Fassq (prop, frame->param_alist);
  55221. -  if (EQ (tem, Qnil))
  55222. -    return tem;
  55223. -  return Fcdr (tem);
  55224. -}
  55225. -
  55226. +#endif
  55227. +#ifdef AMIGA
  55228.  void
  55229.  store_in_alist (alistptr, prop, val)
  55230.       Lisp_Object *alistptr, val;
  55231. @@ -1362,20 +1365,48 @@
  55232.    else
  55233.      Fsetcdr (tem, val);
  55234.  }
  55235. +#endif
  55236. +#ifdef AMIGA /* CHFIXME */
  55237. +#ifndef MULTI_FRAME
  55238. +#ifdef USE_EXTERNAL_MENU_BAR
  55239. +Lisp_Object the_only_param_alist; /* can\'t store it in the_only_window, it\'s collectile */
  55240. +Lisp_Object the_only_menu_bar_items; /* can\'t store it in the_only_window, it\'s collectile */
  55241. +Lisp_Object the_only_menu_bar_vector; /* can\'t store it in the_only_window, it\'s collectile */
  55242. +#endif
  55243. +#ifdef USE_SCROLL_BARS
  55244. +Lisp_Object the_only_scroll_bars;
  55245. +Lisp_Object the_only_condemned_scroll_bars;
  55246. +#endif
  55247. +#endif
  55248. +Lisp_Object
  55249. +get_frame_param (frame, prop)
  55250. +     FRAME_PTR frame;
  55251. +     Lisp_Object prop;
  55252. +{
  55253. +  register Lisp_Object tem;
  55254. +
  55255. +  tem = Fassq (prop, FRAME_PARAM_ALIST(f));
  55256. +  if (EQ (tem, Qnil))
  55257. +    return tem;
  55258. +  return Fcdr (tem);
  55259. +}
  55260. +
  55261. +extern Lisp_Object Qminibuffer; /* comes at end of this file CHFIXME */
  55262.  
  55263.  void
  55264.  store_frame_param (f, prop, val)
  55265. -     struct frame *f;
  55266. +     FRAME_PTR f;
  55267.       Lisp_Object prop, val;
  55268.  {
  55269.    register Lisp_Object tem;
  55270.  
  55271. -  tem = Fassq (prop, f->param_alist);
  55272. +  tem = Fassq (prop, FRAME_PARAM_ALIST(f));
  55273.    if (EQ (tem, Qnil))
  55274. -    f->param_alist = Fcons (Fcons (prop, val), f->param_alist);
  55275. +    FRAME_PARAM_ALIST(f) = Fcons (Fcons (prop, val), FRAME_PARAM_ALIST(f));
  55276.    else
  55277.      Fsetcdr (tem, val);
  55278.  
  55279. +#ifndef AMIGA /* CHFIXME meaning ? */
  55280.    if (EQ (prop, Qminibuffer)
  55281.        && XTYPE (val) == Lisp_Window)
  55282.      {
  55283. @@ -1386,9 +1417,22 @@
  55284.      error ("can't change the surrogate minibuffer of a frame with its own minibuffer");
  55285.  
  55286.        /* Install the chosen minibuffer window, with proper buffer.  */
  55287. -      f->minibuffer_window = val;
  55288. +      FRAME_MINIBUF_WINDOW(W) = val;
  55289.      }
  55290. +#endif
  55291.  }
  55292. +#endif /* AMIGA */
  55293. +
  55294. +#ifdef AMIGA
  55295. +/* CHFIXME: defined below */
  55296. +
  55297. +extern Lisp_Object Qname;
  55298. +extern Lisp_Object Qheight;
  55299. +extern Lisp_Object Qwidth;
  55300. +extern Lisp_Object Qmodeline;
  55301. +extern Lisp_Object Qminibuffer;
  55302. +extern Lisp_Object Qunsplittable;
  55303. +extern Lisp_Object Qmenu_bar_lines;
  55304.  
  55305.  DEFUN ("frame-parameters", Fframe_parameters, Sframe_parameters, 0, 1, 0,
  55306.    "Return the parameters-alist of frame FRAME.\n\
  55307. @@ -1412,14 +1456,21 @@
  55308.    if (!FRAME_LIVE_P (f))
  55309.      return Qnil;
  55310.  
  55311. -  alist = Fcopy_alist (f->param_alist);
  55312. +  alist = Fcopy_alist (FRAME_PARAM_ALIST(f));
  55313. +
  55314. +#ifdef AMIGA /* CHFIXME */
  55315. +  store_in_alist (&alist, Qname, build_string ("emacs"));
  55316. +#else
  55317.    store_in_alist (&alist, Qname, f->name);
  55318. +#endif
  55319.    store_in_alist (&alist, Qheight, make_number (FRAME_HEIGHT (f)));
  55320.    store_in_alist (&alist, Qwidth, make_number (FRAME_WIDTH (f)));
  55321.    store_in_alist (&alist, Qmodeline, (FRAME_WANTS_MODELINE_P (f) ? Qt : Qnil));
  55322.    store_in_alist (&alist, Qminibuffer,
  55323.            (! FRAME_HAS_MINIBUF_P (f) ? Qnil
  55324. +#ifndef AMIGA /* CHFIXME: meaning? */
  55325.             : FRAME_MINIBUF_ONLY_P (f) ? Qonly
  55326. +#endif
  55327.             : FRAME_MINIBUF_WINDOW (f)));
  55328.    store_in_alist (&alist, Qunsplittable, (FRAME_NO_SPLIT_P (f) ? Qt : Qnil));
  55329.  
  55330. @@ -1431,9 +1482,16 @@
  55331.  #endif
  55332.      /* This ought to be correct in f->param_alist for an X frame.  */
  55333.      store_in_alist (&alist, Qmenu_bar_lines, FRAME_MENU_BAR_LINES (f));
  55334. +#ifdef AMIGA /* CHFIXME */
  55335. +  {
  55336. +    if (EMACS_WIN(f))
  55337. +    x_report_frame_params (f, &alist);
  55338. +  }
  55339. +#endif
  55340.    return alist;
  55341.  }
  55342. -
  55343. +#endif
  55344. +#ifdef AMIGA
  55345.  DEFUN ("modify-frame-parameters", Fmodify_frame_parameters, 
  55346.         Smodify_frame_parameters, 2, 2, 0,
  55347.    "Modify the parameters of frame FRAME according to ALIST.\n\
  55348. @@ -1471,9 +1529,18 @@
  55349.  #endif
  55350.  #endif
  55351.  
  55352. +#ifdef AMIGA /* CHFIXME */
  55353. +  {
  55354. +    if (EMACS_WIN(f))
  55355. +      x_set_frame_parameters (f, alist);
  55356. +  }
  55357. +#endif
  55358. +
  55359.    return Qnil;
  55360.  }
  55361. +#endif /* AMIGA */
  55362.  
  55363. +#ifdef MULTI_FRAME
  55364.  DEFUN ("frame-char-height", Fframe_char_height, Sframe_char_height,
  55365.    0, 1, 0,
  55366.    "Height in pixels of a line in the font in frame FRAME.\n\
  55367. @@ -1842,6 +1909,9 @@
  55368.  Lisp_Object Qwidth;
  55369.  
  55370.  Lisp_Object Vterminal_frame;
  55371. +#ifdef AMIGA
  55372. +Lisp_Object Vdefault_frame_alist;
  55373. +#endif
  55374.  
  55375.  /* Unless this function is defined, providing set-frame-height and
  55376.     set-frame-width doesn't help compatibility any, since they both
  55377. @@ -2025,10 +2095,73 @@
  55378.       make-docfile does not pay attention to #if, for good reason!  */
  55379.    0)
  55380.    ()
  55381. +#ifndef HAVE_MOUSE
  55382.  {
  55383.    return Fcons (Qnil, Fcons (Qnil, Qnil));
  55384.  }
  55385. +#else
  55386. +{
  55387. +  FRAME_PTR f;
  55388. +  Lisp_Object lispy_dummy;
  55389. +  enum scroll_bar_part party_dummy;
  55390. +  Lisp_Object x, y;
  55391. +  int col, row;
  55392. +  unsigned long long_dummy;
  55393. +
  55394. +  f = selected_frame;
  55395. +  x = y = Qnil;
  55396. +
  55397. +  /* It's okay for the hook to refrain from storing anything.  */
  55398. +  if (mouse_position_hook)
  55399. +    (*mouse_position_hook) (&f,
  55400. +                &lispy_dummy, &party_dummy,
  55401. +                &x, &y,
  55402. +                &long_dummy);
  55403. +  if (! NILP (x))
  55404. +    {
  55405. +      col = XINT (x);
  55406. +      row = XINT (y);
  55407. +      pixel_to_glyph_coords (f, col, row, &col, &row, 0, 1);
  55408. +      XSETINT (x, col);
  55409. +      XSETINT (y, row);
  55410. +    }
  55411. +  lispy_dummy = Qnil;
  55412. +  return Fcons (lispy_dummy, Fcons (x, y));
  55413. +}
  55414. +
  55415. +DEFUN ("mouse-pixel-position", Fmouse_pixel_position,
  55416. +       Smouse_pixel_position, 0, 0, 0,
  55417. +  "Return a list (FRAME X . Y) giving the current mouse frame and position.\n\
  55418. +The position is given in pixel units, where (0, 0) is the\n\
  55419. +upper-left corner.\n\
  55420. +If Emacs is running on a mouseless terminal or hasn't been programmed\n\
  55421. +to read the mouse position, it returns the selected frame for FRAME\n\
  55422. +and nil for X and Y.")
  55423. +  ()
  55424. +{
  55425. +  FRAME_PTR f;
  55426. +  Lisp_Object lispy_dummy;
  55427. +  enum scroll_bar_part party_dummy;
  55428. +  Lisp_Object x, y;
  55429. +  int col, row;
  55430. +  unsigned long long_dummy;
  55431. +
  55432. +  f = selected_frame;
  55433. +  x = y = Qnil;
  55434. +
  55435. +  /* It's okay for the hook to refrain from storing anything.  */
  55436. +  if (mouse_position_hook)
  55437. +    (*mouse_position_hook) (&f,
  55438. +                &lispy_dummy, &party_dummy,
  55439. +                &x, &y,
  55440. +                &long_dummy);
  55441. +  lispy_dummy = Qnil;
  55442. +  return Fcons (lispy_dummy, Fcons (x, y));
  55443. +}
  55444. +#endif /* HAVE_MOUSE */
  55445. +
  55446.  
  55447. +#ifndef AMIGA
  55448.  void
  55449.  store_in_alist (alistptr, prop, val)
  55450.       Lisp_Object *alistptr, val;
  55451. @@ -2042,7 +2175,9 @@
  55452.    else
  55453.      Fsetcdr (tem, val);
  55454.  }
  55455. +#endif
  55456.  
  55457. +#ifndef AMIGA
  55458.  DEFUN ("frame-parameters", Fframe_parameters, Sframe_parameters, 0, 1, 0,
  55459.    /* Don't confuse make-docfile by having two doc strings for this function.
  55460.       make-docfile does not pay attention to #if, for good reason!  */
  55461. @@ -2075,7 +2210,9 @@
  55462.  
  55463.    return alist;
  55464.  }
  55465. +#endif
  55466.  
  55467. +#ifndef AMIGA
  55468.  DEFUN ("modify-frame-parameters", Fmodify_frame_parameters, 
  55469.         Smodify_frame_parameters, 2, 2, 0,
  55470.    /* Don't confuse make-docfile by having two doc strings for this function.
  55471. @@ -2086,6 +2223,7 @@
  55472.  {
  55473.    return Qnil;
  55474.  }
  55475. +#endif
  55476.  
  55477.  DEFUN ("frame-live-p", Fframe_live_p, Sframe_live_p, 1, 1, 0,
  55478.    /* Don't confuse make-docfile by having two doc strings for this function.
  55479. @@ -2118,6 +2256,34 @@
  55480.      "The initial frame-object, which represents Emacs's stdout.");
  55481.    XFASTINT (Vterminal_frame) = 0;
  55482.  
  55483. +#ifdef AMIGA
  55484. +  DEFVAR_LISP ("default-frame-alist", &Vdefault_frame_alist,
  55485. +    "Alist of default values for frame creation.\n\
  55486. +These may be set in your init file, like this:\n\
  55487. +  (setq default-frame-alist '((width . 80) (height . 55)))\n\
  55488. +These override values given in window system configuration data, like\n\
  55489. +X Windows' defaults database.\n\
  55490. +For values specific to the first Emacs frame, see `initial-frame-alist'.\n\
  55491. +For values specific to the separate minibuffer frame, see\n\
  55492. +`minibuffer-frame-alist'.");
  55493. +  Vdefault_frame_alist = Qnil;
  55494. +#endif /* AMIGA */
  55495. +
  55496. +#ifdef USE_EXTERNAL_MENU_BAR
  55497. +  the_only_param_alist = Qnil;
  55498. +  staticpro(&the_only_param_alist);
  55499. +  the_only_menu_bar_items = Qnil;
  55500. +  staticpro(&the_only_menu_bar_items);
  55501. +  the_only_menu_bar_vector = Qnil;
  55502. +  staticpro(&the_only_menu_bar_vector);
  55503. +#endif /* USE_EXTERNAL_MENU_BAR */
  55504. +#ifdef USE_SCROLL_BARS
  55505. +  the_only_scroll_bars = Qnil;
  55506. +  staticpro(&the_only_scroll_bars);
  55507. +  the_only_condemned_scroll_bars = Qnil;
  55508. +  staticpro(&the_only_condemned_scroll_bars);
  55509. +#endif /* USE_SCROLL_BARS */
  55510. +
  55511.    defsubr (&Sselected_frame);
  55512.    defsubr (&Sframe_first_window);
  55513.    defsubr (&Sframep);
  55514. @@ -2135,6 +2301,15 @@
  55515.    defsubr (&Sframe_width);
  55516.    Ffset (intern ("screen-width"), intern ("frame-width"));
  55517.    defsubr (&Smouse_position);
  55518. +#ifdef AMIGA
  55519. +  defsubr (&Smouse_pixel_position);
  55520. +  defsubr (&Smake_frame_visible);
  55521. +#if 0
  55522. +  defsubr (&Smake_frame_invisible);
  55523. +#endif
  55524. +  defsubr (&Sraise_frame);
  55525. +  defsubr (&Slower_frame);
  55526. +#endif
  55527.    defsubr (&Sframe_parameters);
  55528.    defsubr (&Smodify_frame_parameters);
  55529.    defsubr (&Sframe_live_p);
  55530. diff -ru --new-file baseline/fsf/emacs/src/frame.h amiga/fsf/emacs/src/frame.h
  55531. --- baseline/fsf/emacs/src/frame.h    Tue Jul 12 21:15:24 1994
  55532. +++ amiga/fsf/emacs/src/frame.h    Sun Oct 15 17:11:23 1995
  55533. @@ -36,8 +36,13 @@
  55534.     to represent the one frame we support.  This is cleaner than
  55535.     having miscellaneous random variables scattered about.  */
  55536.  
  55537. +#ifndef AMIGA
  55538.  enum output_method
  55539.  { output_termcap, output_x_window };
  55540. +#else
  55541. +enum output_method
  55542. +{ output_termcap, output_x_window, output_i_window }; /* intuition  CHFIXME, unused yet*/
  55543. +#endif
  55544.  
  55545.  struct frame
  55546.  {
  55547. @@ -84,8 +89,10 @@
  55548.    /* New height and width for pending size change.  0 if no change pending.  */
  55549.    int new_height, new_width;
  55550.  
  55551. +#ifndef AMIGA /* no MULTIFRAME, CHFIXME */ /* these are undefined to catch erroneous references */
  55552.    /* Name of this frame: a Lisp string.  See also `explicit_name'.  */
  55553.    Lisp_Object name;
  55554. +#endif
  55555.  
  55556.    /* The frame which should receive keystrokes that occur in this
  55557.       frame, or nil if they should go to the frame itself.  This is
  55558. @@ -117,11 +124,13 @@
  55559.       can actually appear to exist.  */
  55560.    Lisp_Object minibuffer_window;
  55561.  
  55562. +#ifndef AMIGA /* no MULTIFRAME, CHFIXME */
  55563.    /* Parameter alist of this frame.
  55564.       These are the parameters specified when creating the frame
  55565.       or modified with modify-frame-parameters.  */
  55566.    Lisp_Object param_alist;
  55567. -
  55568. +#endif
  55569. +  
  55570.    /* List of scroll bars on this frame.  
  55571.       Actually, we don't specify exactly what is stored here at all; the
  55572.       scroll bar implementation code can use it to store anything it likes.
  55573. @@ -129,17 +138,23 @@
  55574.       instead of in the `display' structure so that the garbage
  55575.       collector doesn't need to look inside the window-system-dependent
  55576.       structure.  */
  55577. +#if defined(MULTI_FRAME) || !defined(USE_SCROLL_BARS) /* no MULTI_FRAME, CHFIXME */
  55578.    Lisp_Object scroll_bars;
  55579.    Lisp_Object condemned_scroll_bars;
  55580. +#endif
  55581.  
  55582. +#ifndef AMIGA /* no MULTIFRAME, CHFIXME */
  55583.    /* List of elements to display in the menu bar.
  55584.       The elements have the form (KEY STRING . nil) to start;
  55585.       when they are displayed, the hpos of the left edge goes in the cddr.  */
  55586.    Lisp_Object menu_bar_items;
  55587. +#endif
  55588.  
  55589. +#ifndef AMIGA /* no MULTIFRAME, CHFIXME */
  55590.    /* Alist of elements (FACE-NAME . FACE-VECTOR-DATA).  */
  55591.    Lisp_Object face_alist;
  55592. -
  55593. +#endif
  55594. +  
  55595.    /* The output method says how the contents of this frame
  55596.       are displayed.  It could be using termcap, or using an X window.  */
  55597.    enum output_method output_method;
  55598. @@ -152,7 +167,7 @@
  55599.    /* Number of lines of menu bar.  */
  55600.    int menu_bar_lines;
  55601.  
  55602. -#ifdef USE_X_TOOLKIT
  55603. +#if defined(USE_X_TOOLKIT) || defined(USE_EXTERNAL_MENU_BAR) /* CHFIXME */
  55604.    /* Nonzero means using a menu bar that comes from the X toolkit.  */
  55605.    int external_menu_bar;
  55606.  #endif
  55607. @@ -234,10 +249,12 @@
  55608.       for lines beyond a certain vpos.  This is the vpos.  */
  55609.    int scroll_bottom_vpos;
  55610.  
  55611. +#ifndef AMIGA
  55612.    /* A vector that records the entire structure of this frame's menu bar.
  55613.       For the format of the data, see extensive comments in xmenu.c.
  55614.       Only the X toolkit version uses this.  */
  55615.    Lisp_Object menu_bar_vector;
  55616. +#endif
  55617.    /* Number of elements in the vector that have meaningful data.  */
  55618.    int menu_bar_items_used;
  55619.  };
  55620. @@ -264,6 +281,7 @@
  55621.  #define FRAME_WIDTH(f) (f)->width
  55622.  #define FRAME_NEW_HEIGHT(f) (f)->new_height
  55623.  #define FRAME_NEW_WIDTH(f) (f)->new_width
  55624. +#define FRAME_DISPLAY(f) ((f)->display.x)
  55625.  #define FRAME_MENU_BAR_LINES(f) (f)->menu_bar_lines
  55626.  #ifdef USE_X_TOOLKIT
  55627.  #define FRAME_EXTERNAL_MENU_BAR(f) (f)->external_menu_bar
  55628. @@ -293,9 +311,11 @@
  55629.  #define FRAME_FOCUS_FRAME(f) (f)->focus_frame
  55630.  #define FRAME_CAN_HAVE_SCROLL_BARS(f) ((f)->can_have_scroll_bars)
  55631.  #define FRAME_HAS_VERTICAL_SCROLL_BARS(f) ((f)->has_vertical_scroll_bars)
  55632. +#define FRAME_PARAM_ALIST(f) ((f)->param_alist)
  55633.  #define FRAME_SCROLL_BARS(f) ((f)->scroll_bars)
  55634.  #define FRAME_CONDEMNED_SCROLL_BARS(f) ((f)->condemned_scroll_bars)
  55635.  #define FRAME_MENU_BAR_ITEMS(f) ((f)->menu_bar_items)
  55636. +#define FRAME_MENU_BAR_VECTOR(f) ((f)->menu_bar_vector)
  55637.  
  55638.  /* Emacs's redisplay code could become confused if a frame's
  55639.     visibility changes at arbitrary times.  For example, if a frame is
  55640. @@ -384,11 +404,25 @@
  55641.  extern int selected_frame;
  55642.  extern int last_nonminibuf_frame;
  55643.  
  55644. +#ifdef USE_EXTERNAL_MENU_BAR
  55645. +extern Lisp_Object the_only_param_alist; /* can\'t store it in the_only_window, it\'s collectile */
  55646. +extern Lisp_Object the_only_menu_bar_items; /* can\'t store it in the_only_window, it\'s collectile */
  55647. +extern Lisp_Object the_only_menu_bar_vector; /* can\'t store it in the_only_window, it\'s collectile */
  55648. +#endif /* USE_EXTERNAL_MENU_BAR */
  55649. +#ifdef USE_SCROLL_BARS
  55650. +Lisp_Object the_only_scroll_bars;
  55651. +Lisp_Object the_only_condemned_scroll_bars;
  55652. +#endif
  55653. +
  55654.  #define XFRAME(f) selected_frame
  55655.  #define WINDOW_FRAME(w) selected_frame
  55656.  
  55657.  #define FRAME_LIVE_P(f) 1
  55658. +#ifndef AMIGA
  55659.  #define FRAME_TERMCAP_P(f) 1
  55660. +#else
  55661. +#define FRAME_TERMCAP_P(f) 0
  55662. +#endif
  55663.  #define FRAME_X_P(f) 0
  55664.  #define FRAME_MINIBUF_ONLY_P(f) 0
  55665.  #define FRAME_HAS_MINIBUF_P(f) 1
  55666. @@ -400,6 +434,12 @@
  55667.  #define FRAME_NEW_HEIGHT(f) (the_only_frame.new_height)
  55668.  #define FRAME_NEW_WIDTH(f) (the_only_frame.new_width)
  55669.  #define FRAME_MENU_BAR_LINES(f) (the_only_frame.menu_bar_lines)
  55670. +#ifdef AMIGA
  55671. +#define FRAME_DISPLAY(f) (the_only_frame.display.x)
  55672. +#endif
  55673. +#ifdef USE_EXTERNAL_MENU_BAR
  55674. +#define FRAME_EXTERNAL_MENU_BAR(f) the_only_frame.external_menu_bar
  55675. +#endif /* USE_EXTERNAL_MENU_BAR */
  55676.  #define FRAME_CURSOR_X(f) (the_only_frame.cursor_x)
  55677.  #define FRAME_CURSOR_Y(f) (the_only_frame.cursor_y)
  55678.  #define FRAME_SET_VISIBLE(f,p) (p)
  55679. @@ -423,10 +463,20 @@
  55680.  #define FRAME_CAN_HAVE_SCROLL_BARS(f) (the_only_frame.can_have_scroll_bars)
  55681.  #define FRAME_HAS_VERTICAL_SCROLL_BARS(f) \
  55682.    (the_only_frame.has_vertical_scroll_bars)
  55683. +#ifdef USE_EXTERNAL_MENU_BAR
  55684. +#define FRAME_PARAM_ALIST(f) (the_only_param_alist)
  55685. +#define FRAME_MENU_BAR_ITEMS(f) (the_only_menu_bar_items)
  55686. +#define FRAME_MENU_BAR_VECTOR(f) (the_only_menu_bar_vector)
  55687. +#else
  55688. +#define FRAME_MENU_BAR_ITEMS(f) (the_only_frame.menu_bar_items)
  55689. +#endif
  55690. +#ifdef USE_SCROLL_BARS
  55691. +#define FRAME_SCROLL_BARS(f) (the_only_scroll_bars)
  55692. +#define FRAME_CONDEMNED_SCROLL_BARS(f) (the_only_condemned_scroll_bars)
  55693. +#else
  55694.  #define FRAME_SCROLL_BARS(f) (the_only_frame.scroll_bars)
  55695.  #define FRAME_CONDEMNED_SCROLL_BARS(f) (the_only_frame.condemned_scroll_bars)
  55696. -#define FRAME_MENU_BAR_ITEMS(f) (the_only_frame.menu_bar_items)
  55697. -
  55698. +#endif
  55699.  /* See comments in definition above.  */
  55700.  #define FRAME_SAMPLE_VISIBILITY(f) (0)
  55701.  
  55702. diff -ru --new-file baseline/fsf/emacs/src/frame_protos.h amiga/fsf/emacs/src/frame_protos.h
  55703. --- baseline/fsf/emacs/src/frame_protos.h    Wed Dec 31 17:00:00 1969
  55704. +++ amiga/fsf/emacs/src/frame_protos.h    Sun Oct 15 17:11:25 1995
  55705. @@ -0,0 +1,96 @@
  55706. +/* Prototypes for functions defined in
  55707. +frame.c
  55708. + */
  55709. +
  55710. +extern int Qheight;
  55711. +
  55712. +extern int Qminibuffer;
  55713. +
  55714. +extern int Qmodeline;
  55715. +
  55716. +extern int Qname;
  55717. +
  55718. +extern int Qunsplittable;
  55719. +
  55720. +extern int Qmenu_bar_lines;
  55721. +
  55722. +extern int Qwidth;
  55723. +
  55724. +extern int Vterminal_frame;
  55725. +
  55726. +extern struct Lisp_Subr Sselected_frame;
  55727. +
  55728. +int Fselected_frame(void);
  55729. +
  55730. +extern struct Lisp_Subr Sframep;
  55731. +
  55732. +int Fframep(int );
  55733. +
  55734. +extern struct Lisp_Subr Sset_frame_height;
  55735. +
  55736. +int Fset_frame_height(int , int , int );
  55737. +
  55738. +extern struct Lisp_Subr Sset_frame_width;
  55739. +
  55740. +int Fset_frame_width(int , int , int );
  55741. +
  55742. +extern struct Lisp_Subr Sset_frame_size;
  55743. +
  55744. +int Fset_frame_size(int , int , int );
  55745. +
  55746. +extern struct Lisp_Subr Sframe_height;
  55747. +
  55748. +int Fframe_height(int );
  55749. +
  55750. +extern struct Lisp_Subr Sframe_width;
  55751. +
  55752. +int Fframe_width(int );
  55753. +
  55754. +extern struct Lisp_Subr Sframe_char_height;
  55755. +
  55756. +int Fframe_char_height(int );
  55757. +
  55758. +extern struct Lisp_Subr Sframe_char_width;
  55759. +
  55760. +int Fframe_char_width(int );
  55761. +
  55762. +extern struct Lisp_Subr Sframe_pixel_height;
  55763. +
  55764. +int Fframe_pixel_height(int );
  55765. +
  55766. +extern struct Lisp_Subr Sframe_pixel_width;
  55767. +
  55768. +int Fframe_pixel_width(int );
  55769. +
  55770. +extern struct Lisp_Subr Sset_screen_height;
  55771. +
  55772. +int Fset_screen_height(int , int );
  55773. +
  55774. +extern struct Lisp_Subr Sset_screen_width;
  55775. +
  55776. +int Fset_screen_width(int , int );
  55777. +
  55778. +extern struct Lisp_Subr Smouse_position;
  55779. +
  55780. +int Fmouse_position(void);
  55781. +
  55782. +void store_in_alist(int * alistptr,
  55783. +                    int prop,
  55784. +                    int val);
  55785. +
  55786. +extern struct Lisp_Subr Sframe_parameters;
  55787. +
  55788. +int Fframe_parameters(int );
  55789. +
  55790. +extern struct Lisp_Subr Smodify_frame_parameters;
  55791. +
  55792. +int Fmodify_frame_parameters(int , int );
  55793. +
  55794. +extern struct Lisp_Subr Sframe_live_p;
  55795. +
  55796. +int Fframe_live_p(int );
  55797. +
  55798. +int syms_of_frame(void);
  55799. +
  55800. +int keys_of_frame(void);
  55801. +
  55802. diff -ru --new-file baseline/fsf/emacs/src/getloadavg_protos.h amiga/fsf/emacs/src/getloadavg_protos.h
  55803. --- baseline/fsf/emacs/src/getloadavg_protos.h    Wed Dec 31 17:00:00 1969
  55804. +++ amiga/fsf/emacs/src/getloadavg_protos.h    Sun Oct 15 17:11:27 1995
  55805. @@ -0,0 +1,7 @@
  55806. +/* Prototypes for functions defined in
  55807. +getloadavg.c
  55808. + */
  55809. +
  55810. +int getloadavg(double * loadavg,
  55811. +               int nelem);
  55812. +
  55813. diff -ru --new-file baseline/fsf/emacs/src/indent_protos.h amiga/fsf/emacs/src/indent_protos.h
  55814. --- baseline/fsf/emacs/src/indent_protos.h    Wed Dec 31 17:00:00 1969
  55815. +++ amiga/fsf/emacs/src/indent_protos.h    Sun Oct 15 17:11:28 1995
  55816. @@ -0,0 +1,74 @@
  55817. +/* Prototypes for functions defined in
  55818. +indent.c
  55819. + */
  55820. +
  55821. +extern int indent_tabs_mode;
  55822. +
  55823. +extern int last_known_column;
  55824. +
  55825. +extern int last_known_column_point;
  55826. +
  55827. +extern int last_known_column_modified;
  55828. +
  55829. +struct Lisp_Vector * buffer_display_table(void);
  55830. +
  55831. +extern struct Lisp_Subr Scurrent_column;
  55832. +
  55833. +int Fcurrent_column(void);
  55834. +
  55835. +int invalidate_current_column(void);
  55836. +
  55837. +int current_column(void);
  55838. +
  55839. +extern struct Lisp_Subr Sindent_to;
  55840. +
  55841. +int Findent_to(int , int );
  55842. +
  55843. +extern struct Lisp_Subr Scurrent_indentation;
  55844. +
  55845. +int Fcurrent_indentation(void);
  55846. +
  55847. +int position_indentation(register int pos);
  55848. +
  55849. +int indented_beyond_p(int pos,
  55850. +                      int column);
  55851. +
  55852. +extern struct Lisp_Subr Smove_to_column;
  55853. +
  55854. +int Fmove_to_column(int , int );
  55855. +
  55856. +extern struct position val_compute_motion;
  55857. +
  55858. +struct position * compute_motion(int from,
  55859. +                                 int fromvpos,
  55860. +                                 int fromhpos,
  55861. +                                 int to,
  55862. +                                 int tovpos,
  55863. +
  55864. + int tohpos,
  55865. +                                 register int width,
  55866. +                                 int hscroll,
  55867. +                                 int tab_offset,
  55868. +                                 struct window * win);
  55869. +
  55870. +extern struct Lisp_Subr Scompute_motion;
  55871. +
  55872. +int Fcompute_motion(int , int , int , int , int , int , int );
  55873. +
  55874. +int pos_tab_offset(struct window * w,
  55875. +                   register int pos);
  55876. +
  55877. +extern struct position val_vmotion;
  55878. +
  55879. +struct position * vmotion(register int from,
  55880. +                          register int vtarget,
  55881. +                          register int width,
  55882. +                          int hscroll,
  55883. +                          int window);
  55884. +
  55885. +extern struct Lisp_Subr Svertical_motion;
  55886. +
  55887. +int Fvertical_motion(int , int );
  55888. +
  55889. +int syms_of_indent(void);
  55890. +
  55891. diff -ru --new-file baseline/fsf/emacs/src/insdel_protos.h amiga/fsf/emacs/src/insdel_protos.h
  55892. --- baseline/fsf/emacs/src/insdel_protos.h    Wed Dec 31 17:00:00 1969
  55893. +++ amiga/fsf/emacs/src/insdel_protos.h    Sun Oct 15 17:11:30 1995
  55894. @@ -0,0 +1,76 @@
  55895. +/* Prototypes for functions defined in
  55896. +insdel.c
  55897. + */
  55898. +
  55899. +int move_gap(int pos);
  55900. +
  55901. +void gap_left(register int pos,
  55902. +              int newgap);
  55903. +
  55904. +void gap_right(register int pos);
  55905. +
  55906. +void adjust_markers(register int from,
  55907. +                    register int to,
  55908. +                    register int amount);
  55909. +
  55910. +void adjust_point(int amount);
  55911. +
  55912. +int make_gap(int increment);
  55913. +
  55914. +int insert(register unsigned char * string,
  55915. +           register int length);
  55916. +
  55917. +void insert_1(register unsigned char * string,
  55918. +              register int length);
  55919. +
  55920. +int insert_from_string(int string,
  55921. +                       register int pos,
  55922. +                       register int length,
  55923. +                       int inherit);
  55924. +
  55925. +void insert_from_string_1(int string,
  55926. +                          register int pos,
  55927. +                          register int length,
  55928. +                          int inherit);
  55929. +
  55930. +void insert_char(int c);
  55931. +
  55932. +void insert_string(char * s);
  55933. +
  55934. +int insert_before_markers(unsigned char * string,
  55935. +                          register int length);
  55936. +
  55937. +int insert_from_string_before_marker(int string,
  55938. +                                     register int pos,
  55939. +                                     register int length,
  55940. +                                     int inherit);
  55941. +
  55942. +int del_range(register int from,
  55943. +              register int to);
  55944. +
  55945. +int del_range_1(register int from,
  55946. +                register int to,
  55947. +                register int prepare);
  55948. +
  55949. +int modify_region(struct buffer * buffer,
  55950. +                  int start,
  55951. +                  int end);
  55952. +
  55953. +int prepare_to_modify_buffer(int start,
  55954. +                             int end);
  55955. +
  55956. +int before_change_function_restore(int value);
  55957. +
  55958. +int after_change_function_restore(int value);
  55959. +
  55960. +int before_change_functions_restore(int value);
  55961. +
  55962. +int after_change_functions_restore(int value);
  55963. +
  55964. +int signal_before_change(int start,
  55965. +                         int end);
  55966. +
  55967. +int signal_after_change(int pos,
  55968. +                        int lendel,
  55969. +                        int lenins);
  55970. +
  55971. diff -ru --new-file baseline/fsf/emacs/src/intervals.h amiga/fsf/emacs/src/intervals.h
  55972. --- baseline/fsf/emacs/src/intervals.h    Tue May  3 19:19:38 1994
  55973. +++ amiga/fsf/emacs/src/intervals.h    Sun Oct 15 17:11:32 1995
  55974. @@ -227,10 +227,10 @@
  55975.  #define copy_intervals_to_string(string,buffer,position,length)
  55976.  #define verify_interval_modification(buffer,start,end)
  55977.  #define insert_interval_copy(source,position,end,sink,at)
  55978. -#define graft_intervals_into_buffer(tree,position,bufferptr)
  55979. +#define graft_intervals_into_buffer(source, position, length, buffer, inherit)
  55980.  #define offset_intervals(buffer,position,length)
  55981.  #define copy_intervals(tree,start,length)
  55982. -
  55983. +#define copy_text_properties(start, end, src, pos, dest, prop)
  55984.  #define syms_of_textprop()
  55985.  
  55986.  #endif /* don't support text properties */
  55987. diff -ru --new-file baseline/fsf/emacs/src/keyboard.c amiga/fsf/emacs/src/keyboard.c
  55988. --- baseline/fsf/emacs/src/keyboard.c    Wed Oct  5 22:19:25 1994
  55989. +++ amiga/fsf/emacs/src/keyboard.c    Sun Oct 15 17:11:36 1995
  55990. @@ -60,6 +60,20 @@
  55991.  /* Include systime.h after xterm.h to avoid double inclusion of time.h. */
  55992.  #include "systime.h"
  55993.  
  55994. +#ifdef AMIGA
  55995. +#define FAR far
  55996. +#else
  55997. +#define FAR
  55998. +#endif
  55999. +
  56000. +#ifdef USE_PROTOS
  56001. +#include "protos.h"
  56002. +#endif
  56003. +
  56004. +#ifdef USE_X_TOOLKIT /* CHFIXME */
  56005. +#define USE_EXTERNAL_MENU_BAR
  56006. +#endif
  56007. +
  56008.  extern int errno;
  56009.  
  56010.  /* Variables for blockinput.h: */
  56011. @@ -352,7 +366,10 @@
  56012.     If kbd_fetch_ptr == kbd_store_ptr, the buffer is empty.
  56013.     This may be kbd_buffer + KBD_BUFFER_SIZE, meaning that the the
  56014.     next available char is in kbd_buffer[0].  */
  56015. -static struct input_event *kbd_fetch_ptr;
  56016. +#ifndef AMIGA
  56017. +static
  56018. +#endif
  56019. +struct input_event *kbd_fetch_ptr;
  56020.  
  56021.  /* Pointer to next place to store character in kbd_buffer.  This
  56022.     may be kbd_buffer + KBD_BUFFER_SIZE, meaning that the next
  56023. @@ -360,7 +377,10 @@
  56024.  #ifdef __STDC__
  56025.  volatile
  56026.  #endif
  56027. -static struct input_event *kbd_store_ptr;
  56028. +#ifndef AMIGA
  56029. +static
  56030. +#endif
  56031. +struct input_event *kbd_store_ptr;
  56032.  
  56033.  /* The above pair of variables forms a "queue empty" flag.  When we
  56034.     enqueue a non-hook event, we increment kbd_write_count.  When we
  56035. @@ -933,7 +953,7 @@
  56036.  
  56037.  Lisp_Object Fcommand_execute ();
  56038.  static int read_key_sequence ();
  56039. -static void safe_run_hooks ();
  56040. +static void safe_run_hooks (Lisp_Object);
  56041.  
  56042.  Lisp_Object
  56043.  command_loop_1 ()
  56044. @@ -2312,7 +2332,7 @@
  56045.  /* This is a list of keysym codes for special "accent" characters.
  56046.     It parallels lispy_accent_keys.  */
  56047.  
  56048. -static int lispy_accent_codes[] =
  56049. +static int FAR lispy_accent_codes[] =
  56050.  {
  56051.  #ifdef XK_dead_circumflex
  56052.    XK_dead_circumflex,
  56053. @@ -2384,7 +2404,7 @@
  56054.  /* This is a list of Lisp names for special "accent" characters.
  56055.     It parallels lispy_accent_codes.  */
  56056.  
  56057. -static char *lispy_accent_keys[] =
  56058. +static char * FAR lispy_accent_keys[] =
  56059.  {
  56060.    "dead-circumflex",
  56061.    "dead-grave",
  56062. @@ -2403,7 +2423,7 @@
  56063.  
  56064.  /* You'll notice that this table is arranged to be conveniently
  56065.     indexed by X Windows keysym values.  */
  56066. -static char *lispy_function_keys[] =
  56067. +static char * FAR lispy_function_keys[] =
  56068.    {
  56069.      /* X Keysym value */
  56070.  
  56071. @@ -2497,7 +2517,7 @@
  56072.      0, 0, 0, 0, 0, 0, 0, "delete"
  56073.      };
  56074.  
  56075. -static char *lispy_mouse_names[] = 
  56076. +static char * FAR lispy_mouse_names[] = 
  56077.  {
  56078.    "mouse-1", "mouse-2", "mouse-3", "mouse-4", "mouse-5"
  56079.  };
  56080. @@ -2541,9 +2561,9 @@
  56081.  
  56082.  int double_click_count;
  56083.  
  56084. -#ifdef USE_X_TOOLKIT
  56085. +#ifdef USE_EXTERNAL_MENU_BAR
  56086.  extern Lisp_Object map_event_to_object ();
  56087. -#endif /* USE_X_TOOLKIT  */
  56088. +#endif /* USE_EXTERNAL_MENU_BAR  */
  56089.  
  56090.  /* Given a struct input_event, build the lisp event which represents
  56091.     it.  If EVENT is 0, build a mouse movement event from the mouse
  56092. @@ -2651,7 +2671,7 @@
  56093.          pixel_to_glyph_coords (f, XINT (event->x), XINT (event->y),
  56094.                     &column, &row, 0, 0);
  56095.  
  56096. -#ifdef USE_X_TOOLKIT
  56097. +#ifdef USE_EXTERNAL_MENU_BAR
  56098.          if (FRAME_EXTERNAL_MENU_BAR (f) && XINT (event->y) == -1)
  56099.  #else
  56100.          if (row < FRAME_MENU_BAR_LINES (f))
  56101. @@ -2667,13 +2687,13 @@
  56102.          if (! (event->modifiers & down_modifier))
  56103.            return Qnil;
  56104.  
  56105. -#ifdef USE_X_TOOLKIT
  56106. +#ifdef USE_EXTERNAL_MENU_BAR
  56107.          /* The click happened in the menubar.
  56108.             Look for the menu item selected.  */
  56109.          item = map_event_to_object (event, f);
  56110.  
  56111.          XFASTINT (event->y) = 1;
  56112. -#else /* not USE_X_TOOLKIT  */
  56113. +#else /* not USE_EXTERNAL_MENU_BAR  */
  56114.          item = Qnil;
  56115.          items = FRAME_MENU_BAR_ITEMS (f);
  56116.          for (i = 0; i < XVECTOR (items)->size; i += 3)
  56117. @@ -2690,7 +2710,7 @@
  56118.              break;
  56119.                }
  56120.            }
  56121. -#endif /* not USE_X_TOOLKIT  */
  56122. +#endif /* not USE_EXTERNAL_MENU_BAR  */
  56123.  
  56124.          position
  56125.            = Fcons (event->frame_or_window,
  56126. @@ -3137,7 +3157,7 @@
  56127.  }
  56128.  
  56129.  
  56130. -static char *modifier_names[] =
  56131. +static char * FAR modifier_names[] =
  56132.  {
  56133.    "up", "down", "drag", "click", "double", "triple", 0, 0,
  56134.    0, 0, 0, 0, 0, 0, 0, 0,
  56135. @@ -3554,7 +3574,14 @@
  56136.        n_to_read = sizeof cbuf;
  56137.        fcntl (fileno (stdin), F_SETFL, O_NDELAY);
  56138.  #else
  56139. +#ifdef    AMIGA    /* This is where the input work finally gets done */
  56140. +  /* Note, The nread != 0 case isn't handled as it doesn't arise on the Amiga.
  56141. +     (Look carefully at calls to read_avail_input) */
  56142. +      assert(expected == 0); /* CHFIXME */
  56143. +      n_to_read = sizeof(cbuf);
  56144. +#else  /* not AMIGA */
  56145.        you lose;
  56146. +#endif /* not AMIGA */
  56147.  #endif
  56148.  #endif
  56149.  #endif /* not MSDOS */
  56150. @@ -3808,7 +3835,7 @@
  56151.    for (mapno = nmaps - 1; mapno >= 0; mapno--)
  56152.      {
  56153.        if (! NILP (maps[mapno]))
  56154. -    def = get_keyelt (access_keymap (maps[mapno], Qmenu_bar, 1, 0));
  56155. +    def = get_keyelt (access_keymap (maps[mapno], Qmenu_bar, 1, 0), 0);
  56156.        else
  56157.      def = Qnil;
  56158.  
  56159. @@ -4297,7 +4324,7 @@
  56160.      if (! NILP (current[i]))
  56161.        {
  56162.          next[i] =
  56163. -          get_keyelt (access_keymap (current[i], meta_prefix_char, 1, 0));
  56164. +          get_keyelt (access_keymap (current[i], meta_prefix_char, 1, 0), 0);
  56165.  
  56166.          /* Note that since we pass the resulting bindings through
  56167.             get_keymap_1, non-prefix bindings for meta-prefix-char
  56168. @@ -4316,7 +4343,7 @@
  56169.      {
  56170.        if (! NILP (current[i]))
  56171.      {
  56172. -      defs[i] = get_keyelt (access_keymap (current[i], key, 1, 0));
  56173. +      defs[i] = get_keyelt (access_keymap (current[i], key, 1, 0), 0);
  56174.        if (! NILP (defs[i]))
  56175.          first_binding = i;
  56176.      }
  56177. @@ -4944,7 +4971,7 @@
  56178.            fkey_next
  56179.              = get_keymap_1
  56180.                (get_keyelt
  56181. -               (access_keymap (fkey_map, meta_prefix_char, 1, 0)),
  56182. +               (access_keymap (fkey_map, meta_prefix_char, 1, 0), 0),
  56183.                 0, 1);
  56184.            XFASTINT (key) = XFASTINT (key) & ~meta_modifier;
  56185.          }
  56186. @@ -4952,7 +4979,7 @@
  56187.          fkey_next = fkey_map;
  56188.  
  56189.            fkey_next
  56190. -        = get_keyelt (access_keymap (fkey_next, key, 1, 0));
  56191. +        = get_keyelt (access_keymap (fkey_next, key, 1, 0), 0);
  56192.  
  56193.  #if 0 /* I didn't turn this on, because it might cause trouble
  56194.       for the mapping of return into C-m and tab into C-i.  */
  56195. @@ -5048,7 +5075,7 @@
  56196.          keytran_next
  56197.            = get_keymap_1
  56198.              (get_keyelt
  56199. -             (access_keymap (keytran_map, meta_prefix_char, 1, 0)),
  56200. +             (access_keymap (keytran_map, meta_prefix_char, 1, 0), 0),
  56201.               0, 1);
  56202.          XFASTINT (key) = XFASTINT (key) & ~meta_modifier;
  56203.            }
  56204. @@ -5056,7 +5083,7 @@
  56205.            keytran_next = keytran_map;
  56206.  
  56207.          keytran_next
  56208. -          = get_keyelt (access_keymap (keytran_next, key, 1, 0));
  56209. +          = get_keyelt (access_keymap (keytran_next, key, 1, 0), 0);
  56210.  
  56211.          /* If the key translation map gives a function, not an
  56212.             array, then call the function with no args and use
  56213. diff -ru --new-file baseline/fsf/emacs/src/keyboard_protos.h amiga/fsf/emacs/src/keyboard_protos.h
  56214. --- baseline/fsf/emacs/src/keyboard_protos.h    Wed Dec 31 17:00:00 1969
  56215. +++ amiga/fsf/emacs/src/keyboard_protos.h    Sun Oct 15 17:11:40 1995
  56216. @@ -0,0 +1,480 @@
  56217. +/* Prototypes for functions defined in
  56218. +keyboard.c
  56219. + */
  56220. +
  56221. +extern int interrupt_input_blocked;
  56222. +
  56223. +extern int interrupt_input_pending;
  56224. +
  56225. +extern int Qdisabled;
  56226. +
  56227. +extern int Qdisabled_command_hook;
  56228. +
  56229. +extern int recent_keys_index;
  56230. +
  56231. +extern int total_keys;
  56232. +
  56233. +extern int recent_keys;
  56234. +
  56235. +extern int this_command_keys;
  56236. +
  56237. +extern int this_command_key_count;
  56238. +
  56239. +extern int menu_prompting;
  56240. +
  56241. +extern int menu_prompt_more_char;
  56242. +
  56243. +extern int getcjmp[14];
  56244. +
  56245. +extern int waiting_for_input;
  56246. +
  56247. +extern int echoing;
  56248. +
  56249. +extern int immediate_quit;
  56250. +
  56251. +extern int Vhelp_char;
  56252. +
  56253. +extern int Vhelp_form;
  56254. +
  56255. +extern int Vprefix_help_command;
  56256. +
  56257. +extern int Vmenu_bar_final_items;
  56258. +
  56259. +extern int quit_char;
  56260. +
  56261. +extern int Voverriding_local_map;
  56262. +
  56263. +extern int command_loop_level;
  56264. +
  56265. +extern int num_input_keys;
  56266. +
  56267. +extern int last_command_char;
  56268. +
  56269. +extern int last_nonmenu_event;
  56270. +
  56271. +extern int last_input_char;
  56272. +
  56273. +extern int Vunread_command_events;
  56274. +
  56275. +extern int unread_command_char;
  56276. +
  56277. +extern int unread_switch_frame;
  56278. +
  56279. +extern int extra_keyboard_modifiers;
  56280. +
  56281. +extern int meta_prefix_char;
  56282. +
  56283. +extern int last_non_minibuf_size;
  56284. +
  56285. +extern int Vauto_save_timeout;
  56286. +
  56287. +extern int num_input_chars;
  56288. +
  56289. +extern int num_nonmacro_input_chars;
  56290. +
  56291. +extern int auto_save_interval;
  56292. +
  56293. +extern int last_auto_save;
  56294. +
  56295. +extern int last_command;
  56296. +
  56297. +extern int this_command;
  56298. +
  56299. +extern int last_point_position;
  56300. +
  56301. +extern int last_point_position_buffer;
  56302. +
  56303. +extern int Vlast_event_frame;
  56304. +
  56305. +extern unsigned long last_event_timestamp;
  56306. +
  56307. +extern int Qself_insert_command;
  56308. +
  56309. +extern int Qforward_char;
  56310. +
  56311. +extern int Qbackward_char;
  56312. +
  56313. +extern int Qundefined;
  56314. +
  56315. +extern int read_key_sequence_cmd;
  56316. +
  56317. +extern int Vtop_level;
  56318. +
  56319. +extern int Vkeyboard_translate_table;
  56320. +
  56321. +extern int Vkey_translation_map;
  56322. +
  56323. +extern int Vdeactivate_mark;
  56324. +
  56325. +extern int Vlucid_menu_bar_dirty_flag;
  56326. +
  56327. +extern int Qrecompute_lucid_menubar;
  56328. +
  56329. +extern int Qactivate_menubar_hook;
  56330. +
  56331. +extern int Qpre_command_hook;
  56332. +
  56333. +extern int Qpost_command_hook;
  56334. +
  56335. +extern int Vpre_command_hook;
  56336. +
  56337. +extern int Vpost_command_hook;
  56338. +
  56339. +extern int Qcommand_hook_internal;
  56340. +
  56341. +extern int Vcommand_hook_internal;
  56342. +
  56343. +extern struct __iobuf * dribble;
  56344. +
  56345. +extern int input_pending;
  56346. +
  56347. +extern int meta_key;
  56348. +
  56349. +extern struct input_event kbd_buffer[256];
  56350. +
  56351. +extern int kbd_buffer_frame_or_window;
  56352. +
  56353. +extern struct input_event * kbd_fetch_ptr;
  56354. +
  56355. +extern struct input_event volatile * kbd_store_ptr;
  56356. +
  56357. +extern int do_mouse_tracking;
  56358. +
  56359. +extern int mouse_moved;
  56360. +
  56361. +extern int Qmouse_movement;
  56362. +
  56363. +extern int Qscroll_bar_movement;
  56364. +
  56365. +extern int Qswitch_frame;
  56366. +
  56367. +extern int Qfunction_key;
  56368. +
  56369. +extern int Qmouse_click;
  56370. +
  56371. +extern int Qevent_kind;
  56372. +
  56373. +extern int Qevent_symbol_elements;
  56374. +
  56375. +extern int Qmenu_enable;
  56376. +
  56377. +extern int Qevent_symbol_element_mask;
  56378. +
  56379. +extern int Qmodifier_cache;
  56380. +
  56381. +extern int Qmode_line;
  56382. +
  56383. +extern int Qvertical_line;
  56384. +
  56385. +extern int Qvertical_scroll_bar;
  56386. +
  56387. +extern int Qmenu_bar;
  56388. +
  56389. +extern int Qmenu_enable;
  56390. +
  56391. +extern int Qextended_command_history;
  56392. +
  56393. +extern int Qpolling_period;
  56394. +
  56395. +extern struct timeval * input_available_clear_time;
  56396. +
  56397. +extern int interrupt_input;
  56398. +
  56399. +extern int interrupts_deferred;
  56400. +
  56401. +extern int flow_control;
  56402. +
  56403. +extern void (* keyboard_init_hook)(void);
  56404. +
  56405. +extern int echo_keystrokes;
  56406. +
  56407. +extern int immediate_echo;
  56408. +
  56409. +extern char echobuf[300];
  56410. +
  56411. +extern char * echoptr;
  56412. +
  56413. +extern int cannot_suspend;
  56414. +
  56415. +int echo_prompt(char * str);
  56416. +
  56417. +int echo_char(int c);
  56418. +
  56419. +int echo_dash(void);
  56420. +
  56421. +int echo(void);
  56422. +
  56423. +int cancel_echoing(void);
  56424. +
  56425. +int echo_length(void);
  56426. +
  56427. +void echo_truncate(int len);
  56428. +
  56429. +void add_command_key(int key);
  56430. +
  56431. +int recursive_edit_1(void);
  56432. +
  56433. +int record_auto_save(void);
  56434. +
  56435. +int force_auto_save_soon(void);
  56436. +
  56437. +extern struct Lisp_Subr Srecursive_edit;
  56438. +
  56439. +int Frecursive_edit(void);
  56440. +
  56441. +int recursive_edit_unwind(int buffer);
  56442. +
  56443. +int cmd_error(int data);
  56444. +
  56445. +int command_loop(void);
  56446. +
  56447. +int command_loop_2(void);
  56448. +
  56449. +int top_level_2(void);
  56450. +
  56451. +int top_level_1(void);
  56452. +
  56453. +extern struct Lisp_Subr Stop_level;
  56454. +
  56455. +int Ftop_level(void);
  56456. +
  56457. +extern struct Lisp_Subr Sexit_recursive_edit;
  56458. +
  56459. +int Fexit_recursive_edit(void);
  56460. +
  56461. +extern struct Lisp_Subr Sabort_recursive_edit;
  56462. +
  56463. +int Fabort_recursive_edit(void);
  56464. +
  56465. +int command_loop_1(void);
  56466. +
  56467. +extern int polling_period;
  56468. +
  56469. +extern int poll_suppress_count;
  56470. +
  56471. +int start_polling(void);
  56472. +
  56473. +int stop_polling(void);
  56474. +
  56475. +void set_poll_suppress_count(int count);
  56476. +
  56477. +int bind_polling_period(int n);
  56478. +
  56479. +int make_ctrl_char(int c);
  56480. +
  56481. +int read_char(int commandflag,
  56482. +              int nmaps,
  56483. +              int * maps,
  56484. +              int prev_event,
  56485. +              int * used_mouse_menu);
  56486. +
  56487. +int print_help(int object);
  56488. +
  56489. +int save_getcjmp(int * temp);
  56490. +
  56491. +int restore_getcjmp(int * temp);
  56492. +
  56493. +int tracking_off(int old_value);
  56494. +
  56495. +extern struct Lisp_Subr Strack_mouse;
  56496. +
  56497. +int Ftrack_mouse(int );
  56498. +
  56499. +int readable_events(void);
  56500. +
  56501. +extern int stop_character;
  56502. +
  56503. +void kbd_buffer_store_event(register struct input_event * event);
  56504. +
  56505. +int kbd_buffer_get_event(void);
  56506. +
  56507. +void swallow_events(void);
  56508. +
  56509. +extern int accent_key_syms;
  56510. +
  56511. +extern int system_key_syms;
  56512. +
  56513. +extern int func_key_syms;
  56514. +
  56515. +extern int mouse_syms;
  56516. +
  56517. +extern int Vsystem_key_alist;
  56518. +
  56519. +extern int __far lispy_accent_codes[13];
  56520. +
  56521. +extern char * __far lispy_accent_keys[13];
  56522. +
  56523. +extern char * __far lispy_function_keys[256];
  56524. +
  56525. +extern char * __far lispy_mouse_names[5];
  56526. +
  56527. +extern int Qabove_handle;
  56528. +
  56529. +extern int Qhandle;
  56530. +
  56531. +extern int Qbelow_handle;
  56532. +
  56533. +extern int * scroll_bar_parts[3];
  56534. +
  56535. +extern int button_down_location;
  56536. +
  56537. +extern int last_mouse_button;
  56538. +
  56539. +extern int last_mouse_x;
  56540. +
  56541. +extern int last_mouse_y;
  56542. +
  56543. +extern unsigned long button_down_time;
  56544. +
  56545. +extern int Vdouble_click_time;
  56546. +
  56547. +extern int double_click_count;
  56548. +
  56549. +int make_lispy_event(struct input_event * event);
  56550. +
  56551. +int make_lispy_switch_frame(int frame);
  56552. +
  56553. +int parse_modifiers_uncached(int symbol,
  56554. +                             int * modifier_end);
  56555. +
  56556. +int apply_modifiers_uncached(int modifiers,
  56557. +                             char * base,
  56558. +                             int base_len);
  56559. +
  56560. +extern char * __far modifier_names[24];
  56561. +
  56562. +extern int modifier_symbols;
  56563. +
  56564. +int lispy_modifier_list(int modifiers);
  56565. +
  56566. +int parse_modifiers(int symbol);
  56567. +
  56568. +int apply_modifiers(int modifiers,
  56569. +                    int base);
  56570. +
  56571. +int reorder_modifiers(int symbol);
  56572. +
  56573. +int modify_event_symbol(int symbol_num,
  56574. +                        unsigned int modifiers,
  56575. +                        int symbol_kind,
  56576. +                        int name_alist,
  56577. +                        char ** name_table,
  56578. +                        int * symbol_table
  56579. +,
  56580. +                        int table_size);
  56581. +
  56582. +void get_input_pending(int * addr);
  56583. +
  56584. +int gobble_input(int expected);
  56585. +
  56586. +int record_asynch_buffer_change(void);
  56587. +
  56588. +int read_avail_input(int expected);
  56589. +
  56590. +void reinvoke_input_signal(void);
  56591. +
  56592. +int map_prompt(int map);
  56593. +
  56594. +extern int menu_bar_items_vector;
  56595. +
  56596. +extern int menu_bar_items_index;
  56597. +
  56598. +int menu_bar_items(int old);
  56599. +
  56600. +void menu_bar_one_keymap(int keymap);
  56601. +
  56602. +int menu_bar_item_1(int arg);
  56603. +
  56604. +void menu_bar_item(int key,
  56605. +                   int item_string,
  56606. +                   int def);
  56607. +
  56608. +int read_char_x_menu_prompt(int nmaps,
  56609. +                            int * maps,
  56610. +                            int prev_event,
  56611. +                            int * used_mouse_menu);
  56612. +
  56613. +int read_char_minibuf_menu_prompt(int commandflag,
  56614. +                                  int nmaps,
  56615. +                                  int * maps);
  56616. +
  56617. +int follow_key(int key,
  56618. +               int nmaps,
  56619. +               int * current,
  56620. +               int * defs,
  56621. +               int * next);
  56622. +
  56623. +int read_key_sequence(int * keybuf,
  56624. +                      int bufsize,
  56625. +                      int prompt);
  56626. +
  56627. +extern struct Lisp_Subr Sread_key_sequence;
  56628. +
  56629. +int Fread_key_sequence(int , int );
  56630. +
  56631. +extern struct Lisp_Subr Scommand_execute;
  56632. +
  56633. +int Fcommand_execute(int , int );
  56634. +
  56635. +extern struct Lisp_Subr Sexecute_extended_command;
  56636. +
  56637. +int Fexecute_extended_command(int );
  56638. +
  56639. +int detect_input_pending(void);
  56640. +
  56641. +int clear_input_pending(void);
  56642. +
  56643. +extern struct Lisp_Subr Sinput_pending_p;
  56644. +
  56645. +int Finput_pending_p(void);
  56646. +
  56647. +extern struct Lisp_Subr Srecent_keys;
  56648. +
  56649. +int Frecent_keys(void);
  56650. +
  56651. +extern struct Lisp_Subr Sthis_command_keys;
  56652. +
  56653. +int Fthis_command_keys(void);
  56654. +
  56655. +extern struct Lisp_Subr Srecursion_depth;
  56656. +
  56657. +int Frecursion_depth(void);
  56658. +
  56659. +extern struct Lisp_Subr Sopen_dribble_file;
  56660. +
  56661. +int Fopen_dribble_file(int );
  56662. +
  56663. +extern struct Lisp_Subr Sdiscard_input;
  56664. +
  56665. +int Fdiscard_input(void);
  56666. +
  56667. +extern struct Lisp_Subr Ssuspend_emacs;
  56668. +
  56669. +int Fsuspend_emacs(int );
  56670. +
  56671. +int stuff_buffered_input(int stuffstring);
  56672. +
  56673. +int set_waiting_for_input(struct timeval * time_to_clear);
  56674. +
  56675. +int clear_waiting_for_input(void);
  56676. +
  56677. +void interrupt_signal(void);
  56678. +
  56679. +int quit_throw_to_read_char(void);
  56680. +
  56681. +extern struct Lisp_Subr Sset_input_mode;
  56682. +
  56683. +int Fset_input_mode(int , int , int , int );
  56684. +
  56685. +extern struct Lisp_Subr Scurrent_input_mode;
  56686. +
  56687. +int Fcurrent_input_mode(void);
  56688. +
  56689. +int init_keyboard(void);
  56690. +
  56691. +extern struct event_head head_table[3];
  56692. +
  56693. +int syms_of_keyboard(void);
  56694. +
  56695. +int keys_of_keyboard(void);
  56696. +
  56697. diff -ru --new-file baseline/fsf/emacs/src/keymap_protos.h amiga/fsf/emacs/src/keymap_protos.h
  56698. --- baseline/fsf/emacs/src/keymap_protos.h    Wed Dec 31 17:00:00 1969
  56699. +++ amiga/fsf/emacs/src/keymap_protos.h    Sun Oct 15 17:11:42 1995
  56700. @@ -0,0 +1,234 @@
  56701. +/* Prototypes for functions defined in
  56702. +keymap.c
  56703. + */
  56704. +
  56705. +extern int current_global_map;
  56706. +
  56707. +extern int global_map;
  56708. +
  56709. +extern int meta_map;
  56710. +
  56711. +extern int control_x_map;
  56712. +
  56713. +extern int Vminibuffer_local_map;
  56714. +
  56715. +extern int Vminibuffer_local_ns_map;
  56716. +
  56717. +extern int Vminibuffer_local_completion_map;
  56718. +
  56719. +extern int Vminibuffer_local_must_match_map;
  56720. +
  56721. +extern int Vminor_mode_map_alist;
  56722. +
  56723. +extern int Vfunction_key_map;
  56724. +
  56725. +extern int Qkeymapp;
  56726. +
  56727. +extern int Qkeymap;
  56728. +
  56729. +extern int Qnon_ascii;
  56730. +
  56731. +extern struct Lisp_Subr Smake_keymap;
  56732. +
  56733. +int Fmake_keymap(int );
  56734. +
  56735. +extern struct Lisp_Subr Smake_sparse_keymap;
  56736. +
  56737. +int Fmake_sparse_keymap(int );
  56738. +
  56739. +void initial_define_key(int keymap,
  56740. +                        int key,
  56741. +                        char * defname);
  56742. +
  56743. +void initial_define_lispy_key(int keymap,
  56744. +                              char * keyname,
  56745. +                              char * defname);
  56746. +
  56747. +extern struct Lisp_Subr Skeymapp;
  56748. +
  56749. +int Fkeymapp(int );
  56750. +
  56751. +int get_keymap_1(int , int , int);
  56752. +
  56753. +int get_keymap(int object);
  56754. +
  56755. +int access_keymap(int map,
  56756. +                  int idx,
  56757. +                  int t_ok,
  56758. +                  int noinherit);
  56759. +
  56760. +int get_keyelt(register int object,
  56761. +               int autoload);
  56762. +
  56763. +int store_in_keymap(int keymap,
  56764. +                    register int idx,
  56765. +                    register int def);
  56766. +
  56767. +extern struct Lisp_Subr Scopy_keymap;
  56768. +
  56769. +int Fcopy_keymap(int );
  56770. +
  56771. +extern struct Lisp_Subr Sdefine_key;
  56772. +
  56773. +int Fdefine_key(int , int , int );
  56774. +
  56775. +extern struct Lisp_Subr Slookup_key;
  56776. +
  56777. +int Flookup_key(int , int , int );
  56778. +
  56779. +int define_as_prefix(int keymap,
  56780. +                     int c);
  56781. +
  56782. +int append_key(int key_sequence,
  56783. +               int key);
  56784. +
  56785. +extern int * cmm_modes;
  56786. +
  56787. +extern int * cmm_maps;
  56788. +
  56789. +extern int cmm_size;
  56790. +
  56791. +int current_minor_maps(int ** modeptr,
  56792. +                       int ** mapptr);
  56793. +
  56794. +extern struct Lisp_Subr Skey_binding;
  56795. +
  56796. +int Fkey_binding(int , int );
  56797. +
  56798. +extern struct Lisp_Subr Slocal_key_binding;
  56799. +
  56800. +int Flocal_key_binding(int , int );
  56801. +
  56802. +extern struct Lisp_Subr Sglobal_key_binding;
  56803. +
  56804. +int Fglobal_key_binding(int , int );
  56805. +
  56806. +extern struct Lisp_Subr Sminor_mode_key_binding;
  56807. +
  56808. +int Fminor_mode_key_binding(int , int );
  56809. +
  56810. +extern struct Lisp_Subr Sglobal_set_key;
  56811. +
  56812. +int Fglobal_set_key(int , int );
  56813. +
  56814. +extern struct Lisp_Subr Slocal_set_key;
  56815. +
  56816. +int Flocal_set_key(int , int );
  56817. +
  56818. +extern struct Lisp_Subr Sglobal_unset_key;
  56819. +
  56820. +int Fglobal_unset_key(int );
  56821. +
  56822. +extern struct Lisp_Subr Slocal_unset_key;
  56823. +
  56824. +int Flocal_unset_key(int );
  56825. +
  56826. +extern struct Lisp_Subr Sdefine_prefix_command;
  56827. +
  56828. +int Fdefine_prefix_command(int , int );
  56829. +
  56830. +extern struct Lisp_Subr Suse_global_map;
  56831. +
  56832. +int Fuse_global_map(int );
  56833. +
  56834. +extern struct Lisp_Subr Suse_local_map;
  56835. +
  56836. +int Fuse_local_map(int );
  56837. +
  56838. +extern struct Lisp_Subr Scurrent_local_map;
  56839. +
  56840. +int Fcurrent_local_map(void);
  56841. +
  56842. +extern struct Lisp_Subr Scurrent_global_map;
  56843. +
  56844. +int Fcurrent_global_map(void);
  56845. +
  56846. +extern struct Lisp_Subr Scurrent_minor_mode_maps;
  56847. +
  56848. +int Fcurrent_minor_mode_maps(void);
  56849. +
  56850. +extern struct Lisp_Subr Saccessible_keymaps;
  56851. +
  56852. +int Faccessible_keymaps(int , int );
  56853. +
  56854. +extern int Qsingle_key_description;
  56855. +
  56856. +extern int Qkey_description;
  56857. +
  56858. +extern struct Lisp_Subr Skey_description;
  56859. +
  56860. +int Fkey_description(int );
  56861. +
  56862. +char * push_key_description(register unsigned int c,
  56863. +                            register char * p);
  56864. +
  56865. +extern struct Lisp_Subr Ssingle_key_description;
  56866. +
  56867. +int Fsingle_key_description(int );
  56868. +
  56869. +char * push_text_char_description(register unsigned int c,
  56870. +                                  register char * p);
  56871. +
  56872. +extern struct Lisp_Subr Stext_char_description;
  56873. +
  56874. +int Ftext_char_description(int );
  56875. +
  56876. +int ascii_sequence_p(int seq);
  56877. +
  56878. +extern struct Lisp_Subr Swhere_is_internal;
  56879. +
  56880. +int Fwhere_is_internal(int , int , int , int );
  56881. +
  56882. +extern struct Lisp_Subr Sdescribe_bindings;
  56883. +
  56884. +int Fdescribe_bindings(int );
  56885. +
  56886. +int describe_buffer_bindings(int arg);
  56887. +
  56888. +void describe_map_tree(int startmap,
  56889. +                       int partial,
  56890. +                       int shadow,
  56891. +                       int prefix,
  56892. +                       char * title,
  56893. +                       int nomenu);
  56894. +
  56895. +void describe_command(int definition);
  56896. +
  56897. +int shadow_lookup(int shadow,
  56898. +                  int key,
  56899. +                  int flag);
  56900. +
  56901. +void describe_map(register int map,
  56902. +                  int keys,
  56903. +                  int (* elt_describer)(),
  56904. +                  int partial,
  56905. +                  int shadow,
  56906. +                  int * seen);
  56907. +
  56908. +int describe_vector_princ(int elt);
  56909. +
  56910. +extern struct Lisp_Subr Sdescribe_vector;
  56911. +
  56912. +int Fdescribe_vector(int );
  56913. +
  56914. +int describe_vector(register int vector,
  56915. +                    int elt_prefix,
  56916. +                    int (* elt_describer)(),
  56917. +                    int partial,
  56918. +                    int shadow);
  56919. +
  56920. +extern int apropos_predicate;
  56921. +
  56922. +extern int apropos_accumulate;
  56923. +
  56924. +void apropos_accum(int symbol,
  56925. +                   int string);
  56926. +
  56927. +extern struct Lisp_Subr Sapropos_internal;
  56928. +
  56929. +int Fapropos_internal(int , int );
  56930. +
  56931. +int syms_of_keymap(void);
  56932. +
  56933. +int keys_of_keymap(void);
  56934. +
  56935. diff -ru --new-file baseline/fsf/emacs/src/lastfile.c amiga/fsf/emacs/src/lastfile.c
  56936. --- baseline/fsf/emacs/src/lastfile.c    Sat Sep 11 18:21:00 1993
  56937. +++ amiga/fsf/emacs/src/lastfile.c    Sun Oct 15 17:11:44 1995
  56938. @@ -35,4 +35,22 @@
  56939.   coming from libraries.
  56940.  */
  56941.  
  56942. +#ifndef AMIGA
  56943. +
  56944.  char my_edata = 0;
  56945. +
  56946. +#else
  56947. +
  56948. +/* I need to find the end of initialised and unitialised data, as well as of
  56949. +   executable code.
  56950. +*/
  56951. +int last_data = 1;
  56952. +int last_bss;
  56953. +
  56954. +void last_function() { }
  56955. +
  56956. +/* Some data that shouldn't be dumped */
  56957. +#include "amiga_data.c" 
  56958. +
  56959. +#endif /* not AMIGA */
  56960. +
  56961. diff -ru --new-file baseline/fsf/emacs/src/lisp.h amiga/fsf/emacs/src/lisp.h
  56962. --- baseline/fsf/emacs/src/lisp.h    Thu Aug 25 17:42:40 1994
  56963. +++ amiga/fsf/emacs/src/lisp.h    Sun Oct 15 17:11:46 1995
  56964. @@ -328,7 +328,7 @@
  56965.    (XUINT (a) | (XUINT (a) > pure_size ? DATA_SEG_BITS : PURE_SEG_BITS))
  56966.  #else /* not HAVE_SHM */
  56967.  #ifdef DATA_SEG_BITS
  56968. -/* This case is used for the rt-pc.
  56969. +/* This case is used for the rt-pc and the Amiga.
  56970.     In the diffs I was given, it checked for ptr = 0
  56971.     and did not adjust it in that case.
  56972.     But I don't think that zero should ever be found
  56973. @@ -341,8 +341,55 @@
  56974.  #endif /* no XPNTR */
  56975.  
  56976.  #ifndef XSETINT
  56977. +#ifdef AMIGA /* CHFIXME */
  56978. +#include <assert.h>
  56979. +#ifdef static
  56980. +#define xstatic
  56981. +#endif
  56982. +#undef static
  56983. +
  56984. +void exit(int);
  56985. +
  56986. +static unsigned int
  56987. +xsetint(unsigned a, unsigned b,char *s, int line)
  56988. +{
  56989. +    if((((unsigned) (a) & ~VALMASK) == DataSegBits) && DataSegBits != 0)
  56990. +    {
  56991. +    fprintf(stderr,"xsetint called from %s%d, assertion failure\n",
  56992. +        s, line);
  56993. +    fprintf(stderr,"a = %08lx, b = %08lx, DataSegBits = %08lx\n",
  56994. +        a, b, DataSegBits);
  56995. +    exit(1);
  56996. +    }
  56997. +    return (unsigned) ((a) & ~VALMASK) |  ((b) & VALMASK);
  56998. +}
  56999. +
  57000. +#define XSETINT(a, b)  (a) = (xsetint(a,b,__FILE__,__LINE__))
  57001. +    
  57002. +#if 0
  57003. +static unsigned int
  57004. +xsetint(unsigned a, unsigned b)
  57005. +{
  57006. +    assert(((unsigned) (a) & ~VALMASK) != DataSegBits);
  57007. +    return (unsigned) ((a) & ~VALMASK) |  ((b) & VALMASK);
  57008. +}
  57009. +#define XSETINT(a, b)  (a) = (xsetint(a,b))
  57010. +#endif
  57011. +
  57012. +static unsigned int
  57013. +xset(unsigned type, unsigned ptr)
  57014. +{
  57015. +    assert(!((type == Lisp_String) && (((unsigned) ptr & ~VALMASK) != DataSegBits)));
  57016. +    return (unsigned) ((int)(type) << VALBITS) + ((int) (ptr) & VALMASK);
  57017. +}
  57018. +#define OXSETINT(a, b)  ((a) = ((a) & ~VALMASK) |  ((b) & VALMASK))
  57019. +#ifdef xstatic
  57020. +#define static
  57021. +#endif
  57022. +#else
  57023.  #define XSETINT(a, b)  ((a) = ((a) & ~VALMASK) |  ((b) & VALMASK))
  57024.  #endif
  57025. +#endif
  57026.  
  57027.  #ifndef XSETUINT
  57028.  #define XSETUINT(a, b) XSETINT (a, b)
  57029. @@ -350,12 +397,17 @@
  57030.  
  57031.  #ifndef XSETPNTR
  57032.  #define XSETPNTR(a, b) XSETINT (a, b)
  57033. +#define OXSETPNTR(a, b) OXSETINT (a, b) /* CHFIXME*/
  57034.  #endif
  57035.  
  57036.  #ifndef XSET
  57037. +#ifdef AMIGA /* CHFIXME */
  57038. +#define XSET(var, type, ptr) (var) = xset(type, (unsigned) ptr)
  57039. +#else
  57040.  #define XSET(var, type, ptr) \
  57041.     ((var) = ((int)(type) << VALBITS) + ((int) (ptr) & VALMASK))
  57042.  #endif
  57043. +#endif
  57044.  
  57045.  /* During garbage collection, XGCTYPE must be used for extracting types
  57046.   so that the mark bit is ignored.  XMARKBIT accesses the markbit.
  57047. @@ -450,7 +502,11 @@
  57048.  #define XSETBUFFER(a, b) XSETPNTR(a, (int) (b))
  57049.  #define XSETVECTOR(a, b) XSETPNTR(a, (int) (b))
  57050.  #define XSETSUBR(a, b) XSETPNTR(a, (int) (b))
  57051. +#if 0
  57052. +#define XSETSTRING(a, b) (assert((((unsigned) (b) & ~VALMASK) != DataSegBits)), XSETPNTR(a, (int) (b)))
  57053. +#else
  57054.  #define XSETSTRING(a, b) XSETPNTR(a, (int) (b))
  57055. +#endif
  57056.  #define XSETSYMBOL(a, b) XSETPNTR(a, (int) (b))
  57057.  #define XSETFUNCTION(a, b) XSETPNTR(a, (int) (b))
  57058.  #define XSETMARKER(a, b) XSETPNTR(a, (int) (b))
  57059. diff -ru --new-file baseline/fsf/emacs/src/lread.c amiga/fsf/emacs/src/lread.c
  57060. --- baseline/fsf/emacs/src/lread.c    Tue Aug 23 15:28:45 1994
  57061. +++ amiga/fsf/emacs/src/lread.c    Sun Oct 15 17:11:49 1995
  57062. @@ -46,6 +46,9 @@
  57063.  
  57064.  #ifdef LISP_FLOAT_TYPE
  57065.  #ifdef STDC_HEADERS
  57066. +#ifdef AMIGA /* CHFIXME */
  57067. +#undef abort
  57068. +#endif
  57069.  #include <stdlib.h>
  57070.  #endif
  57071.  
  57072. @@ -66,6 +69,10 @@
  57073.  
  57074.  extern int errno;
  57075.  
  57076. +#ifdef USE_PROTOS
  57077. +#include "protos.h"
  57078. +#endif
  57079. +
  57080.  Lisp_Object Qread_char, Qget_file_char, Qstandard_input, Qcurrent_load_list;
  57081.  Lisp_Object Qvariable_documentation, Vvalues, Vstandard_input, Vafter_load_alist;
  57082.  Lisp_Object Qascii_character, Qload;
  57083. @@ -487,6 +494,9 @@
  57084.       Lisp_Object pathname;
  57085.  {
  57086.    register unsigned char *s = XSTRING (pathname)->data;
  57087. +#ifdef AMIGA
  57088. +  return (*s && index(s + 1, ':')); /* Non-leading : */
  57089. +#else
  57090.    return (*s == '/'
  57091.  #ifdef ALTOS
  57092.        || *s == '@'
  57093. @@ -498,6 +508,7 @@
  57094.        || (s[0] != '\0' && s[1] == ':' && s[2] == '/')
  57095.  #endif
  57096.        );
  57097. +#endif /* not AMIGA */
  57098.  }
  57099.  
  57100.  /* Search for a file whose name is STR, looking in directories
  57101. @@ -947,7 +958,7 @@
  57102.  }
  57103.  
  57104.  static int read_buffer_size;
  57105. -static char *read_buffer;
  57106. +char *read_buffer; /* CHFIXME */
  57107.  
  57108.  static int
  57109.  read_escape (readcharfun)
  57110. diff -ru --new-file baseline/fsf/emacs/src/lread_protos.h amiga/fsf/emacs/src/lread_protos.h
  57111. --- baseline/fsf/emacs/src/lread_protos.h    Wed Dec 31 17:00:00 1969
  57112. +++ amiga/fsf/emacs/src/lread_protos.h    Sun Oct 15 17:11:52 1995
  57113. @@ -0,0 +1,186 @@
  57114. +/* Prototypes for functions defined in
  57115. +lread.c
  57116. + */
  57117. +
  57118. +extern int Qread_char;
  57119. +
  57120. +extern int Qget_file_char;
  57121. +
  57122. +extern int Qstandard_input;
  57123. +
  57124. +extern int Qcurrent_load_list;
  57125. +
  57126. +extern int Qvariable_documentation;
  57127. +
  57128. +extern int Vvalues;
  57129. +
  57130. +extern int Vstandard_input;
  57131. +
  57132. +extern int Vafter_load_alist;
  57133. +
  57134. +extern int Qascii_character;
  57135. +
  57136. +extern int Qload;
  57137. +
  57138. +extern int load_in_progress;
  57139. +
  57140. +extern int Vload_path;
  57141. +
  57142. +extern int Vload_history;
  57143. +
  57144. +extern int Vcurrent_load_list;
  57145. +
  57146. +extern int load_descriptor_list;
  57147. +
  57148. +extern struct __iobuf * instream;
  57149. +
  57150. +extern int read_pure;
  57151. +
  57152. +extern int read_from_string_index;
  57153. +
  57154. +extern int read_from_string_limit;
  57155. +
  57156. +int readchar(int readcharfun);
  57157. +
  57158. +void unreadchar(int readcharfun,
  57159. +                int c);
  57160. +
  57161. +int read_filtered_event(int no_switch_frame,
  57162. +                        int ascii_required,
  57163. +                        int error_nonascii);
  57164. +
  57165. +extern struct Lisp_Subr Sread_char;
  57166. +
  57167. +int Fread_char(void);
  57168. +
  57169. +extern struct Lisp_Subr Sread_event;
  57170. +
  57171. +int Fread_event(void);
  57172. +
  57173. +extern struct Lisp_Subr Sread_char_exclusive;
  57174. +
  57175. +int Fread_char_exclusive(void);
  57176. +
  57177. +extern struct Lisp_Subr Sget_file_char;
  57178. +
  57179. +int Fget_file_char(void);
  57180. +
  57181. +extern struct Lisp_Subr Sload;
  57182. +
  57183. +int Fload(int , int , int , int );
  57184. +
  57185. +int load_unwind(int stream);
  57186. +
  57187. +int load_descriptor_unwind(int oldlist);
  57188. +
  57189. +void close_load_descs(void);
  57190. +
  57191. +int complete_filename_p(int pathname);
  57192. +
  57193. +int openp(int path,
  57194. +          int str,
  57195. +          char * suffix,
  57196. +          int * storeptr,
  57197. +          int exec_only);
  57198. +
  57199. +void build_load_history(struct __iobuf * stream,
  57200. +                        int source);
  57201. +
  57202. +int unreadpure(void);
  57203. +
  57204. +void readevalloop(int readcharfun,
  57205. +                  struct __iobuf * stream,
  57206. +                  int sourcename,
  57207. +                  int (* evalfun)(),
  57208. +                  int printflag);
  57209. +
  57210. +extern struct Lisp_Subr Seval_buffer;
  57211. +
  57212. +int Feval_buffer(int , int );
  57213. +
  57214. +extern struct Lisp_Subr Seval_region;
  57215. +
  57216. +int Feval_region(int , int , int );
  57217. +
  57218. +extern struct Lisp_Subr Sread;
  57219. +
  57220. +int Fread(int );
  57221. +
  57222. +extern struct Lisp_Subr Sread_from_string;
  57223. +
  57224. +int Fread_from_string(int , int , int );
  57225. +
  57226. +int read0(int readcharfun);
  57227. +
  57228. +extern int read_buffer_size;
  57229. +
  57230. +extern char * read_buffer;
  57231. +
  57232. +int read_escape(int readcharfun);
  57233. +
  57234. +int read1(register int readcharfun);
  57235. +
  57236. +int read_vector(int readcharfun);
  57237. +
  57238. +int read_list(int flag,
  57239. +              register int readcharfun);
  57240. +
  57241. +extern int Vobarray;
  57242. +
  57243. +extern int initial_obarray;
  57244. +
  57245. +int check_obarray(int obarray);
  57246. +
  57247. +int intern(char * str);
  57248. +
  57249. +extern struct Lisp_Subr Sintern;
  57250. +
  57251. +int Fintern(int , int );
  57252. +
  57253. +extern struct Lisp_Subr Sintern_soft;
  57254. +
  57255. +int Fintern_soft(int , int );
  57256. +
  57257. +int oblookup(int obarray,
  57258. +             register char * ptr,
  57259. +             register int size);
  57260. +
  57261. +int hash_string(unsigned char * ptr,
  57262. +                int len);
  57263. +
  57264. +void map_obarray(int obarray,
  57265. +                 int (* fn)(),
  57266. +                 int arg);
  57267. +
  57268. +int mapatoms_1(int sym,
  57269. +               int function);
  57270. +
  57271. +extern struct Lisp_Subr Smapatoms;
  57272. +
  57273. +int Fmapatoms(int , int );
  57274. +
  57275. +void init_obarray(void);
  57276. +
  57277. +void defsubr(struct Lisp_Subr * sname);
  57278. +
  57279. +void defvar_int(char * namestring,
  57280. +                int * address);
  57281. +
  57282. +void defvar_bool(char * namestring,
  57283. +                 int * address);
  57284. +
  57285. +void defvar_lisp(char * namestring,
  57286. +                 int * address);
  57287. +
  57288. +void defvar_lisp_nopro(char * namestring,
  57289. +                       int * address);
  57290. +
  57291. +void defvar_per_buffer(char * namestring,
  57292. +                       int * address,
  57293. +                       int type,
  57294. +                       char * doc);
  57295. +
  57296. +int init_lread(void);
  57297. +
  57298. +void syms_of_lread(void);
  57299. +
  57300. diff -ru --new-file baseline/fsf/emacs/src/m/amiga.h amiga/fsf/emacs/src/m/amiga.h
  57301. --- baseline/fsf/emacs/src/m/amiga.h    Wed Dec 31 17:00:00 1969
  57302. +++ amiga/fsf/emacs/src/m/amiga.h    Sun Oct 15 17:14:12 1995
  57303. @@ -0,0 +1,132 @@
  57304. +/* machine description file for GNU Emacs running on
  57305. +
  57306. +   AmigaDOS 2.04, SAS C compiler 6.3
  57307. +   
  57308. +   Copyright (C) 1985, 1986 Free Software Foundation, Inc.
  57309. +
  57310. +This file is part of GNU Emacs.
  57311. +
  57312. +GNU Emacs is distributed in the hope that it will be useful,
  57313. +but WITHOUT ANY WARRANTY.  No author or distributor
  57314. +accepts responsibility to anyone for the consequences of using it
  57315. +or for whether it serves any particular purpose or works at all,
  57316. +unless he says so in writing.  Refer to the GNU Emacs General Public
  57317. +License for full details.
  57318. +
  57319. +Everyone is granted permission to copy, modify and redistribute
  57320. +GNU Emacs, but only under the conditions described in the
  57321. +GNU Emacs General Public License.   A copy of this license is
  57322. +supposed to have been given to you along with GNU Emacs so you
  57323. +can know your rights and responsibilities.  It should be in a
  57324. +file named COPYING.  Among other things, the copyright notice
  57325. +and this notice must be preserved on all copies.  */
  57326. +
  57327. +
  57328. +/* The following three symbols give information on
  57329. + the size of various data types.  */
  57330. +/* lisp.h doesn't make any concessions for INTBITS = 16 and
  57331. +   NO_UNION_TYPE (use int as lisp object) defined.  The following is
  57332. +   assuming that the Manx 32 bit int. math package is faster than
  57333. +   bitfield implementation, overall.  If you want to use INTBITS = 16,
  57334. +   you *cannot* define NO_UNION_TYPE.    */
  57335. +
  57336. +#define SHORTBITS 16        /* Number of bits in a short */
  57337. +
  57338. +#define INTBITS 32        /* Number of bits in an int */
  57339. +
  57340. +#define LONGBITS 32        /* Number of bits in a long */
  57341. +
  57342. +#define VALBITS 26        /* Number of bits in an int or pointer offset */
  57343. +
  57344. +#define GCTYPEBITS 5        /* Number of bits in a type. */
  57345. +
  57346. +/* Define BIG_ENDIAN iff lowest-numbered byte in a word
  57347. +   is the most significant byte.  */
  57348. +
  57349. +#define BIG_ENDIAN
  57350. +
  57351. +/* Define NO_ARG_ARRAY if you cannot take the address of the first of a
  57352. + * group of arguments and treat it as an array of the arguments.  */
  57353. +
  57354. +/* #define NO_ARG_ARRAY */
  57355. +
  57356. +/* Define WORD_MACHINE if addresses and such have
  57357. + * to be corrected before they can be used as byte counts.  */
  57358. +
  57359. +#define WORD_MACHINE
  57360. +
  57361. +/* Define how to take a char and sign-extend into an int.
  57362. +   On machines where char is signed, this is a no-op.  */
  57363. +
  57364. +#define SIGN_EXTEND_CHAR(c) (c)
  57365. +
  57366. +/* Now define a symbol for the cpu type, if your compiler
  57367. +   does not define it automatically:
  57368. +   Ones defined so far include vax, m68000, ns16000, pyramid,
  57369. +   orion, tahoe, APOLLO and many others */
  57370. +
  57371. +#ifndef    m68000
  57372. +#define m68000
  57373. +#endif
  57374. +
  57375. +/* Use type int rather than a union, to represent Lisp_Object */
  57376. +/* This is desirable for most machines.  */
  57377. +
  57378. +#define NO_UNION_TYPE
  57379. +/* Use a struct rather than an int. */
  57380. +
  57381. +
  57382. +/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
  57383. +   the 24-bit bit field into an int.  In other words, if bit fields
  57384. +   are always unsigned.
  57385. +
  57386. +   If you use NO_UNION_TYPE, this flag does not matter.  */
  57387. +
  57388. +#define EXPLICIT_SIGN_EXTEND
  57389. +
  57390. +/* We don't have /dev/kmem, so LOAD_AVE_TYPE and LOAD_AVE_CVT are
  57391. +   not defined. */
  57392. +
  57393. +/* Define CANNOT_DUMP on machines where unexec does not work.
  57394. +   Then the function dump-emacs will not be defined
  57395. +   and temacs will do (load "loadup") automatically unless told otherwise.  */
  57396. +
  57397. +/* #define CANNOT_DUMP */
  57398. +
  57399. +/* Define VIRT_ADDR_VARIES if the virtual addresses of
  57400. +   pure and impure space as loaded can vary, and even their
  57401. +   relative order cannot be relied on.
  57402. +
  57403. +   Otherwise Emacs assumes that text space precedes data space,
  57404. +   numerically.  */
  57405. +
  57406. +/* #define VIRT_ADDR_VARIES */
  57407. +/* I now rely on AMIGA_DUMP to make appropriate patches in the source */
  57408. +
  57409. +/* Define C_ALLOCA if this machine does not support a true alloca
  57410. +   and the one written in C should be used instead.
  57411. +   Define HAVE_ALLOCA to say that the system provides a properly
  57412. +   working alloca function and it should be used.
  57413. +   Define neither one if an assembler-language alloca
  57414. +   in the file alloca.s should be used.  */
  57415. +
  57416. +#define C_ALLOCA
  57417. +/* #define HAVE_ALLOCA */
  57418. +
  57419. +/* Define STACK_DIRECTION for alloca.c */
  57420. +#define    STACK_DIRECTION    -1    /* Grows downward */
  57421. +
  57422. +/* Define NO_REMAP if memory segmentation makes it not work well
  57423. +   to change the boundary between the text section and data section
  57424. +   when Emacs is dumped.  If you define this, the preloaded Lisp
  57425. +   code will not be sharable; but that's better than failing completely.  */
  57426. +
  57427. +#define NO_REMAP
  57428. +
  57429. +/* Set high (32 - VALBITS) = 6 bits of every pointer to the same as those of
  57430. +   &pure[0].
  57431. +*/
  57432. +#ifdef emacs
  57433. +extern long far DataSegBits;
  57434. +#endif
  57435. +#define DATA_SEG_BITS DataSegBits
  57436. diff -ru --new-file baseline/fsf/emacs/src/macros_protos.h amiga/fsf/emacs/src/macros_protos.h
  57437. --- baseline/fsf/emacs/src/macros_protos.h    Wed Dec 31 17:00:00 1969
  57438. +++ amiga/fsf/emacs/src/macros_protos.h    Sun Oct 15 17:11:54 1995
  57439. @@ -0,0 +1,50 @@
  57440. +/* Prototypes for functions defined in
  57441. +macros.c
  57442. + */
  57443. +
  57444. +extern int Qexecute_kbd_macro;
  57445. +
  57446. +extern int defining_kbd_macro;
  57447. +
  57448. +extern int * kbd_macro_buffer;
  57449. +
  57450. +extern int kbd_macro_bufsize;
  57451. +
  57452. +extern int * kbd_macro_ptr;
  57453. +
  57454. +extern int * kbd_macro_end;
  57455. +
  57456. +extern int Vlast_kbd_macro;
  57457. +
  57458. +extern int Vexecuting_macro;
  57459. +
  57460. +extern int executing_macro_index;
  57461. +
  57462. +extern struct Lisp_Subr Sstart_kbd_macro;
  57463. +
  57464. +int Fstart_kbd_macro(int );
  57465. +
  57466. +extern struct Lisp_Subr Send_kbd_macro;
  57467. +
  57468. +int Fend_kbd_macro(int );
  57469. +
  57470. +int store_kbd_macro_char(int c);
  57471. +
  57472. +int finalize_kbd_macro_chars(void);
  57473. +
  57474. +extern struct Lisp_Subr Scall_last_kbd_macro;
  57475. +
  57476. +int Fcall_last_kbd_macro(int );
  57477. +
  57478. +int pop_kbd_macro(int info);
  57479. +
  57480. +extern struct Lisp_Subr Sexecute_kbd_macro;
  57481. +
  57482. +int Fexecute_kbd_macro(int , int );
  57483. +
  57484. +int init_macros(void);
  57485. +
  57486. +int syms_of_macros(void);
  57487. +
  57488. +int keys_of_macros(void);
  57489. +
  57490. diff -ru --new-file baseline/fsf/emacs/src/marker_protos.h amiga/fsf/emacs/src/marker_protos.h
  57491. --- baseline/fsf/emacs/src/marker_protos.h    Wed Dec 31 17:00:00 1969
  57492. +++ amiga/fsf/emacs/src/marker_protos.h    Sun Oct 15 17:11:55 1995
  57493. @@ -0,0 +1,30 @@
  57494. +/* Prototypes for functions defined in
  57495. +marker.c
  57496. + */
  57497. +
  57498. +extern struct Lisp_Subr Smarker_buffer;
  57499. +
  57500. +int Fmarker_buffer(int );
  57501. +
  57502. +extern struct Lisp_Subr Smarker_position;
  57503. +
  57504. +int Fmarker_position(int );
  57505. +
  57506. +extern struct Lisp_Subr Sset_marker;
  57507. +
  57508. +int Fset_marker(int , int , int );
  57509. +
  57510. +int set_marker_restricted(int marker,
  57511. +                          int pos,
  57512. +                          int buffer);
  57513. +
  57514. +int unchain_marker(register int marker);
  57515. +
  57516. +int marker_position(int marker);
  57517. +
  57518. +extern struct Lisp_Subr Scopy_marker;
  57519. +
  57520. +int Fcopy_marker(int );
  57521. +
  57522. +int syms_of_marker(void);
  57523. +
  57524. diff -ru --new-file baseline/fsf/emacs/src/minibuf_protos.h amiga/fsf/emacs/src/minibuf_protos.h
  57525. --- baseline/fsf/emacs/src/minibuf_protos.h    Wed Dec 31 17:00:00 1969
  57526. +++ amiga/fsf/emacs/src/minibuf_protos.h    Sun Oct 15 17:11:57 1995
  57527. @@ -0,0 +1,171 @@
  57528. +/* Prototypes for functions defined in
  57529. +minibuf.c
  57530. + */
  57531. +
  57532. +extern int Vminibuffer_list;
  57533. +
  57534. +extern int minibuf_save_vector_size;
  57535. +
  57536. +extern struct minibuf_save_data * minibuf_save_vector;
  57537. +
  57538. +extern int minibuf_level;
  57539. +
  57540. +extern int auto_help;
  57541. +
  57542. +extern int last_minibuf_string;
  57543. +
  57544. +extern int enable_recursive_minibuffers;
  57545. +
  57546. +extern int Vminibuffer_help_form;
  57547. +
  57548. +extern int Vminibuffer_history_variable;
  57549. +
  57550. +extern int Vminibuffer_history_position;
  57551. +
  57552. +extern int Qminibuffer_history;
  57553. +
  57554. +extern int Qread_file_name_internal;
  57555. +
  57556. +extern int Qminibuffer_setup_hook;
  57557. +
  57558. +extern int Vminibuffer_setup_hook;
  57559. +
  57560. +extern int Qminibuffer_exit_hook;
  57561. +
  57562. +extern int Vminibuffer_exit_hook;
  57563. +
  57564. +extern int completion_ignore_case;
  57565. +
  57566. +extern int Vcompletion_regexp_list;
  57567. +
  57568. +extern int minibuffer_auto_raise;
  57569. +
  57570. +extern int last_exact_completion;
  57571. +
  57572. +extern int Quser_variable_p;
  57573. +
  57574. +int read_minibuf(int map,
  57575. +                 int initial,
  57576. +                 int prompt,
  57577. +                 int backup_n,
  57578. +                 int expflag,
  57579. +                 int histvar,
  57580. +                 int histpos);
  57581. +
  57582. +int get_minibuffer(int depth);
  57583. +
  57584. +void read_minibuf_unwind(int data);
  57585. +
  57586. +extern struct Lisp_Subr Sread_from_minibuffer;
  57587. +
  57588. +int Fread_from_minibuffer(int , int , int , int , int );
  57589. +
  57590. +extern struct Lisp_Subr Sread_minibuffer;
  57591. +
  57592. +int Fread_minibuffer(int , int );
  57593. +
  57594. +extern struct Lisp_Subr Seval_minibuffer;
  57595. +
  57596. +int Feval_minibuffer(int , int );
  57597. +
  57598. +extern struct Lisp_Subr Sread_string;
  57599. +
  57600. +int Fread_string(int , int );
  57601. +
  57602. +extern struct Lisp_Subr Sread_no_blanks_input;
  57603. +
  57604. +int Fread_no_blanks_input(int , int );
  57605. +
  57606. +extern struct Lisp_Subr Sread_command;
  57607. +
  57608. +int Fread_command(int );
  57609. +
  57610. +extern struct Lisp_Subr Sread_variable;
  57611. +
  57612. +int Fread_variable(int );
  57613. +
  57614. +extern struct Lisp_Subr Sread_buffer;
  57615. +
  57616. +int Fread_buffer(int , int , int );
  57617. +
  57618. +extern struct Lisp_Subr Stry_completion;
  57619. +
  57620. +int Ftry_completion(int , int , int );
  57621. +
  57622. +int scmp(register char * s1,
  57623. +         register char * s2,
  57624. +         int len);
  57625. +
  57626. +extern struct Lisp_Subr Sall_completions;
  57627. +
  57628. +int Fall_completions(int , int , int );
  57629. +
  57630. +extern int Vminibuffer_completion_table;
  57631. +
  57632. +extern int Qminibuffer_completion_table;
  57633. +
  57634. +extern int Vminibuffer_completion_predicate;
  57635. +
  57636. +extern int Qminibuffer_completion_predicate;
  57637. +
  57638. +extern int Vminibuffer_completion_confirm;
  57639. +
  57640. +extern int Qminibuffer_completion_confirm;
  57641. +
  57642. +extern struct Lisp_Subr Scompleting_read;
  57643. +
  57644. +int Fcompleting_read(int , int , int , int , int , int );
  57645. +
  57646. +int temp_echo_area_glyphs(char * m);
  57647. +
  57648. +int do_completion(void);
  57649. +
  57650. +int assoc_for_completion(register int key,
  57651. +                         int list);
  57652. +
  57653. +extern struct Lisp_Subr Sminibuffer_complete;
  57654. +
  57655. +int Fminibuffer_complete(void);
  57656. +
  57657. +extern struct Lisp_Subr Sminibuffer_complete_and_exit;
  57658. +
  57659. +int Fminibuffer_complete_and_exit(void);
  57660. +
  57661. +extern struct Lisp_Subr Sminibuffer_complete_word;
  57662. +
  57663. +int Fminibuffer_complete_word(void);
  57664. +
  57665. +extern struct Lisp_Subr Sdisplay_completion_list;
  57666. +
  57667. +int Fdisplay_completion_list(int );
  57668. +
  57669. +extern struct Lisp_Subr Sminibuffer_completion_help;
  57670. +
  57671. +int Fminibuffer_completion_help(void);
  57672. +
  57673. +extern struct Lisp_Subr Sself_insert_and_exit;
  57674. +
  57675. +int Fself_insert_and_exit(void);
  57676. +
  57677. +extern struct Lisp_Subr Sexit_minibuffer;
  57678. +
  57679. +int Fexit_minibuffer(void);
  57680. +
  57681. +extern struct Lisp_Subr Sminibuffer_depth;
  57682. +
  57683. +int Fminibuffer_depth(void);
  57684. +
  57685. +extern struct Lisp_Subr Sminibuffer_prompt;
  57686. +
  57687. +int Fminibuffer_prompt(void);
  57688. +
  57689. +extern struct Lisp_Subr Sminibuffer_prompt_width;
  57690. +
  57691. +int Fminibuffer_prompt_width(void);
  57692. +
  57693. +int init_minibuf_once(void);
  57694. +
  57695. +int syms_of_minibuf(void);
  57696. +
  57697. +int keys_of_minibuf(void);
  57698. +
  57699. diff -ru --new-file baseline/fsf/emacs/src/mocklisp_protos.h amiga/fsf/emacs/src/mocklisp_protos.h
  57700. --- baseline/fsf/emacs/src/mocklisp_protos.h    Wed Dec 31 17:00:00 1969
  57701. +++ amiga/fsf/emacs/src/mocklisp_protos.h    Sun Oct 15 17:11:59 1995
  57702. @@ -0,0 +1,37 @@
  57703. +/* Prototypes for functions defined in
  57704. +mocklisp.c
  57705. + */
  57706. +
  57707. +extern struct Lisp_Subr Sml_if;
  57708. +
  57709. +int Fml_if(int );
  57710. +
  57711. +int ml_apply(int function,
  57712. +             int args);
  57713. +
  57714. +extern struct Lisp_Subr Sml_nargs;
  57715. +
  57716. +int Fml_nargs(void);
  57717. +
  57718. +extern struct Lisp_Subr Sml_arg;
  57719. +
  57720. +int Fml_arg(int , int );
  57721. +
  57722. +extern struct Lisp_Subr Sml_interactive;
  57723. +
  57724. +int Fml_interactive(void);
  57725. +
  57726. +extern struct Lisp_Subr Sml_provide_prefix_argument;
  57727. +
  57728. +int Fml_provide_prefix_argument(int );
  57729. +
  57730. +extern struct Lisp_Subr Sml_prefix_argument_loop;
  57731. +
  57732. +int Fml_prefix_argument_loop(int );
  57733. +
  57734. +extern struct Lisp_Subr Sinsert_string;
  57735. +
  57736. +int Finsert_string(int , int * );
  57737. +
  57738. +int syms_of_mocklisp(void);
  57739. +
  57740. diff -ru --new-file baseline/fsf/emacs/src/oldalloca.c amiga/fsf/emacs/src/oldalloca.c
  57741. --- baseline/fsf/emacs/src/oldalloca.c    Wed Dec 31 17:00:00 1969
  57742. +++ amiga/fsf/emacs/src/oldalloca.c    Sun Oct 15 17:12:00 1995
  57743. @@ -0,0 +1,199 @@
  57744. +/*
  57745. +    alloca -- (mostly) portable public-domain implementation -- D A Gwyn
  57746. +
  57747. +    last edit:    86/05/30    rms
  57748. +       include config.h, since on VMS it renames some symbols.
  57749. +       Use xmalloc instead of malloc.
  57750. +
  57751. +    This implementation of the PWB library alloca() function,
  57752. +    which is used to allocate space off the run-time stack so
  57753. +    that it is automatically reclaimed upon procedure exit, 
  57754. +    was inspired by discussions with J. Q. Johnson of Cornell.
  57755. +
  57756. +    It should work under any C implementation that uses an
  57757. +    actual procedure stack (as opposed to a linked list of
  57758. +    frames).  There are some preprocessor constants that can
  57759. +    be defined when compiling for your specific system, for
  57760. +    improved efficiency; however, the defaults should be okay.
  57761. +
  57762. +    The general concept of this implementation is to keep
  57763. +    track of all alloca()-allocated blocks, and reclaim any
  57764. +    that are found to be deeper in the stack than the current
  57765. +    invocation.  This heuristic does not reclaim storage as
  57766. +    soon as it becomes invalid, but it will do so eventually.
  57767. +
  57768. +    As a special case, alloca(0) reclaims storage without
  57769. +    allocating any.  It is a good idea to use alloca(0) in
  57770. +    your main control loop, etc. to force garbage collection.
  57771. +*/
  57772. +#ifndef lint
  57773. +static char    SCCSid[] = "@(#)alloca.c    1.1";    /* for the "what" utility */
  57774. +#endif
  57775. +
  57776. +#ifdef emacs
  57777. +#include "config.h"
  57778. +#ifdef static
  57779. +/* actually, only want this if static is defined as ""
  57780. +   -- this is for usg, in which emacs must undefine static
  57781. +   in order to make unexec workable
  57782. +   */
  57783. +#ifndef STACK_DIRECTION
  57784. +you
  57785. +lose
  57786. +-- must know STACK_DIRECTION at compile-time
  57787. +#endif /* STACK_DIRECTION undefined */
  57788. +#endif /* static */
  57789. +#endif /* emacs */
  57790. +
  57791. +#ifndef alloca  /* If compiling with GCC, this file's not needed.  */
  57792. +
  57793. +#ifdef __STDC__
  57794. +typedef void    *pointer;        /* generic pointer type */
  57795. +#else
  57796. +typedef char    *pointer;        /* generic pointer type */
  57797. +#endif
  57798. +
  57799. +#undef NULL
  57800. +#define    NULL    0            /* null pointer constant */
  57801. +
  57802. +extern void    free();
  57803. +extern pointer    xmalloc();
  57804. +
  57805. +/*
  57806. +    Define STACK_DIRECTION if you know the direction of stack
  57807. +    growth for your system; otherwise it will be automatically
  57808. +    deduced at run-time.
  57809. +
  57810. +    STACK_DIRECTION > 0 => grows toward higher addresses
  57811. +    STACK_DIRECTION < 0 => grows toward lower addresses
  57812. +    STACK_DIRECTION = 0 => direction of growth unknown
  57813. +*/
  57814. +
  57815. +#ifndef STACK_DIRECTION
  57816. +#define    STACK_DIRECTION    0        /* direction unknown */
  57817. +#endif
  57818. +
  57819. +#if (STACK_DIRECTION) != 0
  57820. +
  57821. +#define    STACK_DIR    STACK_DIRECTION    /* known at compile-time */
  57822. +
  57823. +#else    /* STACK_DIRECTION == 0; need run-time code */
  57824. +
  57825. +static int    stack_dir;        /* 1 or -1 once known */
  57826. +#define    STACK_DIR    stack_dir
  57827. +
  57828. +static void
  57829. +find_stack_direction (/* void */)
  57830. +{
  57831. +  static char    *addr = NULL;    /* address of first
  57832. +                   `dummy', once known */
  57833. +  auto char    dummy;        /* to get stack address */
  57834. +
  57835. +  if (addr == NULL)
  57836. +    {                /* initial entry */
  57837. +      addr = &dummy;
  57838. +
  57839. +      find_stack_direction ();    /* recurse once */
  57840. +    }
  57841. +  else                /* second entry */
  57842. +    if (&dummy > addr)
  57843. +      stack_dir = 1;        /* stack grew upward */
  57844. +    else
  57845. +      stack_dir = -1;        /* stack grew downward */
  57846. +}
  57847. +
  57848. +#endif    /* STACK_DIRECTION == 0 */
  57849. +
  57850. +/*
  57851. +    An "alloca header" is used to:
  57852. +    (a) chain together all alloca()ed blocks;
  57853. +    (b) keep track of stack depth.
  57854. +
  57855. +    It is very important that sizeof(header) agree with malloc()
  57856. +    alignment chunk size.  The following default should work okay.
  57857. +*/
  57858. +
  57859. +#ifndef    ALIGN_SIZE
  57860. +#define    ALIGN_SIZE    sizeof(double)
  57861. +#endif
  57862. +
  57863. +typedef union hdr
  57864. +{
  57865. +  char    align[ALIGN_SIZE];    /* to force sizeof(header) */
  57866. +  struct
  57867. +    {
  57868. +      union hdr *next;        /* for chaining headers */
  57869. +      char *deep;        /* for stack depth measure */
  57870. +    } h;
  57871. +} header;
  57872. +
  57873. +/*
  57874. +    alloca( size ) returns a pointer to at least `size' bytes of
  57875. +    storage which will be automatically reclaimed upon exit from
  57876. +    the procedure that called alloca().  Originally, this space
  57877. +    was supposed to be taken from the current stack frame of the
  57878. +    caller, but that method cannot be made to work for some
  57879. +    implementations of C, for example under Gould's UTX/32.
  57880. +*/
  57881. +
  57882. +static header *last_alloca_header = NULL; /* -> last alloca header */
  57883. +
  57884. +int alloca_calling;
  57885. +
  57886. +pointer
  57887. +alloca (size)            /* returns pointer to storage */
  57888. +     unsigned    size;        /* # bytes to allocate */
  57889. +{
  57890. +  auto char    probe;        /* probes stack depth: */
  57891. +  register char    *depth = &probe;
  57892. +
  57893. +#if STACK_DIRECTION == 0
  57894. +  if (STACK_DIR == 0)        /* unknown growth direction */
  57895. +    find_stack_direction ();
  57896. +#endif
  57897. +
  57898. +                /* Reclaim garbage, defined as all alloca()ed storage that
  57899. +                   was allocated from deeper in the stack than currently. */
  57900. +
  57901. +  {
  57902. +    register header    *hp;    /* traverses linked list */
  57903. +
  57904. +    for (hp = last_alloca_header; hp != NULL;)
  57905. +      if ((STACK_DIR > 0 && hp->h.deep > depth)
  57906. +      || (STACK_DIR < 0 && hp->h.deep < depth))
  57907. +    {
  57908. +      register header    *np = hp->h.next;
  57909. +
  57910. +      free ((pointer) hp);    /* collect garbage */
  57911. +
  57912. +      hp = np;        /* -> next header */
  57913. +    }
  57914. +      else
  57915. +    break;            /* rest are not deeper */
  57916. +
  57917. +    last_alloca_header = hp;    /* -> last valid storage */
  57918. +  }
  57919. +
  57920. +  if (size == 0)
  57921. +    return NULL;        /* no allocation required */
  57922. +
  57923. +  /* Allocate combined header + user data storage. */
  57924. +
  57925. +  alloca_calling = 1;
  57926. +  {
  57927. +    register pointer    new = xmalloc (sizeof (header) + size);
  57928. +    /* address of header */
  57929. +
  57930. +    alloca_calling = 0;
  57931. +    ((header *)new)->h.next = last_alloca_header;
  57932. +    ((header *)new)->h.deep = depth;
  57933. +
  57934. +    last_alloca_header = (header *)new;
  57935. +
  57936. +    /* User storage begins just after header. */
  57937. +
  57938. +    return (pointer)((char *)new + sizeof(header));
  57939. +  }
  57940. +}
  57941. +
  57942. +#endif /* no alloca */
  57943. diff -ru --new-file baseline/fsf/emacs/src/paths.h amiga/fsf/emacs/src/paths.h
  57944. --- baseline/fsf/emacs/src/paths.h    Wed Dec 31 17:00:00 1969
  57945. +++ amiga/fsf/emacs/src/paths.h    Sun Oct 15 17:12:02 1995
  57946. @@ -0,0 +1,69 @@
  57947. +/* Hey Emacs, this is -*- C -*- code!  */
  57948. +
  57949. +/* The default search path for Lisp function "load".
  57950. +   This sets load-path.  */
  57951. +#define PATH_LOADSEARCH "GNUEMACS-19.28:lisp"
  57952. +
  57953. +/* Like PATH_LOADSEARCH, but used only when Emacs is dumping.  This
  57954. +   path is usually identical to PATH_LOADSEARCH except that the entry
  57955. +   for the directory containing the installed lisp files has been
  57956. +   replaced with ../lisp.  */
  57957. +#define PATH_DUMPLOADSEARCH "/lisp"
  57958. +
  57959. +/* The extra search path for programs to invoke.  This is appended to
  57960. +   whatever the PATH environment variable says to set the Lisp
  57961. +   variable exec-path and the first file name in it sets the Lisp
  57962. +   variable exec-directory.  exec-directory is used for finding
  57963. +   executables and other architecture-dependent files.  */
  57964. +#define PATH_EXEC "GNUEMACS-19.28:etc"
  57965. +
  57966. +/* Where Emacs should look for its architecture-independent data
  57967. +   files, like the NEWS file.  The lisp variable data-directory
  57968. +   is set to this value.  */
  57969. +#define PATH_DATA "GNUEMACS-19.28:etc"
  57970. +
  57971. +/* Where Emacs should look for its docstring file.  The lisp variable
  57972. +   doc-directory is set to this value.  */
  57973. +#define PATH_DOC "GNUEMACS-19.28:etc"
  57974. +
  57975. +/* The name of the directory that contains lock files with which we
  57976. +   record what files are being modified in Emacs.  This directory
  57977. +   should be writable by everyone.  THE STRING MUST END WITH A
  57978. +   SLASH!!!  */
  57979. +#define PATH_LOCK "GNUEMACS-19.28:lock/"
  57980. +
  57981. +/* Where the configuration process believes the info tree lives.  The
  57982. +   lisp variable configure-info-directory gets its value from this
  57983. +   macro, and is then used to set the Info-default-directory-list.  */
  57984. +#define PATH_INFO "GNUEMACS-19.28:info"
  57985. +
  57986. +#define TERMCAP_NAME "GNUEMACS-19.28:etc/termcap"
  57987. +#define NAME_DATA "GNUEmacs-19.28:etc/EMACS-DATA"
  57988. +/*
  57989. + * extra search path for binaries from amiga emacs distribution
  57990. + */
  57991. +#define PATH_BIN "GNUEmacs-19.28:c"
  57992. +
  57993. +/*
  57994. + * where to store temporary files
  57995. + */
  57996. +#define PATH_TEMP "t:emacsXXXXXX"
  57997. +
  57998. +/*
  57999. + * which shell to use if env variable SHELL is unset
  58000. + */ 
  58001. +
  58002. +#ifndef NAME_SHELL
  58003. +#define NAME_SHELL "/bin/sh"
  58004. +#endif
  58005. +
  58006. +/*
  58007. + * where to find doc file (relative path)  
  58008. + */
  58009. +#define RELPATH_DOC "/etc/"
  58010. +
  58011. +#define RELPATH_ETC "/etc/"
  58012. +
  58013. +#define RELPATH_LIBSRC "/lib-src"
  58014. +
  58015. +#define RELPATH_DOTDOT "/"
  58016. Binary files baseline/fsf/emacs/src/prefix-args and amiga/fsf/emacs/src/prefix-args differ
  58017. Binary files baseline/fsf/emacs/src/prefix-args.o and amiga/fsf/emacs/src/prefix-args.o differ
  58018. diff -ru --new-file baseline/fsf/emacs/src/print_protos.h amiga/fsf/emacs/src/print_protos.h
  58019. --- baseline/fsf/emacs/src/print_protos.h    Wed Dec 31 17:00:00 1969
  58020. +++ amiga/fsf/emacs/src/print_protos.h    Sun Oct 15 17:12:07 1995
  58021. @@ -0,0 +1,89 @@
  58022. +/* Prototypes for functions defined in
  58023. +print.c
  58024. + */
  58025. +
  58026. +extern int Vstandard_output;
  58027. +
  58028. +extern int Qstandard_output;
  58029. +
  58030. +extern int print_depth;
  58031. +
  58032. +extern int being_printed[200];
  58033. +
  58034. +extern int Vprint_length;
  58035. +
  58036. +extern int Vprint_level;
  58037. +
  58038. +extern int print_escape_newlines;
  58039. +
  58040. +extern int Qprint_escape_newlines;
  58041. +
  58042. +extern int printbufidx;
  58043. +
  58044. +void printchar(int ch,
  58045. +               int fun);
  58046. +
  58047. +void strout(char * ptr,
  58048. +            int size,
  58049. +            int printcharfun);
  58050. +
  58051. +int print_string(int string,
  58052. +                 int printcharfun);
  58053. +
  58054. +extern struct Lisp_Subr Swrite_char;
  58055. +
  58056. +int Fwrite_char(int , int );
  58057. +
  58058. +int write_string(char * data,
  58059. +                 int size);
  58060. +
  58061. +int write_string_1(char * data,
  58062. +                   int size,
  58063. +                   int printcharfun);
  58064. +
  58065. +void temp_output_buffer_setup(char * bufname);
  58066. +
  58067. +int internal_with_output_to_temp_buf(char * bufname,
  58068. +                                     int (* function)(),
  58069. +                                     int args);
  58070. +
  58071. +extern struct Lisp_Subr Swith_output_to_temp_buffer;
  58072. +
  58073. +int Fwith_output_to_temp_buffer(int );
  58074. +
  58075. +extern struct Lisp_Subr Sterpri;
  58076. +
  58077. +int Fterpri(int );
  58078. +
  58079. +extern struct Lisp_Subr Sprin1;
  58080. +
  58081. +int Fprin1(int , int );
  58082. +
  58083. +extern int Vprin1_to_string_buffer;
  58084. +
  58085. +extern struct Lisp_Subr Sprin1_to_string;
  58086. +
  58087. +int Fprin1_to_string(int , int );
  58088. +
  58089. +extern struct Lisp_Subr Sprinc;
  58090. +
  58091. +int Fprinc(int , int );
  58092. +
  58093. +extern struct Lisp_Subr Sprint;
  58094. +
  58095. +int Fprint(int , int );
  58096. +
  58097. +extern int Qexternal_debugging_output;
  58098. +
  58099. +extern struct Lisp_Subr Sexternal_debugging_output;
  58100. +
  58101. +int Fexternal_debugging_output(int );
  58102. +
  58103. +void debug_print(int arg);
  58104. +
  58105. +void print(int obj,
  58106. +           register int printcharfun,
  58107. +           int escapeflag);
  58108. +
  58109. +void syms_of_print(void);
  58110. +
  58111. diff -ru --new-file baseline/fsf/emacs/src/process.c amiga/fsf/emacs/src/process.c
  58112. --- baseline/fsf/emacs/src/process.c    Sun Sep 11 13:23:45 1994
  58113. +++ amiga/fsf/emacs/src/process.c    Sun Oct 15 17:12:10 1995
  58114. @@ -1061,7 +1061,12 @@
  58115.    new_argv = (unsigned char **) alloca ((nargs - 1) * sizeof (char *));
  58116.  
  58117.    /* If program file name is not absolute, search our path for it */
  58118. +
  58119. +#ifdef AMIGA 
  58120. +  if(NILP(Ffile_name_absolute_p(program)))
  58121. +#else
  58122.    if (XSTRING (program)->data[0] != '/')
  58123. +#endif
  58124.      {
  58125.        struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
  58126.  
  58127. @@ -1277,6 +1282,23 @@
  58128.       processes to get their return values scrambled.  */
  58129.    XSETINT (XPROCESS (process)->pid, -1);
  58130.  
  58131. +#ifdef AMIGA
  58132. +  {
  58133. +    register unsigned char *temp;
  58134. +
  58135. +    if (XTYPE (current_buffer->directory) == Lisp_String)
  58136. +      {
  58137. +    register int i;
  58138. +
  58139. +    i = XSTRING (current_buffer->directory)->size;
  58140. +    temp = (unsigned char *) alloca (i + 1);
  58141. +    bcopy (XSTRING (current_buffer->directory)->data, temp, i);
  58142. +    temp[i] = 0;
  58143. +      }
  58144. +    pid = exec(new_argv[0], new_argv, forkin, forkout, temp,
  58145. +           amiga_process_stack_size);
  58146. +  }
  58147. +#else /* not AMIGA */
  58148.    {
  58149.      /* child_setup must clobber environ on systems with true vfork.
  58150.         Protect it from permanent change.  */
  58151. @@ -1419,7 +1441,9 @@
  58152.        }
  58153.      environ = save_environ;
  58154.    }
  58155. +#endif /* not AMIGA */
  58156.  
  58157. +  /* CHFIXME: correct ?*/
  58158.    if (pid < 0)
  58159.      {
  58160.        if (forkin >= 0)
  58161. @@ -1431,6 +1455,7 @@
  58162.    
  58163.    XFASTINT (XPROCESS (process)->pid) = pid;
  58164.  
  58165. +#ifndef AMIGA
  58166.    /* If the subfork execv fails, and it exits,
  58167.       this close hangs.  I don't know why.
  58168.       So have an interrupt jar it loose.  */
  58169. @@ -1444,7 +1469,8 @@
  58170.    start_polling ();
  58171.    if (forkin != forkout && forkout >= 0)
  58172.      close (forkout);
  58173. -
  58174. +#endif /* not AMIGA */
  58175. +  
  58176.  #ifdef SIGCHLD
  58177.  #ifdef BSD4_1
  58178.    sigrelse (SIGCHLD);
  58179. diff -ru --new-file baseline/fsf/emacs/src/process_protos.h amiga/fsf/emacs/src/process_protos.h
  58180. --- baseline/fsf/emacs/src/process_protos.h    Wed Dec 31 17:00:00 1969
  58181. +++ amiga/fsf/emacs/src/process_protos.h    Sun Oct 15 17:12:13 1995
  58182. @@ -0,0 +1,237 @@
  58183. +/* Prototypes for functions defined in
  58184. +process.c
  58185. + */
  58186. +
  58187. +extern int Qprocessp;
  58188. +
  58189. +extern int Qrun;
  58190. +
  58191. +extern int Qstop;
  58192. +
  58193. +extern int Qsignal;
  58194. +
  58195. +extern int Qopen;
  58196. +
  58197. +extern int Qclosed;
  58198. +
  58199. +extern int Vprocess_connection_type;
  58200. +
  58201. +extern int process_tick;
  58202. +
  58203. +extern int update_tick;
  58204. +
  58205. +extern long input_wait_mask;
  58206. +
  58207. +extern int max_process_desc;
  58208. +
  58209. +extern int keyboard_descriptor;
  58210. +
  58211. +extern int delete_exited_processes;
  58212. +
  58213. +extern int chan_process[32];
  58214. +
  58215. +extern int Vprocess_alist;
  58216. +
  58217. +extern int proc_buffered_char[32];
  58218. +
  58219. +extern int pty_max_bytes;
  58220. +
  58221. +int update_status(struct Lisp_Process * p);
  58222. +
  58223. +int status_convert(int w);
  58224. +
  58225. +void decode_status(int l,
  58226. +                   int * symbol,
  58227. +                   int * code,
  58228. +                   int * coredump);
  58229. +
  58230. +int status_message(int status);
  58231. +
  58232. +int make_process(int name);
  58233. +
  58234. +int remove_process(register int proc);
  58235. +
  58236. +extern struct Lisp_Subr Sprocessp;
  58237. +
  58238. +int Fprocessp(int );
  58239. +
  58240. +extern struct Lisp_Subr Sget_process;
  58241. +
  58242. +int Fget_process(int );
  58243. +
  58244. +extern struct Lisp_Subr Sget_buffer_process;
  58245. +
  58246. +int Fget_buffer_process(int );
  58247. +
  58248. +int get_process(register int name);
  58249. +
  58250. +extern struct Lisp_Subr Sdelete_process;
  58251. +
  58252. +int Fdelete_process(int );
  58253. +
  58254. +extern struct Lisp_Subr Sprocess_status;
  58255. +
  58256. +int Fprocess_status(int );
  58257. +
  58258. +extern struct Lisp_Subr Sprocess_exit_status;
  58259. +
  58260. +int Fprocess_exit_status(int );
  58261. +
  58262. +extern struct Lisp_Subr Sprocess_id;
  58263. +
  58264. +int Fprocess_id(int );
  58265. +
  58266. +extern struct Lisp_Subr Sprocess_name;
  58267. +
  58268. +int Fprocess_name(int );
  58269. +
  58270. +extern struct Lisp_Subr Sprocess_command;
  58271. +
  58272. +int Fprocess_command(int );
  58273. +
  58274. +extern struct Lisp_Subr Sset_process_buffer;
  58275. +
  58276. +int Fset_process_buffer(int , int );
  58277. +
  58278. +extern struct Lisp_Subr Sprocess_buffer;
  58279. +
  58280. +int Fprocess_buffer(int );
  58281. +
  58282. +extern struct Lisp_Subr Sprocess_mark;
  58283. +
  58284. +int Fprocess_mark(int );
  58285. +
  58286. +extern struct Lisp_Subr Sset_process_filter;
  58287. +
  58288. +int Fset_process_filter(int , int );
  58289. +
  58290. +extern struct Lisp_Subr Sprocess_filter;
  58291. +
  58292. +int Fprocess_filter(int );
  58293. +
  58294. +extern struct Lisp_Subr Sset_process_sentinel;
  58295. +
  58296. +int Fset_process_sentinel(int , int );
  58297. +
  58298. +extern struct Lisp_Subr Sprocess_sentinel;
  58299. +
  58300. +int Fprocess_sentinel(int );
  58301. +
  58302. +extern struct Lisp_Subr Sset_process_window_size;
  58303. +
  58304. +int Fset_process_window_size(int , int , int );
  58305. +
  58306. +extern struct Lisp_Subr Sprocess_kill_without_query;
  58307. +
  58308. +int Fprocess_kill_without_query(int , int );
  58309. +
  58310. +int list_processes_1(void);
  58311. +
  58312. +extern struct Lisp_Subr Slist_processes;
  58313. +
  58314. +int Flist_processes(void);
  58315. +
  58316. +extern struct Lisp_Subr Sprocess_list;
  58317. +
  58318. +int Fprocess_list(void);
  58319. +
  58320. +extern struct Lisp_Subr Sstart_process;
  58321. +
  58322. +int Fstart_process(int , int * );
  58323. +
  58324. +int start_process_unwind(int proc);
  58325. +
  58326. +void create_process_1(int signo);
  58327. +
  58328. +int create_process(int process,
  58329. +                   char ** new_argv,
  58330. +                   int current_dir);
  58331. +
  58332. +int deactivate_process(int proc);
  58333. +
  58334. +int close_process_descs(void);
  58335. +
  58336. +extern struct Lisp_Subr Saccept_process_output;
  58337. +
  58338. +int Faccept_process_output(int , int , int );
  58339. +
  58340. +extern int waiting_for_user_input_p;
  58341. +
  58342. +int wait_reading_process_input(int time_limit,
  58343. +                               int microsecs,
  58344. +                               int read_kbd,
  58345. +                               int do_display);
  58346. +
  58347. +int read_process_output(int proc,
  58348. +                        register int channel);
  58349. +
  58350. +extern struct Lisp_Subr Swaiting_for_user_input_p;
  58351. +
  58352. +int Fwaiting_for_user_input_p(void);
  58353. +
  58354. +extern int send_process_frame[14];
  58355. +
  58356. +void send_process_trap(void);
  58357. +
  58358. +int send_process(int proc,
  58359. +                 char * buf,
  58360. +                 int len);
  58361. +
  58362. +extern struct Lisp_Subr Sprocess_send_region;
  58363. +
  58364. +int Fprocess_send_region(int , int , int );
  58365. +
  58366. +extern struct Lisp_Subr Sprocess_send_string;
  58367. +
  58368. +int Fprocess_send_string(int , int );
  58369. +
  58370. +void process_send_signal(int process,
  58371. +                         int signo,
  58372. +                         int current_group,
  58373. +                         int nomsg);
  58374. +
  58375. +extern struct Lisp_Subr Sinterrupt_process;
  58376. +
  58377. +int Finterrupt_process(int , int );
  58378. +
  58379. +extern struct Lisp_Subr Skill_process;
  58380. +
  58381. +int Fkill_process(int , int );
  58382. +
  58383. +extern struct Lisp_Subr Squit_process;
  58384. +
  58385. +int Fquit_process(int , int );
  58386. +
  58387. +extern struct Lisp_Subr Sstop_process;
  58388. +
  58389. +int Fstop_process(int , int );
  58390. +
  58391. +extern struct Lisp_Subr Scontinue_process;
  58392. +
  58393. +int Fcontinue_process(int , int );
  58394. +
  58395. +extern struct Lisp_Subr Ssignal_process;
  58396. +
  58397. +int Fsignal_process(int , int );
  58398. +
  58399. +extern struct Lisp_Subr Sprocess_send_eof;
  58400. +
  58401. +int Fprocess_send_eof(int );
  58402. +
  58403. +int kill_buffer_processes(int buffer);
  58404. +
  58405. +void sigchld_handler(int signo);
  58406. +
  58407. +int exec_sentinel_unwind(int data);
  58408. +
  58409. +void exec_sentinel(int proc,
  58410. +                   int reason);
  58411. +
  58412. +int status_notify(void);
  58413. +
  58414. +int init_process(void);
  58415. +
  58416. +void change_keyboard_wait_descriptor(int desc);
  58417. +
  58418. +int syms_of_process(void);
  58419. +
  58420. diff -ru --new-file baseline/fsf/emacs/src/protos.c amiga/fsf/emacs/src/protos.c
  58421. --- baseline/fsf/emacs/src/protos.c    Wed Dec 31 17:00:00 1969
  58422. +++ amiga/fsf/emacs/src/protos.c    Sun Oct 15 17:12:14 1995
  58423. @@ -0,0 +1,4 @@
  58424. +#define emacs
  58425. +#define HAVE_CONFIG_H
  58426. +#include "config.h"
  58427. +#include "protos.h"
  58428. diff -ru --new-file baseline/fsf/emacs/src/protos.h amiga/fsf/emacs/src/protos.h
  58429. --- baseline/fsf/emacs/src/protos.h    Wed Dec 31 17:00:00 1969
  58430. +++ amiga/fsf/emacs/src/protos.h    Sun Oct 15 17:12:16 1995
  58431. @@ -0,0 +1,60 @@
  58432. +#ifndef GENPROTO
  58433. +#include "abbrev_protos.h"
  58434. +#include "alloc_protos.h"
  58435. +#include "amiga_clipboard_protos.h"
  58436. +#include "amiga_dump_protos.h"
  58437. +#include "amiga_fns_protos.h"
  58438. +#include "amiga_malloc_protos.h"
  58439. +#include "amiga_menu_protos.h"
  58440. +#include "amiga_rexx_protos.h"
  58441. +#include "amiga_screen_protos.h"
  58442. +#include "amiga_serial_protos.h"
  58443. +#include "amiga_sysdep_protos.h"
  58444. +#ifndef curX /* cm.h problems */
  58445. +#include "amiga_term_protos.h"
  58446. +#endif
  58447. +#include "amiga_tty_protos.h"
  58448. +#include "amiga_xmenu_protos.h"
  58449. +#include "buffer_protos.h"
  58450. +#include "bytecode_protos.h"
  58451. +#include "callint_protos.h"
  58452. +#include "callproc_protos.h"
  58453. +#include "casefiddle_protos.h"
  58454. +#include "casetab_protos.h"
  58455. +#include "cm_protos.h"
  58456. +#include "cmds_protos.h"
  58457. +#include "data_protos.h"
  58458. +#include "dired_protos.h"
  58459. +#include "dispnew_protos.h"
  58460. +#include "doc_protos.h"
  58461. +#include "doprnt_protos.h"
  58462. +#include "editfns_protos.h"
  58463. +#include "emacs_protos.h"
  58464. +#include "eval_protos.h"
  58465. +#include "fileio_protos.h"
  58466. +#include "filelock_protos.h"
  58467. +#include "filemode_protos.h"
  58468. +#include "floatfns_protos.h"
  58469. +#include "fns_protos.h"
  58470. +#include "frame_protos.h"
  58471. +#include "getloadavg_protos.h"
  58472. +#include "indent_protos.h"
  58473. +#include "insdel_protos.h"
  58474. +#include "keyboard_protos.h"
  58475. +#include "keymap_protos.h"
  58476. +#include "lread_protos.h"
  58477. +#include "macros_protos.h"
  58478. +#include "marker_protos.h"
  58479. +#include "minibuf_protos.h"
  58480. +#include "mocklisp_protos.h"
  58481. +#include "print_protos.h"
  58482. +#include "process_protos.h"
  58483. +#include "regex_protos.h"
  58484. +#include "scroll_protos.h"
  58485. +#include "search_protos.h"
  58486. +#include "syntax_protos.h"
  58487. +#include "term_protos.h"
  58488. +#include "undo_protos.h"
  58489. +#include "window_protos.h"
  58490. +#include "xdisp_protos.h"
  58491. +#endif
  58492. diff -ru --new-file baseline/fsf/emacs/src/puresize.h amiga/fsf/emacs/src/puresize.h
  58493. --- baseline/fsf/emacs/src/puresize.h    Mon Aug  8 20:56:48 1994
  58494. +++ amiga/fsf/emacs/src/puresize.h    Sun Oct 15 17:12:18 1995
  58495. @@ -35,6 +35,13 @@
  58496.  #endif
  58497.  #endif
  58498.  
  58499. +#ifdef AMIGA_DUMP
  58500. +#define CHECK_IMPURE(obj) \
  58501. +  { extern int *pure, puresize; \
  58502. +    if ((PNTR_COMPARISON_TYPE) XPNTR (obj) < (PNTR_COMPARISON_TYPE) ((char *) pure + puresize) \
  58503. +    && (PNTR_COMPARISON_TYPE) XPNTR (obj) >= (PNTR_COMPARISON_TYPE) pure) \
  58504. +      pure_write_error (); }
  58505. +#else /* not AMIGA_DUMP */
  58506.  #ifdef VIRT_ADDR_VARIES
  58507.  
  58508.  /* For machines like APOLLO where text and data can go anywhere
  58509. @@ -63,4 +70,5 @@
  58510.  
  58511.  #endif /* PNTR_COMPARISON_TYPE */
  58512.  #endif /* VIRT_ADDRESS_VARIES */
  58513. +#endif /* not AMIGA_DUMP */
  58514.  
  58515. diff -ru --new-file baseline/fsf/emacs/src/regex.c amiga/fsf/emacs/src/regex.c
  58516. --- baseline/fsf/emacs/src/regex.c    Fri Sep  2 13:02:24 1994
  58517. +++ amiga/fsf/emacs/src/regex.c    Sun Oct 15 17:12:21 1995
  58518. @@ -51,6 +51,12 @@
  58519.  /* Emacs uses `NULL' as a predicate.  */
  58520.  #undef NULL
  58521.  
  58522. +#ifdef AMIGA
  58523. +#define FAR far
  58524. +#else
  58525. +#define FAR
  58526. +#endif
  58527. +
  58528.  #else  /* not emacs */
  58529.  
  58530.  #ifdef STDC_HEADERS
  58531. @@ -868,7 +874,7 @@
  58532.  /* This table gives an error message for each of the error codes listed
  58533.     in regex.h.  Obviously the order here has to be same as there.  */
  58534.  
  58535. -static const char *re_error_msg[] =
  58536. +static const char *FAR re_error_msg[] =
  58537.    { NULL,                    /* REG_NOERROR */
  58538.      "No match",                    /* REG_NOMATCH */
  58539.      "Invalid regular expression",        /* REG_BADPAT */
  58540. @@ -1259,6 +1265,7 @@
  58541.     We make the fail stack a global thing, and then grow it to
  58542.     re_max_failures when we compile.  */
  58543.  #ifndef MATCH_MAY_ALLOCATE
  58544. +#ifndef AMIGA
  58545.  static fail_stack_type fail_stack;
  58546.  
  58547.  static const char **     regstart, **     regend;
  58548. @@ -1267,6 +1274,16 @@
  58549.  static register_info_type *reg_info; 
  58550.  static const char **reg_dummy;
  58551.  static register_info_type *reg_info_dummy;
  58552. +#else /* AMIGA */
  58553. +fail_stack_type fail_stack;
  58554. +
  58555. +const char **     regstart, **     regend;
  58556. +const char ** old_regstart, ** old_regend;
  58557. +const char **best_regstart, **best_regend;
  58558. +register_info_type *reg_info; 
  58559. +const char **reg_dummy;
  58560. +register_info_type *reg_info_dummy;
  58561. +#endif /* AMIGA */
  58562.  #endif
  58563.  
  58564.  
  58565. diff -ru --new-file baseline/fsf/emacs/src/regex_protos.h amiga/fsf/emacs/src/regex_protos.h
  58566. --- baseline/fsf/emacs/src/regex_protos.h    Wed Dec 31 17:00:00 1969
  58567. +++ amiga/fsf/emacs/src/regex_protos.h    Sun Oct 15 17:12:24 1995
  58568. @@ -0,0 +1,48 @@
  58569. +/* Prototypes for functions defined in
  58570. +regex.c
  58571. + */
  58572. +
  58573. +extern unsigned int re_syntax_options;
  58574. +
  58575. +unsigned int re_set_syntax(unsigned int );
  58576. +
  58577. +extern char const * __far re_error_msg[17];
  58578. +
  58579. +extern int re_max_failures;
  58580. +
  58581. +extern struct { unsigned char ** stack; unsigned int size; unsigned int avail;  }  fail_stack;
  58582. +
  58583. +extern char const ** regstart;
  58584. +
  58585. +extern char const ** regend;
  58586. +
  58587. +extern char const ** old_regstart;
  58588. +
  58589. +extern char const ** old_regend;
  58590. +
  58591. +extern char const ** best_regstart;
  58592. +
  58593. +extern char const ** best_regend;
  58594. +
  58595. +extern void * reg_info_dummy;
  58596. +
  58597. +int regex_compile(char const * pattern,
  58598. +                            int size,
  58599. +                            unsigned int syntax,
  58600. +                            struct re_pattern_buffer * bufp);
  58601. +
  58602. +char alt_match_null_string_p(unsigned char * p,
  58603. +                             unsigned char * end,
  58604. +                             void * reg_info);
  58605. +
  58606. +char common_op_match_null_string_p(unsigned char ** p,
  58607. +                                   unsigned char * end,
  58608. +                                   void * reg_info);
  58609. +
  58610. +int bcmp_translate(unsigned char * s1,
  58611. +                   unsigned char * s2,
  58612. +                   register int len,
  58613. +                   char * translate);
  58614. +
  58615. +char const * re_compile_pattern(char const * , int , struct re_pattern_buffer * );
  58616. +
  58617. diff -ru --new-file baseline/fsf/emacs/src/s/amigados.h amiga/fsf/emacs/src/s/amigados.h
  58618. --- baseline/fsf/emacs/src/s/amigados.h    Wed Dec 31 17:00:00 1969
  58619. +++ amiga/fsf/emacs/src/s/amigados.h    Sun Oct 15 17:14:17 1995
  58620. @@ -0,0 +1,272 @@
  58621. +/* file for GNU Emacs running on AmigaDOS 2.04, SAS C compiler 6.51b
  58622. +   Copyright (C) 1985, 1986 Free Software Foundation, Inc.
  58623. +
  58624. +This file is part of GNU Emacs.
  58625. +
  58626. +GNU Emacs is distributed in the hope that it will be useful,
  58627. +but WITHOUT ANY WARRANTY.  No author or distributor
  58628. +accepts responsibility to anyone for the consequences of using it
  58629. +or for whether it serves any particular purpose or works at all,
  58630. +unless he says so in writing.  Refer to the GNU Emacs General Public
  58631. +License for full details.
  58632. +
  58633. +Everyone is granted permission to copy, modify and redistribute
  58634. +GNU Emacs, but only under the conditions described in the
  58635. +GNU Emacs General Public License.   A copy of this license is
  58636. +supposed to have been given to you along with GNU Emacs so you
  58637. +can know your rights and responsibilities.  It should be in a
  58638. +file named COPYING.  Among other things, the copyright notice
  58639. +and this notice must be preserved on all copies.  */
  58640. +
  58641. +
  58642. +/*
  58643. + *      Define symbols to identify the version of Unix this is.
  58644. + *      Define all the symbols that apply correctly.
  58645. + */
  58646. +
  58647. +#ifndef AMIGA
  58648. +#define AMIGA
  58649. +#endif /* AMIGA */
  58650. +
  58651. +/* SYSTEM_TYPE should indicate the kind of system you are using.
  58652. + It sets the Lisp variable system-type.  */
  58653. +
  58654. +#define SYSTEM_TYPE "amigados" /* CHFIXME: to amigaos ? */
  58655. +
  58656. +/* Define this if you want a faster redisplay. This saves a lot of CPU
  58657. +   time at the expense of more characters to be redrawn.
  58658. +   On a bitmapped display you win, with a serial line you probably lose.
  58659. +*/
  58660. +/* #define FAST_DISPLAY */
  58661. +
  58662. +/* Define this to display eight bit characters. The actual characters
  58663. +   that are visible can be set in init_xdisp ().
  58664. +*/
  58665. +/* #define EIGHT_BIT should not be needed anymore CHFIXME */
  58666. +
  58667. +/* nomultiplejobs should be defined if your system's shell
  58668. + does not have "job control" (the ability to stop a program,
  58669. + run some other program, then continue the first one).  */
  58670. +
  58671. +#define NOMULTIPLEJOBS
  58672. +
  58673. +/* Define this to include various patches that allow the Amiga to dump.
  58674. +   This *must* be defined on the Amiga!
  58675. +*/
  58676. +#define AMIGA_DUMP
  58677. +
  58678. +/* Do not use interrupt_input = 1 by default, because in 4.3
  58679. +   we can make noninterrupt input work properly.  */
  58680. +
  58681. +/* #undef INTERRUPT_INPUT */    /* This file borrowed from s-bsd4-3.h */
  58682. +
  58683. +/* First pty name is /dev/ptyp0.  */
  58684. +
  58685. +/* #define FIRST_PTY_LETTER 'p' */
  58686. +/*
  58687. + *      Define HAVE_TIMEVAL if the system supports the BSD style clock values.
  58688. + *      Look in <sys/time.h> for a timeval structure.
  58689. + */
  58690. +
  58691. +#define HAVE_TIMEVAL
  58692. +#define USE_UTIME
  58693. +
  58694. +/*
  58695. + *      Define HAVE_SELECT if the system supports the `select' system call.
  58696. + */
  58697. +
  58698. +#define HAVE_SELECT
  58699. +
  58700. +/*
  58701. + *      Define HAVE_PTYS if the system supports pty devices.
  58702. + */
  58703. +
  58704. +/* #define HAVE_PTYS */
  58705. +
  58706. +/* Define HAVE_SOCKETS if system supports 4.2-compatible sockets.  */
  58707. +
  58708. +/* #define HAVE_SOCKETS */
  58709. +
  58710. +/* But we do have socket pairs for processes ... */
  58711. +#define SKTPAIR
  58712. +
  58713. +/*
  58714. + *      Define NONSYSTEM_DIR_LIBRARY to make Emacs emulate
  58715. + *      The 4.2 opendir, etc., library functions.
  58716. + */
  58717. +
  58718. +/* #define NONSYSTEM_DIR_LIBRARY */
  58719. +#define SYSV_SYSTEM_DIR
  58720. +
  58721. +/* Define this symbol if your system has the functions bcopy, etc. */
  58722. +
  58723. +#define BSTRING         /* #define'ed later on */
  58724. +
  58725. +/* subprocesses should be defined if you want to
  58726. +   have code for asynchronous subprocesses
  58727. +   (as used in M-x compile and M-x shell).
  58728. +   This is generally OS dependent, and not supported
  58729. +   under most USG systems. */
  58730. +
  58731. +#define subprocesses
  58732. +
  58733. +#define DID_REMOTE              /* Use 0 length write to send eof */
  58734. +
  58735. +/* If your system uses COFF (Common Object File Format) then define the
  58736. +   preprocessor symbol "COFF". */
  58737. +
  58738. +/* #define COFF */
  58739. +
  58740. +/* define MAIL_USE_FLOCK if the mailer uses flock
  58741. +   to interlock access to /usr/spool/mail/$USER.
  58742. +   The alternative is that a lock file named
  58743. +   /usr/spool/mail/$USER.lock.  */
  58744. +
  58745. +/* #define MAIL_USE_FLOCK */
  58746. +
  58747. +/* Define CLASH_DETECTION if you want lock files to be written
  58748. +   so that Emacs can tell instantly when you try to modify
  58749. +   a file that someone else has modified in his Emacs.  */
  58750. +
  58751. +/* #define CLASH_DETECTION */
  58752. +
  58753. +/* We use the Berkeley (and usg5.2.2) interface to nlist.  */
  58754. +
  58755. +/* #define NLIST_STRUCT */
  58756. +
  58757. +/* The file containing the kernel's symbol table is called /vmunix.  */
  58758. +
  58759. +/* #define KERNEL_FILE "/vmunix" */
  58760. +
  58761. +/* The symbol in the kernel where the load average is found
  58762. +   is named _avenrun.  */
  58763. +
  58764. +/* #define LDAV_SYMBOL "_avenrun" */
  58765. +
  58766. +/* We use our own malloc for 2 reasons:
  58767. +     - To check that the 6 (INTBITS - VALBITS) of allocated data are
  58768. +       the same as &pure[0].
  58769. +     - To release unused memory to the system (SAS's malloc keeps it
  58770. +       till you quit)
  58771. +*/
  58772. +
  58773. +#define SYMS_SYSTEM syms_of_amiga()
  58774. +
  58775. +#define SYSTEM_MALLOC           /* But I have replaced the system malloc ... */
  58776. +
  58777. +#define DEF_PURESIZE 280000             /* Leave space for extra code for Amiga */
  58778. +#ifdef emacs
  58779. +extern int puresize;
  58780. +#endif
  58781. +#define PURESIZE puresize       /* Puresize is variable ... */
  58782. +
  58783. +#ifdef emacs
  58784. +/* Stdio must be included before redefining putchar */
  58785. +#include <stdio.h>
  58786. +extern char cbuffer[], *cbuffer_pos;
  58787. +#define PENDING_OUTPUT_COUNT(x) (cbuffer_pos - cbuffer)
  58788. +#endif
  58789. +/* We divert some calls to our routines */
  58790. +#undef putchar
  58791. +#define putchar(c) do { extern int noninteractive; \
  58792. +                     if (noninteractive) putc (c, stdout); \
  58793. +                     else emacs_putchar(c); } while(0)
  58794. +#define fwrite emacs_fwrite
  58795. +#define fflush emacs_fflush
  58796. +#define random rand
  58797. +#define srandom srand
  58798. +#define main emacs_main
  58799. +#define select emacs_select
  58800. +
  58801. +#ifdef emacs
  58802. +#include <string.h>
  58803. +#undef index
  58804. +#undef rindex
  58805. +#define index strchr
  58806. +#define rindex strrchr
  58807. +#endif
  58808. +
  58809. +#define fsync(x) 0              /* Emulate fsync ... */
  58810. +
  58811. +#ifdef emacs
  58812. +#include <sys/wait.h>           /* process.c doesn't have appropriate #ifdef's */
  58813. +extern int amiga_process_stack_size;
  58814. +#endif
  58815. +
  58816. +#define LISP_FLOAT_TYPE
  58817. +
  58818. +/* Here are some symbols for ymakefile's benefit */
  58819. +
  58820. +#define START_FILES             lib:c.o firstfile.o
  58821. +#define C_DEBUG_SWITCH          /* debug s */
  58822. +#define C_OPTIMIZE_SWITCH       /* opt */
  58823. +#define LD_SWITCH_SYSTEM    addsym batch
  58824. +#define C_SWITCH_SYSTEM
  58825. +#define S_SWITCH_MACHINE        /* Nothing! */
  58826. +#define UNEXEC            amiga_dump.o
  58827. +/* Normally you might be tempted to use OBJECTS_SYSTEM here, but this would cause them
  58828. +   to be linked after lastfile.o, and thus not be dumped.  This doesn't work. */
  58829. +#define EXTRA_OBJECTS        amiga_clipboard.o amiga_tty.o amiga_serial.o \
  58830. +                amiga_screen.o amiga_menu.o amiga_malloc.o \
  58831. +                amiga_rexx.o simplerexx.o amiga_term.o \
  58832. +                amiga_sysdep.o amiga_xmenu.o amiga_fns.o
  58833. +
  58834. +/* Can't use : on Amiga */
  58835. +#define SEPCHAR ','
  58836. +
  58837. +#define abort() amiga_abort(__FILE__,__LINE__)
  58838. +
  58839. +#define NULL_DEVICE "NIL:"
  58840. +
  58841. +/* Define USE_TEXT_PROPERTIES to support visual and other properties
  58842. +   on text. */
  58843. +#ifndef USE_TEXT_PROPERTIES
  58844. +#define USE_TEXT_PROPERTIES
  58845. +#endif
  58846. +
  58847. +#undef USER_FULL_NAME
  58848. +#define USER_FULL_NAME "GNU Emacs Lover"
  58849. +
  58850. +#define HAVE_SYS_TIMEB_H
  58851. +#define HAVE_SYS_TIME_H
  58852. +#define HAVE_UNISTD_H
  58853. +#define STDC_HEADERS
  58854. +#define TIME_WITH_SYS_TIME
  58855. +
  58856. +#define HAVE_GETTIMEOFDAY
  58857. +#define HAVE_GETHOSTNAME
  58858. +#undef HAVE_DUP2
  58859. +#define HAVE_RENAME
  58860. +#define HAVE_CLOSEDIR
  58861. +
  58862. +#define HAVE_TM_ZONE
  58863. +#define HAVE_TZNAME
  58864. +
  58865. +#define HAVE_LONG_FILE_NAMES
  58866. +
  58867. +#define HAVE_MKDIR
  58868. +#define HAVE_RMDIR
  58869. +#define HAVE_RANDOM
  58870. +#define HAVE_BCOPY
  58871. +#define HAVE_BCMP
  58872. +#undef  HAVE_LOGB
  58873. +#define HAVE_FREXP
  58874. +#define HAVE_FMOD
  58875. +#define HAVE_FTIME
  58876. +
  58877. +#define NAME_SHELL "gnu:lib/emacs/19.28/etc/sh"        /* FIXME: Should not be hardcoded */
  58878. +
  58879. +/* Amiga window-specific stuff */
  58880. +
  58881. +#define VERS "2.0DCLG Beta"
  58882. +
  58883. +#define FALSE 0
  58884. +#define TRUE 1
  58885. +
  58886. +#define HAVE_MOUSE
  58887. +
  58888. +#define USE_EXTERNAL_MENU_BAR
  58889. +#if 0
  58890. +#define USE_SCROLL_BARS
  58891. +#endif
  58892. +
  58893. diff -ru --new-file baseline/fsf/emacs/src/scoptions amiga/fsf/emacs/src/scoptions
  58894. --- baseline/fsf/emacs/src/scoptions    Wed Dec 31 17:00:00 1969
  58895. +++ amiga/fsf/emacs/src/scoptions    Sun Oct 15 17:12:26 1995
  58896. @@ -0,0 +1,25 @@
  58897. +CODE=FAR
  58898. +MATH=IEEE
  58899. +STRINGMERGE
  58900. +STRUCTUREEQUIVALENCE
  58901. +OPTIMIZE
  58902. +NOWARNVOIDRETURN
  58903. +NOOPTIMIZERINLINE
  58904. +NOVERSION
  58905. +MEMORYSIZE=HUGE
  58906. +NOERRORHIGHLIGHT
  58907. +OPTIMIZERTIME
  58908. +INCLUDEDIR=//unix/include
  58909. +DEFINE USE_PROTOS
  58910. +DEFINE FAR=__far
  58911. +IGNORE=161
  58912. +IGNORE=154
  58913. +IGNORE=147
  58914. +IGNORE=132
  58915. +IGNORE=104
  58916. +IGNORE=100
  58917. +IGNORE=93
  58918. +WARN=84
  58919. +WARN=62
  58920. +IGNORE=116
  58921. +ERROR=87
  58922. diff -ru --new-file baseline/fsf/emacs/src/scroll.c amiga/fsf/emacs/src/scroll.c
  58923. --- baseline/fsf/emacs/src/scroll.c    Tue May  3 19:30:01 1994
  58924. +++ amiga/fsf/emacs/src/scroll.c    Sun Oct 15 17:12:28 1995
  58925. @@ -55,6 +55,64 @@
  58926.    };
  58927.  
  58928.  
  58929. +#ifdef FAST_DISPLAY
  58930. +scrolling_1 (window_size, unchanged_at_top, unchanged_at_bottom,
  58931. +         draw_cost, old_hash, new_hash, free_at_end)
  58932. +     int window_size, unchanged_at_top, unchanged_at_bottom;
  58933. +     int *draw_cost;
  58934. +     int *old_hash;
  58935. +     int *new_hash;
  58936. +     int free_at_end;
  58937. +{
  58938. +  int lines, i;
  58939. +  int window_end = unchanged_at_top + window_size;
  58940. +
  58941. +  /* Rebase arrays at line 0 */
  58942. +  old_hash -= unchanged_at_top - 1;
  58943. +  new_hash -= unchanged_at_top - 1;
  58944. +  draw_cost -= unchanged_at_top - 1;
  58945. +
  58946. +  /* We can't allow un-enabled lines to be scrolled (they are not redrawable). 
  58947. +     Restrict window to the first set of contiguous enabled lines 
  58948. +     (an enabled line has draw_cost[x] != INFINITY) */
  58949. +  for (i = unchanged_at_top; i < window_end && draw_cost[i] != INFINITY; i++) ;
  58950. +  /*unchanged_at_bottom += window_size - i;*/
  58951. +  /*window_size = i - unchanged_at_top;*/
  58952. +  window_end = i;
  58953. +
  58954. +  if (lines = calc_scroll(old_hash, new_hash, unchanged_at_top, window_end))
  58955. +      scroll_frame_lines(selected_frame, unchanged_at_top, window_end - lines, lines, unchanged_at_top); /* CHFIXME: last param ok? */
  58956. +  else if (lines = calc_scroll(new_hash, old_hash, unchanged_at_top, window_end))
  58957. +      scroll_frame_lines(selected_frame, unchanged_at_top + lines , window_end , -lines, unchanged_at_top + lines); /* CHFIXME: last param ok? */
  58958. +}
  58959. +
  58960. +int calc_scroll(int *old_hash, int *new_hash, int from, int to)
  58961. +/* For insert attempt, the parameters are correct.
  58962. +   For delete attempt, swap the old & new hash parameters
  58963. +*/
  58964. +{
  58965. +    int try = from + 1, lines, i;
  58966. +    int hash1 = old_hash[from];
  58967. +
  58968. +    do
  58969. +    {
  58970. +    if (hash1 == new_hash[try])
  58971. +    {
  58972. +        /* Check if other lines match too */
  58973. +        lines = try - from; /* Amount to insert */
  58974. +        for (i = try + 1; i < to; i++)
  58975. +        if (old_hash[i - lines] != new_hash[i]) break;
  58976. +        if (i == to) /* It works ! */
  58977. +        return lines;
  58978. +    }
  58979. +    try++;
  58980. +    }
  58981. +    while (try < to);
  58982. +
  58983. +    return 0;
  58984. +}
  58985. +
  58986. +#else /* not FAST_DISPLAY */
  58987.  /* Determine, in matrix[i,j], the cost of updating the first j old lines
  58988.     into the first i new lines.
  58989.     This involves using insert or delete somewhere if i != j.
  58990. @@ -380,6 +438,7 @@
  58991.                 free_at_end);
  58992.    do_scrolling (frame, matrix, window_size, unchanged_at_top);
  58993.  }
  58994. +#endif /* not FAST_DISPLAY */
  58995.  
  58996.  /* Return number of lines in common between current and desired frame contents
  58997.     described to us only as vectors of hash codes OLDHASH and NEWHASH.
  58998. diff -ru --new-file baseline/fsf/emacs/src/scroll_protos.h amiga/fsf/emacs/src/scroll_protos.h
  58999. --- baseline/fsf/emacs/src/scroll_protos.h    Wed Dec 31 17:00:00 1969
  59000. +++ amiga/fsf/emacs/src/scroll_protos.h    Sun Oct 15 17:12:30 1995
  59001. @@ -0,0 +1,68 @@
  59002. +/* Prototypes for functions defined in
  59003. +scroll.c
  59004. + */
  59005. +
  59006. +void calculate_scrolling(int frame,
  59007. +                         struct matrix_elt * matrix,
  59008. +                         int window_size,
  59009. +                         int lines_below,
  59010. +                         int * draw_cost,
  59011. +                         int * old_hash
  59012. +,
  59013. +                         int * new_hash,
  59014. +                         int free_at_end);
  59015. +
  59016. +void do_scrolling(int frame,
  59017. +                  struct matrix_elt * matrix,
  59018. +                  int window_size,
  59019. +                  int unchanged_at_top);
  59020. +
  59021. +void scrolling_1(int frame,
  59022. +                 int window_size,
  59023. +                 int unchanged_at_top,
  59024. +                 int unchanged_at_bottom,
  59025. +                 int * draw_cost,
  59026. +                 int * old_hash,
  59027. +                 int * new_hash,
  59028. +
  59029. +     int free_at_end);
  59030. +
  59031. +int scrolling_max_lines_saved(int start,
  59032. +                              int end,
  59033. +                              int * oldhash,
  59034. +                              int * newhash,
  59035. +                              int * cost);
  59036. +
  59037. +int scroll_cost(int frame,
  59038. +                int from,
  59039. +                int to,
  59040. +                int amount);
  59041. +
  59042. +void line_ins_del(int frame,
  59043. +                  int ov1,
  59044. +                  int pf1,
  59045. +                  int ovn,
  59046. +                  int pfn,
  59047. +                  register int * ov,
  59048. +                  register int * mf);
  59049. +
  59050. +void ins_del_costs(int frame,
  59051. +                   char * one_line_string,
  59052. +                   char * multi_string,
  59053. +                   char * setup_string,
  59054. +                   char * cleanup_string,
  59055. +                   int * costvec,
  59056. +                   int *
  59057. +ncostvec,
  59058. +                   int coefficient);
  59059. +
  59060. +int do_line_insertion_deletion_costs(int frame,
  59061. +                                     char * ins_line_string,
  59062. +                                     char * multi_ins_string,
  59063. +                                     char * del_line_string,
  59064. +
  59065. +              char * multi_del_string,
  59066. +                                     char * setup_string,
  59067. +                                     char * cleanup_string,
  59068. +                                     int coefficient);
  59069. +
  59070. diff -ru --new-file baseline/fsf/emacs/src/search.c amiga/fsf/emacs/src/search.c
  59071. --- baseline/fsf/emacs/src/search.c    Mon Aug 22 17:32:40 1994
  59072. +++ amiga/fsf/emacs/src/search.c    Sun Oct 15 17:12:33 1995
  59073. @@ -58,7 +58,10 @@
  59074.     to call re_set_registers after compiling a new pattern or after
  59075.     setting the match registers, so that the regex functions will be
  59076.     able to free or re-allocate it properly.  */
  59077. -static struct re_registers search_regs;
  59078. +#ifndef AMIGA
  59079. +static
  59080. +#endif
  59081. +struct re_registers search_regs;
  59082.  
  59083.  /* The buffer in which the last search was performed, or
  59084.     Qt if the last search was done in a string;
  59085. diff -ru --new-file baseline/fsf/emacs/src/search_protos.h amiga/fsf/emacs/src/search_protos.h
  59086. --- baseline/fsf/emacs/src/search_protos.h    Wed Dec 31 17:00:00 1969
  59087. +++ amiga/fsf/emacs/src/search_protos.h    Sun Oct 15 17:12:35 1995
  59088. @@ -0,0 +1,141 @@
  59089. +/* Prototypes for functions defined in
  59090. +search.c
  59091. + */
  59092. +
  59093. +extern struct re_pattern_buffer searchbuf;
  59094. +
  59095. +extern char search_fastmap[256];
  59096. +
  59097. +extern int last_regexp;
  59098. +
  59099. +extern struct re_registers search_regs;
  59100. +
  59101. +extern int last_thing_searched;
  59102. +
  59103. +extern int Qinvalid_regexp;
  59104. +
  59105. +void matcher_overflow(void);
  59106. +
  59107. +int compile_pattern(int pattern,
  59108. +                    struct re_pattern_buffer * bufp,
  59109. +                    struct re_registers * regp,
  59110. +                    char * translate);
  59111. +
  59112. +extern int Qsearch_failed;
  59113. +
  59114. +int signal_failure(int arg);
  59115. +
  59116. +extern struct Lisp_Subr Slooking_at;
  59117. +
  59118. +int Flooking_at(int );
  59119. +
  59120. +extern struct Lisp_Subr Sstring_match;
  59121. +
  59122. +int Fstring_match(int , int , int );
  59123. +
  59124. +int fast_string_match(int regexp,
  59125. +                      int string);
  59126. +
  59127. +int scan_buffer(register int target,
  59128. +                int start,
  59129. +                register int count,
  59130. +                int * shortage,
  59131. +                int allow_quit);
  59132. +
  59133. +int find_next_newline(register int from,
  59134. +                      register int cnt);
  59135. +
  59136. +extern struct Lisp_Subr Sskip_chars_forward;
  59137. +
  59138. +int Fskip_chars_forward(int , int );
  59139. +
  59140. +extern struct Lisp_Subr Sskip_chars_backward;
  59141. +
  59142. +int Fskip_chars_backward(int , int );
  59143. +
  59144. +extern struct Lisp_Subr Sskip_syntax_forward;
  59145. +
  59146. +int Fskip_syntax_forward(int , int );
  59147. +
  59148. +extern struct Lisp_Subr Sskip_syntax_backward;
  59149. +
  59150. +int Fskip_syntax_backward(int , int );
  59151. +
  59152. +int skip_chars(int forwardp,
  59153. +               int syntaxp,
  59154. +               int string,
  59155. +               int lim);
  59156. +
  59157. +int search_command(int string,
  59158. +                   int bound,
  59159. +                   int noerror,
  59160. +                   int count,
  59161. +                   int direction,
  59162. +                   int RE);
  59163. +
  59164. +int search_buffer(int string,
  59165. +                  int pos,
  59166. +                  int lim,
  59167. +                  int n,
  59168. +                  int RE,
  59169. +                  register unsigned char * trt,
  59170. +                  register unsigned char * inverse_trt);
  59171. +
  59172. +void set_search_regs(int beg,
  59173. +                     int len);
  59174. +
  59175. +int wordify(int string);
  59176. +
  59177. +extern struct Lisp_Subr Ssearch_backward;
  59178. +
  59179. +int Fsearch_backward(int , int , int , int );
  59180. +
  59181. +extern struct Lisp_Subr Ssearch_forward;
  59182. +
  59183. +int Fsearch_forward(int , int , int , int );
  59184. +
  59185. +extern struct Lisp_Subr Sword_search_backward;
  59186. +
  59187. +int Fword_search_backward(int , int , int , int );
  59188. +
  59189. +extern struct Lisp_Subr Sword_search_forward;
  59190. +
  59191. +int Fword_search_forward(int , int , int , int );
  59192. +
  59193. +extern struct Lisp_Subr Sre_search_backward;
  59194. +
  59195. +int Fre_search_backward(int , int , int , int );
  59196. +
  59197. +extern struct Lisp_Subr Sre_search_forward;
  59198. +
  59199. +int Fre_search_forward(int , int , int , int );
  59200. +
  59201. +extern struct Lisp_Subr Sreplace_match;
  59202. +
  59203. +int Freplace_match(int , int , int );
  59204. +
  59205. +int match_limit(int num,
  59206. +                int beginningp);
  59207. +
  59208. +extern struct Lisp_Subr Smatch_beginning;
  59209. +
  59210. +int Fmatch_beginning(int );
  59211. +
  59212. +extern struct Lisp_Subr Smatch_end;
  59213. +
  59214. +int Fmatch_end(int );
  59215. +
  59216. +extern struct Lisp_Subr Smatch_data;
  59217. +
  59218. +int Fmatch_data(void);
  59219. +
  59220. +extern struct Lisp_Subr Sstore_match_data;
  59221. +
  59222. +int Fstore_match_data(int );
  59223. +
  59224. +extern struct Lisp_Subr Sregexp_quote;
  59225. +
  59226. +int Fregexp_quote(int );
  59227. +
  59228. +int syms_of_search(void);
  59229. +
  59230. diff -ru --new-file baseline/fsf/emacs/src/semacs.sh amiga/fsf/emacs/src/semacs.sh
  59231. --- baseline/fsf/emacs/src/semacs.sh    Wed Dec 31 17:00:00 1969
  59232. +++ amiga/fsf/emacs/src/semacs.sh    Sun Oct 15 17:12:37 1995
  59233. @@ -0,0 +1,2 @@
  59234. +assign gnuemacs-19.28: work:c-src/emacs-19.28
  59235. +setenv termcap s:termcap
  59236. diff -ru --new-file baseline/fsf/emacs/src/setlisp.cpr amiga/fsf/emacs/src/setlisp.cpr
  59237. --- baseline/fsf/emacs/src/setlisp.cpr    Wed Dec 31 17:00:00 1969
  59238. +++ amiga/fsf/emacs/src/setlisp.cpr    Sun Oct 15 17:12:38 1995
  59239. @@ -0,0 +1,15 @@
  59240. +/* */
  59241. +"define VALBITS 26"
  59242. +"define INTBITS 32"
  59243. +"define XPNTR(a) ((a & 0x3ffffff) | 0x08000000)"
  59244. +"define XINT(a) (((a) << (INTBITS-VALBITS)) >> (INTBITS-VALBITS))"
  59245. +"define XCONS(a) ((struct Lisp_Cons*) XPNTR(a))"
  59246. +"define XSYMBOL(a) ((struct Lisp_Symbol*) XPNTR(a))"
  59247. +"define XSUBR(a) ((struct Lisp_Subr*) XPNTR(a))"
  59248. +"define XMARKER(a) ((struct Lisp_Marker*) XPNTR(a))"
  59249. +"define XWINDOW(a) ((struct window *) XPNTR(a))"
  59250. +"define XVECTOR(a) ((struct Lisp_Vector *) XPNTR(a))"
  59251. +"define XTYPE(a) ((enum Lisp_Type) ((a) >> VALBITS))"
  59252. +"define CONSP(x) (XTYPE ((x)) == 5)"
  59253. +"define EQ(x, y) ((x) == (y))"
  59254. +"alias dsymbol { d *XSYMBOL($1) ; du XSYMBOL($1)->name->data l XSYMBOL($1)->name->size a }"
  59255. diff -ru --new-file baseline/fsf/emacs/src/simplerexx.c amiga/fsf/emacs/src/simplerexx.c
  59256. --- baseline/fsf/emacs/src/simplerexx.c    Wed Dec 31 17:00:00 1969
  59257. +++ amiga/fsf/emacs/src/simplerexx.c    Sun Oct 15 17:12:40 1995
  59258. @@ -0,0 +1,416 @@
  59259. +/*
  59260. + * Simple ARexx interface by Michael Sinz
  59261. + *
  59262. + * This is a very "Simple" interface to the world of ARexx...
  59263. + * For more complex interfaces into ARexx, it is best that you
  59264. + * understand the functions that are provided by ARexx.
  59265. + * In many cases they are more powerful than what is presented
  59266. + * here.
  59267. + *
  59268. + * This code is fully re-entrant and self-contained other than
  59269. + * the use of SysBase/AbsExecBase and the ARexx RVI support
  59270. + * library which is also self-contained...
  59271. + */
  59272. +
  59273. +#include    <exec/types.h>
  59274. +#include    <exec/nodes.h>
  59275. +#include    <exec/lists.h>
  59276. +#include    <exec/ports.h>
  59277. +#include    <exec/memory.h>
  59278. +
  59279. +#include    <proto/exec.h>
  59280. +
  59281. +#include    <rexx/storage.h>
  59282. +#include    <rexx/rxslib.h>
  59283. +
  59284. +#include    <string.h>
  59285. +#include    <ctype.h>
  59286. +
  59287. +/*
  59288. + * The prototypes for the few ARexx functions we will call...
  59289. + */
  59290. +struct RexxMsg *CreateRexxMsg(struct MsgPort *,char *,char *);
  59291. +void *CreateArgstring(char *,long);
  59292. +void DeleteRexxMsg(struct RexxMsg *);
  59293. +void DeleteArgstring(char *);
  59294. +BOOL IsRexxMsg(struct Message *);
  59295. +
  59296. +/*
  59297. + * Pragmas for the above functions...  (To make this all self-contained...)
  59298. + * If you use RexxGlue.o, this is not needed...
  59299. + *
  59300. + * These are for Lattice C 5.x  (Note the use of RexxContext->RexxSysBase)
  59301. + */
  59302. +#pragma libcall RexxContext->RexxSysBase CreateRexxMsg 90 09803
  59303. +#pragma libcall RexxContext->RexxSysBase CreateArgstring 7E 0802
  59304. +#pragma libcall RexxContext->RexxSysBase DeleteRexxMsg 96 801
  59305. +#pragma libcall RexxContext->RexxSysBase DeleteArgstring 84 801
  59306. +#pragma libcall RexxContext->RexxSysBase IsRexxMsg A8 801
  59307. +
  59308. +/*
  59309. + * Now, we have made the pragmas needed, let's get to work...
  59310. + */
  59311. +
  59312. +/*
  59313. + * A structure for the ARexx handler context
  59314. + * This is *VERY* *PRIVATE* and should not be touched...
  59315. + */
  59316. +struct    ARexxContext
  59317. +{
  59318. +struct    MsgPort    *ARexxPort;    /* The port messages come in at... */
  59319. +struct    Library    *RexxSysBase;    /* We will hide the library pointer here... */
  59320. +    long    Outstanding;    /* The count of outstanding ARexx messages... */
  59321. +    char    PortName[24];    /* The port name goes here... */
  59322. +    char    ErrorName[28];    /* The name of the <base>.LASTERROR... */
  59323. +    char    Extension[8];    /* Default file name extension... */
  59324. +};
  59325. +
  59326. +#define    AREXXCONTEXT    struct ARexxContext *
  59327. +
  59328. +#include    "SimpleRexx.h"
  59329. +
  59330. +/*
  59331. + * This function returns the port name of your ARexx port.
  59332. + * It will return NULL if there is no ARexx port...
  59333. + *
  59334. + * This string is *READ ONLY*  You *MUST NOT* modify it...
  59335. + */
  59336. +char *ARexxName(AREXXCONTEXT RexxContext)
  59337. +{
  59338. +    register    char    *tmp=NULL;
  59339. +
  59340. +    if (RexxContext) tmp=RexxContext->PortName;
  59341. +    return(tmp);
  59342. +}
  59343. +
  59344. +/*
  59345. + * This function returns the signal mask that the Rexx port is
  59346. + * using.  It returns NULL if there is no signal...
  59347. + *
  59348. + * Use this signal bit in your Wait() loop...
  59349. + */
  59350. +ULONG ARexxSignal(AREXXCONTEXT RexxContext)
  59351. +{
  59352. +    register    ULONG    tmp=NULL;
  59353. +
  59354. +    if (RexxContext) tmp=1L << (RexxContext->ARexxPort->mp_SigBit);
  59355. +    return(tmp);
  59356. +}
  59357. +
  59358. +/*
  59359. + * This function returns a structure that contains the commands sent from
  59360. + * ARexx or the results of commands you sent.  You will need to parse it 
  59361. + * and return the structure back so that the memory can be freed.
  59362. + *
  59363. + * This returns NULL if there was no message.
  59364. + */
  59365. +struct RexxMsg *GetARexxMsg(AREXXCONTEXT RexxContext)
  59366. +{
  59367. +    register    struct    RexxMsg    *tmp=NULL;
  59368. +    register        short    flag;
  59369. +
  59370. +    if (RexxContext) tmp=(struct RexxMsg *)GetMsg(RexxContext->ARexxPort);
  59371. +    return(tmp);
  59372. +}
  59373. +
  59374. +/* Use this to delete a message sent via SendARexxMsg and that has now been
  59375. +   returned to you.
  59376. +*/
  59377. +void DeleteARexxMsg(AREXXCONTEXT RexxContext, struct RexxMsg *rmsg)
  59378. +{
  59379. +    /*
  59380. +     * Free the arguments and the message...
  59381. +     */
  59382. +    if(rmsg->rm_Action & RXFF_RESULT) {
  59383. +    if(rmsg->rm_Result1 == 0 && rmsg->rm_Result2) {
  59384. +        DeleteArgstring((STRPTR)rmsg->rm_Result2);
  59385. +    }
  59386. +    }
  59387. +    DeleteArgstring(rmsg->rm_Args[0]);
  59388. +    DeleteRexxMsg(rmsg);
  59389. +    RexxContext->Outstanding-=1;
  59390. +}
  59391. +
  59392. +/*
  59393. + * Use this to return a ARexx message...
  59394. + *
  59395. + * If you wish to return something, it must be in the RString.
  59396. + * If you wish to return an Error, it must be in the Error.
  59397. + * If there is an error, the RString is ignored.
  59398. + */
  59399. +void ReplyARexxMsg(AREXXCONTEXT RexxContext,struct RexxMsg *rmsg,
  59400. +           char *RString,LONG Error)
  59401. +{
  59402. +    if (RexxContext) if (rmsg) if (rmsg!=REXX_RETURN_ERROR)
  59403. +    {
  59404. +    rmsg->rm_Result2=0;
  59405. +    if (!(rmsg->rm_Result1=Error))
  59406. +    {
  59407. +        /*
  59408. +         * if you did not have an error we return the string
  59409. +         */
  59410. +        if (rmsg->rm_Action & (1L << RXFB_RESULT)) if (RString)
  59411. +        {
  59412. +        rmsg->rm_Result2=(LONG)CreateArgstring(RString,
  59413. +                               (LONG)strlen(RString));
  59414. +        }
  59415. +    }
  59416. +
  59417. +    /*
  59418. +     * Reply the message to ARexx...
  59419. +     */
  59420. +    ReplyMsg((struct Message *)rmsg);
  59421. +    }
  59422. +}
  59423. +
  59424. +/*
  59425. + * This function will set an error string for the ARexx
  59426. + * application in the variable defined as <appname>.LASTERROR
  59427. + *
  59428. + * Note that this can only happen if there is an ARexx message...
  59429. + *
  59430. + * This returns TRUE if it worked, FALSE if it did not...
  59431. + */
  59432. +short SetARexxLastError(AREXXCONTEXT RexxContext,struct RexxMsg *rmsg,
  59433. +            char *ErrorString)
  59434. +{
  59435. +    register    short    OkFlag=FALSE;
  59436. +
  59437. +    if (RexxContext) if (rmsg) if (CheckRexxMsg(rmsg))
  59438. +    {
  59439. +    /*
  59440. +     * Note that SetRexxVar() has more than just a TRUE/FALSE
  59441. +     * return code, but for this "basic" case, we just care if
  59442. +     * it works or not.
  59443. +     */
  59444. +    if (!SetRexxVar(rmsg,RexxContext->ErrorName,ErrorString,
  59445. +            (long)strlen(ErrorString)))
  59446. +    {
  59447. +        OkFlag=TRUE;
  59448. +    }
  59449. +    }
  59450. +    return(OkFlag);
  59451. +}
  59452. +
  59453. +/*
  59454. + * This function will send a string to ARexx...
  59455. + *
  59456. + * The default host port will be that of your task...
  59457. + *
  59458. + * If you set StringFile to TRUE, it will set that bit for the message...
  59459. + *
  59460. + * Returns the message sent, or NULL in case of error.
  59461. + */
  59462. +struct RexxMsg *SendARexxMsg(AREXXCONTEXT RexxContext,char *RString,
  59463. +                  short StringFile, short results)
  59464. +{
  59465. +    register    struct    MsgPort    *RexxPort;
  59466. +    register    struct    RexxMsg    *rmsg;
  59467. +    register        short    flag=FALSE;
  59468. +
  59469. +    if (RexxContext) if (RString)
  59470. +    {
  59471. +    if (rmsg=CreateRexxMsg(RexxContext->ARexxPort,
  59472. +                   RexxContext->Extension,
  59473. +                   RexxContext->PortName))
  59474. +    {
  59475. +        rmsg->rm_Action=RXCOMM | (StringFile ?
  59476. +                      (1L << RXFB_STRING):0);
  59477. +        rmsg->rm_Action |= (results ? RXFF_RESULT : 0);
  59478. +        if (rmsg->rm_Args[0]=CreateArgstring(RString,
  59479. +                         (LONG)strlen(RString)))
  59480. +        {
  59481. +        /*
  59482. +         * We need to find the RexxPort and this needs
  59483. +         * to be done in a Forbid()
  59484. +         */
  59485. +        Forbid();
  59486. +        if (RexxPort=FindPort(RXSDIR))
  59487. +        {
  59488. +            /*
  59489. +             * We found the port, so put the
  59490. +             * message to ARexx...
  59491. +             */
  59492. +            PutMsg(RexxPort,(struct Message *)rmsg);
  59493. +            RexxContext->Outstanding+=1;
  59494. +            flag=TRUE;
  59495. +        }
  59496. +        else
  59497. +        {
  59498. +            /*
  59499. +             * No port, so clean up...
  59500. +             */
  59501. +            DeleteArgstring(rmsg->rm_Args[0]);
  59502. +            DeleteRexxMsg(rmsg);
  59503. +        }
  59504. +        Permit();
  59505. +        }
  59506. +        else DeleteRexxMsg(rmsg);
  59507. +    }
  59508. +    }
  59509. +    return flag ? rmsg : NULL;
  59510. +}
  59511. +
  59512. +int PendingCommands(AREXXCONTEXT RexxContext)
  59513. +{
  59514. +    if (RexxContext) return RexxContext->Outstanding;
  59515. +    else return 0;
  59516. +}
  59517. +
  59518. +/*
  59519. + * This function closes down the ARexx context that was opened
  59520. + * with InitARexx...
  59521. + */
  59522. +void FreeARexx(AREXXCONTEXT RexxContext)
  59523. +{
  59524. +    register    struct    RexxMsg    *rmsg;
  59525. +
  59526. +    if (RexxContext)
  59527. +    {
  59528. +    /*
  59529. +     * Clear port name so it can't be found...
  59530. +     */
  59531. +    RexxContext->PortName[0]='\0';
  59532. +
  59533. +    /*
  59534. +     * Clean out any outstanding messages we had sent out...
  59535. +     */
  59536. +    while (RexxContext->Outstanding)
  59537. +    {
  59538. +        WaitPort(RexxContext->ARexxPort);
  59539. +        while (rmsg=GetARexxMsg(RexxContext))
  59540. +        {
  59541. +        if (rmsg!=REXX_RETURN_ERROR)
  59542. +        {
  59543. +            /*
  59544. +             * Any messages that come now are blown
  59545. +             * away...
  59546. +             */
  59547. +            SetARexxLastError(RexxContext,rmsg,
  59548. +                      "99: Port Closed!");
  59549. +            /* removed ReplyARexxMsg() this was a bug that would */
  59550. +            /* obviously cause a loop (we would continue to reply and */
  59551. +            /* then get the message.  It now deletes the message as */
  59552. +            /* should be done.  -ch5/10/93. */
  59553. +            DeleteARexxMsg(RexxContext,rmsg);
  59554. +        }
  59555. +        }
  59556. +    }
  59557. +
  59558. +    /*
  59559. +     * Clean up the port and delete it...
  59560. +     */
  59561. +    if (RexxContext->ARexxPort)
  59562. +    {
  59563. +        while (rmsg=GetARexxMsg(RexxContext))
  59564. +        {
  59565. +        /*
  59566. +         * Any messages that still are coming in are
  59567. +         * "dead"  We just set the LASTERROR and
  59568. +         * reply an error of 100...
  59569. +         */
  59570. +        SetARexxLastError(RexxContext,rmsg,
  59571. +                  "99: Port Closed!");
  59572. +        ReplyARexxMsg(RexxContext,rmsg,NULL,100);
  59573. +        }
  59574. +        RemPort(RexxContext->ARexxPort);
  59575. +        DeleteMsgPort(RexxContext->ARexxPort);
  59576. +    }
  59577. +
  59578. +    /*
  59579. +     * Make sure we close the library...
  59580. +     */
  59581. +    if (RexxContext->RexxSysBase)
  59582. +    {
  59583. +        CloseLibrary(RexxContext->RexxSysBase);
  59584. +    }
  59585. +
  59586. +    /*
  59587. +     * Free the memory of the RexxContext
  59588. +     */
  59589. +    FreeMem(RexxContext,sizeof(struct ARexxContext));
  59590. +    }
  59591. +}
  59592. +
  59593. +/*
  59594. + * This routine initializes an ARexx port for your process
  59595. + * This should only be done once per process.  You must call it
  59596. + * with a valid application name and you must use the handle it
  59597. + * returns in all other calls...
  59598. + *
  59599. + * NOTE:  The AppName should not have spaces in it...
  59600. + *        Example AppNames:  "MyWord" or "FastCalc" etc...
  59601. + *        The name *MUST* be less that 16 characters...
  59602. + *        If it is not, it will be trimmed...
  59603. + *        The name will also be UPPER-CASED...
  59604. + *
  59605. + * NOTE:  The Default file name extension, if NULL will be
  59606. + *        "rexx"  (the "." is automatic)
  59607. + */
  59608. +AREXXCONTEXT InitARexx(char *AppName,char *Extension)
  59609. +{
  59610. +    register    AREXXCONTEXT    RexxContext=NULL;
  59611. +    register    short        loop;
  59612. +    register    short        count;
  59613. +    register    char        *tmp;
  59614. +
  59615. +    if (RexxContext=AllocMem(sizeof(struct ARexxContext),
  59616. +                 MEMF_PUBLIC|MEMF_CLEAR))
  59617. +    {
  59618. +    if (RexxContext->RexxSysBase=OpenLibrary("rexxsyslib.library", NULL))
  59619. +    {
  59620. +        /*
  59621. +         * Set up the extension...
  59622. +         */
  59623. +        if (!Extension) Extension="rexx";
  59624. +        tmp=RexxContext->Extension;
  59625. +        for (loop=0;(loop<7)&&(Extension[loop]);loop++)
  59626. +        {
  59627. +        *tmp++=Extension[loop];
  59628. +        }
  59629. +        *tmp='\0';
  59630. +
  59631. +        /*
  59632. +         * Set up a port name...
  59633. +         */
  59634. +        tmp=RexxContext->PortName;
  59635. +        for (loop=0;(loop<16)&&(AppName[loop]);loop++)
  59636. +        {
  59637. +        *tmp++=toupper(AppName[loop]);
  59638. +        }
  59639. +        *tmp='\0';
  59640. +
  59641. +        /*
  59642. +         * Set up the last error RVI name...
  59643. +         *
  59644. +         * This is <appname>.LASTERROR
  59645. +         */
  59646. +        strcpy(RexxContext->ErrorName,RexxContext->PortName);
  59647. +        strcat(RexxContext->ErrorName,".LASTERROR");
  59648. +
  59649. +        /* We need to make a unique port name... */
  59650. +        Forbid();
  59651. +        for (count=1,RexxContext->ARexxPort=(VOID *)1;
  59652. +         RexxContext->ARexxPort;count++)
  59653. +        {
  59654. +        stci_d(tmp,count);
  59655. +        RexxContext->ARexxPort=
  59656. +            FindPort(RexxContext->PortName);
  59657. +        }
  59658. +
  59659. +        /*RexxContext->ARexxPort=CreatePort(RexxContext->PortName,NULL);*/
  59660. +        RexxContext->ARexxPort=CreateMsgPort();
  59661. +        RexxContext->ARexxPort->mp_Node.ln_Name = RexxContext->PortName;
  59662. +        RexxContext->ARexxPort->mp_Node.ln_Pri = 0;
  59663. +        AddPort(RexxContext->ARexxPort);
  59664. +        Permit();
  59665. +    }
  59666. +
  59667. +    if (!RexxContext->RexxSysBase || !RexxContext->ARexxPort)
  59668. +    {
  59669. +        FreeARexx(RexxContext);
  59670. +        RexxContext=NULL;
  59671. +    }
  59672. +    }
  59673. +    return(RexxContext);
  59674. +}
  59675. diff -ru --new-file baseline/fsf/emacs/src/simplerexx.h amiga/fsf/emacs/src/simplerexx.h
  59676. --- baseline/fsf/emacs/src/simplerexx.h    Wed Dec 31 17:00:00 1969
  59677. +++ amiga/fsf/emacs/src/simplerexx.h    Sun Oct 15 17:12:43 1995
  59678. @@ -0,0 +1,119 @@
  59679. +/*
  59680. + * Simple ARexx interface by Michael Sinz
  59681. + *
  59682. + * This is a very "Simple" interface...
  59683. + */
  59684. +
  59685. +#ifndef    SIMPLE_REXX_H
  59686. +#define    SIMPLE_REXX_H
  59687. +
  59688. +#include    <exec/types.h>
  59689. +#include    <exec/nodes.h>
  59690. +#include    <exec/lists.h>
  59691. +#include    <exec/ports.h>
  59692. +
  59693. +#include    <rexx/storage.h>
  59694. +#include    <rexx/rxslib.h>
  59695. +
  59696. +/*
  59697. + * This is the handle that SimpleRexx will give you
  59698. + * when you initialize an ARexx port...
  59699. + *
  59700. + * The conditional below is used to skip this if we have
  59701. + * defined it earlier...
  59702. + */
  59703. +#ifndef    AREXXCONTEXT
  59704. +
  59705. +typedef void *AREXXCONTEXT;
  59706. +
  59707. +#endif    /* AREXXCONTEXT */
  59708. +
  59709. +/*
  59710. + * The value of RexxMsg (from GetARexxMsg) if there was an error returned
  59711. + */
  59712. +#define    REXX_RETURN_ERROR    ((struct RexxMsg *)-1L)
  59713. +#define    REXX_RETURN_OK            ((struct RexxMsg *)-3L)
  59714. +
  59715. +/*
  59716. + * This function closes down the ARexx context that was opened
  59717. + * with InitARexx...
  59718. + */
  59719. +void FreeARexx(AREXXCONTEXT);
  59720. +
  59721. +/*
  59722. + * This routine initializes an ARexx port for your process
  59723. + * This should only be done once per process.  You must call it
  59724. + * with a valid application name and you must use the handle it
  59725. + * returns in all other calls...
  59726. + *
  59727. + * NOTE:  The AppName should not have spaces in it...
  59728. + *        Example AppNames:  "MyWord" or "FastCalc" etc...
  59729. + *        The name *MUST* be less that 16 characters...
  59730. + *        If it is not, it will be trimmed...
  59731. + *        The name will also be UPPER-CASED...
  59732. + *
  59733. + * NOTE:  The Default file name extension, if NULL will be
  59734. + *        "rexx"  (the "." is automatic)
  59735. + */
  59736. +AREXXCONTEXT InitARexx(char *,char *);
  59737. +
  59738. +/*
  59739. + * This function returns the port name of your ARexx port.
  59740. + * It will return NULL if there is no ARexx port...
  59741. + *
  59742. + * This string is *READ ONLY*  You *MUST NOT* modify it...
  59743. + */
  59744. +char *ARexxName(AREXXCONTEXT);
  59745. +
  59746. +/*
  59747. + * This function returns the signal mask that the Rexx port is
  59748. + * using.  It returns NULL if there is no signal...
  59749. + *
  59750. + * Use this signal bit in your Wait() loop...
  59751. + */
  59752. +ULONG ARexxSignal(AREXXCONTEXT);
  59753. +
  59754. +/*
  59755. + * This function returns a structure that contains the commands sent from
  59756. + * ARexx...  You will need to parse it and return the structure back
  59757. + * so that the memory can be freed...
  59758. + *
  59759. + * This returns NULL if there was no message...
  59760. + */
  59761. +struct RexxMsg *GetARexxMsg(AREXXCONTEXT);
  59762. +
  59763. +/* Use this to delete a message sent via SendARexxMsg and that has now been
  59764. +   returned to you.
  59765. +*/
  59766. +void DeleteARexxMsg(AREXXCONTEXT RexxContext, struct RexxMsg *rmsg);
  59767. +
  59768. +/*
  59769. + * Use this to return a ARexx message...
  59770. + *
  59771. + * If you wish to return something, it must be in the RString.
  59772. + * If you wish to return an Error, it must be in the Error.
  59773. + */
  59774. +void ReplyARexxMsg(AREXXCONTEXT,struct RexxMsg *,char *,LONG);
  59775. +
  59776. +/*
  59777. + * This function will send a string to ARexx...
  59778. + *
  59779. + * The default host port will be that of your task...
  59780. + *
  59781. + * If you set StringFile to TRUE, it will set that bit for the message...
  59782. + *
  59783. + * Returns the message sent, or NULL in case of error.
  59784. + */
  59785. +struct RexxMsg *SendARexxMsg(AREXXCONTEXT,char *,short,short);
  59786. +
  59787. +/*
  59788. + * This function will set an error string for the ARexx
  59789. + * application in the variable defined as <appname>.LASTERROR
  59790. + *
  59791. + * Note that this can only happen if there is an ARexx message...
  59792. + *
  59793. + * This returns TRUE if it worked, FALSE if it did not...
  59794. + */
  59795. +short SetARexxLastError(AREXXCONTEXT,struct RexxMsg *,char *);
  59796. +
  59797. +#endif    /* SIMPLE_REXX_H */
  59798. diff -ru --new-file baseline/fsf/emacs/src/smakefile amiga/fsf/emacs/src/smakefile
  59799. --- baseline/fsf/emacs/src/smakefile    Wed Dec 31 17:00:00 1969
  59800. +++ amiga/fsf/emacs/src/smakefile    Sun Oct 15 17:12:45 1995
  59801. @@ -0,0 +1,45 @@
  59802. +CPP = /cpp/cpp -DAMIGA
  59803. +MAKE = smake  # BSD doesn't have it as a default.
  59804. +#Note: an alternative is  CPP = /lib/cpp
  59805. +
  59806. +all: xmakefile doall
  59807. +
  59808. +doall:
  59809. +    $(MAKE) $(MAKEOVERRIDES) -f xmakefile ${MFLAGS} all
  59810. +
  59811. +#This is used in making a distribution.
  59812. +#Do not use it on development directories!
  59813. +distclean:
  59814. +    -delete force paths.h config.h emacs-* temacs xemacs xmakefile \
  59815. +   *! @* *.o
  59816. +
  59817. +clean:
  59818. +    -delete force temacs xemacs xmakefile @* *.o
  59819. +
  59820. +xemacs: xmakefile doxemacs
  59821. +
  59822. +doxemacs:
  59823. +    $(MAKE) $(MAKEOVERRIDES) -f xmakefile ${MFLAGS} xemacs
  59824. +
  59825. +temacs: xmakefile dotemacs
  59826. +
  59827. +dotemacs:
  59828. +    $(MAKE) $(MAKEOVERRIDES) -f xmakefile ${MFLAGS} temacs
  59829. +
  59830. +demacs: xmakefile dodemacs
  59831. +
  59832. +dodemacs:
  59833. +    $(MAKE) $(MAKEOVERRIDES) -f xmakefile ${MFLAGS} demacs
  59834. +
  59835. +# If you have a problem with cc -E here, changing
  59836. +# the definition of CPP above may fix it.
  59837. +xmakefile: ymakefile config.h dostrip
  59838. +#    -delete force xmakefile
  59839. +    ${CPP} ymakefile > t:ymkf
  59840. +    dostrip <t:ymkf >xmakefile.test
  59841. +
  59842. +dostrip: dostrip.c
  59843. +    sc link dostrip
  59844. +
  59845. +tags:
  59846. +    etags [a-z]*.h [a-z]*.c /lisp/[a-z]*.el
  59847. diff -ru --new-file baseline/fsf/emacs/src/st.sh amiga/fsf/emacs/src/st.sh
  59848. --- baseline/fsf/emacs/src/st.sh    Wed Dec 31 17:00:00 1969
  59849. +++ amiga/fsf/emacs/src/st.sh    Sun Oct 15 17:12:47 1995
  59850. @@ -0,0 +1,3 @@
  59851. +semacs 
  59852. +Stack 600000
  59853. +/src/temacs -pure 300000 -malloc 400000 -q
  59854. diff -ru --new-file baseline/fsf/emacs/src/syntax.c amiga/fsf/emacs/src/syntax.c
  59855. --- baseline/fsf/emacs/src/syntax.c    Fri Jun 24 14:50:40 1994
  59856. +++ amiga/fsf/emacs/src/syntax.c    Sun Oct 15 17:12:49 1995
  59857. @@ -185,6 +185,9 @@
  59858.   into the code it signifies.
  59859.   This is used by modify-syntax-entry, and other things. */
  59860.  
  59861. +#ifdef AMIGA
  59862. +const far
  59863. +#endif
  59864.  unsigned char syntax_spec_code[0400] =
  59865.    { 0377, 0377, 0377, 0377, 0377, 0377, 0377, 0377,
  59866.      0377, 0377, 0377, 0377, 0377, 0377, 0377, 0377,
  59867. @@ -208,7 +211,9 @@
  59868.    };
  59869.  
  59870.  /* Indexed by syntax code, give the letter that describes it. */
  59871. -
  59872. +#ifdef AMIGA
  59873. +const far
  59874. +#endif
  59875.  char syntax_code_spec[14] =
  59876.    {
  59877.      ' ', '.', 'w', '_', '(', ')', '\'', '\"', '$', '\\', '/', '<', '>', '@'
  59878. diff -ru --new-file baseline/fsf/emacs/src/syntax.h amiga/fsf/emacs/src/syntax.h
  59879. --- baseline/fsf/emacs/src/syntax.h    Sun Jun 19 11:11:07 1994
  59880. +++ amiga/fsf/emacs/src/syntax.h    Sun Oct 15 17:12:52 1995
  59881. @@ -173,12 +173,18 @@
  59882.  
  59883.  #endif
  59884.  
  59885. +#ifdef AMIGA
  59886. +#define FAR far
  59887. +#else
  59888. +#define FAR
  59889. +#endif
  59890. +
  59891.  /* This array, indexed by a character, contains the syntax code which that
  59892.   character signifies (as a char).  For example,
  59893.   (enum syntaxcode) syntax_spec_code['w'] is Sword. */
  59894.  
  59895. -extern unsigned char syntax_spec_code[0400];
  59896. +extern unsigned char FAR syntax_spec_code[0400];
  59897.  
  59898.  /* Indexed by syntax code, give the letter that describes it. */
  59899.  
  59900. -extern char syntax_code_spec[14];
  59901. +extern char FAR syntax_code_spec[14];
  59902. diff -ru --new-file baseline/fsf/emacs/src/syntax_protos.h amiga/fsf/emacs/src/syntax_protos.h
  59903. --- baseline/fsf/emacs/src/syntax_protos.h    Wed Dec 31 17:00:00 1969
  59904. +++ amiga/fsf/emacs/src/syntax_protos.h    Sun Oct 15 17:12:53 1995
  59905. @@ -0,0 +1,111 @@
  59906. +/* Prototypes for functions defined in
  59907. +syntax.c
  59908. + */
  59909. +
  59910. +extern int Qsyntax_table_p;
  59911. +
  59912. +extern int words_include_escapes;
  59913. +
  59914. +extern int find_start_pos;
  59915. +
  59916. +extern int find_start_value;
  59917. +
  59918. +extern struct buffer * find_start_buffer;
  59919. +
  59920. +extern int find_start_begv;
  59921. +
  59922. +extern int find_start_modiff;
  59923. +
  59924. +int find_defun_start(int pos);
  59925. +
  59926. +extern struct Lisp_Subr Ssyntax_table_p;
  59927. +
  59928. +int Fsyntax_table_p(int );
  59929. +
  59930. +int check_syntax_table(int obj);
  59931. +
  59932. +extern struct Lisp_Subr Ssyntax_table;
  59933. +
  59934. +int Fsyntax_table(void);
  59935. +
  59936. +extern struct Lisp_Subr Sstandard_syntax_table;
  59937. +
  59938. +int Fstandard_syntax_table(void);
  59939. +
  59940. +extern struct Lisp_Subr Scopy_syntax_table;
  59941. +
  59942. +int Fcopy_syntax_table(int );
  59943. +
  59944. +extern struct Lisp_Subr Sset_syntax_table;
  59945. +
  59946. +int Fset_syntax_table(int );
  59947. +
  59948. +extern unsigned char syntax_spec_code[256];
  59949. +
  59950. +extern char syntax_code_spec[14];
  59951. +
  59952. +extern struct Lisp_Subr Schar_syntax;
  59953. +
  59954. +int Fchar_syntax(int );
  59955. +
  59956. +extern struct Lisp_Subr Smodify_syntax_entry;
  59957. +
  59958. +int Fmodify_syntax_entry(int , int , int );
  59959. +
  59960. +void describe_syntax(int value);
  59961. +
  59962. +int describe_syntax_1(int vector);
  59963. +
  59964. +extern struct Lisp_Subr Sdescribe_syntax;
  59965. +
  59966. +int Fdescribe_syntax(void);
  59967. +
  59968. +int scan_words(register int from,
  59969. +               register int count);
  59970. +
  59971. +extern struct Lisp_Subr Sforward_word;
  59972. +
  59973. +int Fforward_word(int );
  59974. +
  59975. +extern struct Lisp_Subr Sforward_comment;
  59976. +
  59977. +int Fforward_comment(int );
  59978. +
  59979. +extern int parse_sexp_ignore_comments;
  59980. +
  59981. +int scan_lists(register int from,
  59982. +               int count,
  59983. +               int depth,
  59984. +               int sexpflag);
  59985. +
  59986. +int char_quoted(register int pos);
  59987. +
  59988. +extern struct Lisp_Subr Sscan_lists;
  59989. +
  59990. +int Fscan_lists(int , int , int );
  59991. +
  59992. +extern struct Lisp_Subr Sscan_sexps;
  59993. +
  59994. +int Fscan_sexps(int , int );
  59995. +
  59996. +extern struct Lisp_Subr Sbackward_prefix_chars;
  59997. +
  59998. +int Fbackward_prefix_chars(void);
  59999. +
  60000. +void scan_sexps_forward(struct lisp_parse_state * stateptr,
  60001. +                        register int from,
  60002. +                        int end,
  60003. +                        int targetdepth,
  60004. +                        int stopbefore,
  60005. +                        int oldstate,
  60006. +
  60007. +                        int commentstop);
  60008. +
  60009. +extern struct Lisp_Subr Sparse_partial_sexp;
  60010. +
  60011. +int Fparse_partial_sexp(int , int , int , int , int , int );
  60012. +
  60013. +int init_syntax_once(void);
  60014. +
  60015. +int syms_of_syntax(void);
  60016. +
  60017. diff -ru --new-file baseline/fsf/emacs/src/sysdep.c amiga/fsf/emacs/src/sysdep.c
  60018. --- baseline/fsf/emacs/src/sysdep.c    Sun Sep  4 17:12:05 1994
  60019. +++ amiga/fsf/emacs/src/sysdep.c    Sun Oct 15 17:12:56 1995
  60020. @@ -17,7 +17,7 @@
  60021.  along with GNU Emacs; see the file COPYING.  If not, write to
  60022.  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  60023.  
  60024. -
  60025. +#ifndef AMIGA
  60026.  #include <signal.h>
  60027.  #include <setjmp.h>
  60028.  
  60029. @@ -263,7 +263,7 @@
  60030.      ospeed = 0;
  60031.    else
  60032.      {
  60033. -#ifdef MSDOS
  60034. +#if defined(MSDOS) || defined(__amigados__)
  60035.      ospeed = 15;
  60036.  #else
  60037.  #ifdef VMS
  60038. @@ -457,7 +457,7 @@
  60039.  #endif
  60040.  }
  60041.  
  60042. -#ifndef VMS
  60043. +#if !defined(VMS) && !defined(__amigados)
  60044.  /*  Set up the terminal at the other end of a pseudo-terminal that
  60045.      we will be controlling an inferior through.
  60046.      It should not echo or do line-editing, since that is done
  60047. @@ -4871,3 +4871,5 @@
  60048.  }
  60049.  
  60050.  #endif /* AIX */
  60051. +
  60052. +#endif /* not __amigados__ */
  60053. diff -ru --new-file baseline/fsf/emacs/src/systty.h amiga/fsf/emacs/src/systty.h
  60054. --- baseline/fsf/emacs/src/systty.h    Wed May 11 15:15:06 1994
  60055. +++ amiga/fsf/emacs/src/systty.h    Sun Oct 15 17:12:59 1995
  60056. @@ -73,8 +73,10 @@
  60057.  #else /* neither HAVE_TERMIO nor HAVE_TERMIOS */
  60058.  #ifndef VMS
  60059.  #ifndef MSDOS
  60060. +#ifndef AMIGA
  60061.  #include <sgtty.h>
  60062.  #endif
  60063. +#endif
  60064.  #else /* VMS */
  60065.  #include <descrip.h>
  60066.  static struct iosb
  60067. @@ -356,7 +358,7 @@
  60068.  #ifdef VMS
  60069.    struct sensemode main;
  60070.  #else
  60071. -#ifdef MSDOS
  60072. +#if defined(MSDOS) || defined(AMIGA)
  60073.    int main;
  60074.  #else
  60075.    struct sgttyb main;
  60076. @@ -411,7 +413,7 @@
  60077.  
  60078.  #else
  60079.  
  60080. -#ifdef MSDOS
  60081. +#if defined(MSDOS) || defined(AMIGA)
  60082.  #define EMACS_TTY_TABS_OK(p) 0
  60083.  #else /* not MSDOS */
  60084.  #define EMACS_TTY_TABS_OK(p) (((p)->main.sg_flags & XTABS) != XTABS)
  60085. diff -ru --new-file baseline/fsf/emacs/src/syswait.h amiga/fsf/emacs/src/syswait.h
  60086. --- baseline/fsf/emacs/src/syswait.h    Sun Feb 20 12:33:18 1994
  60087. +++ amiga/fsf/emacs/src/syswait.h    Sun Oct 15 17:13:01 1995
  60088. @@ -23,14 +23,16 @@
  60089.  
  60090.  #ifndef VMS
  60091.  #ifndef WAITTYPE
  60092. -#if (!defined (BSD) && !defined (UNIPLUS) && !defined (STRIDE) && !(defined (HPUX) && !defined (NOMULTIPLEJOBS)) && !defined (HAVE_WAIT_HEADER)) || defined (LINUX)
  60093. +#if (!defined (BSD) && !defined (UNIPLUS) && !defined (STRIDE) && !(defined (HPUX) && !defined (NOMULTIPLEJOBS)) && !defined (HAVE_WAIT_HEADER))|| defined (LINUX) 
  60094.  #define WAITTYPE int
  60095. +#ifndef AMIGA
  60096.  #define WIFSTOPPED(w) ((w&0377) == 0177)
  60097.  #define WIFSIGNALED(w) ((w&0377) != 0177 && (w&~0377) == 0)
  60098.  #define WIFEXITED(w) ((w&0377) == 0)
  60099. -#define WRETCODE(w) (w >> 8)
  60100.  #define WSTOPSIG(w) (w >> 8)
  60101.  #define WTERMSIG(w) (w & 0377)
  60102. +#endif
  60103. +#define WRETCODE(w) (w >> 8)
  60104.  #ifndef WCOREDUMP
  60105.  #define WCOREDUMP(w) ((w&0200) != 0)
  60106.  #endif
  60107. diff -ru --new-file baseline/fsf/emacs/src/term.c amiga/fsf/emacs/src/term.c
  60108. --- baseline/fsf/emacs/src/term.c    Wed Aug 24 12:50:14 1994
  60109. +++ amiga/fsf/emacs/src/term.c    Sun Oct 15 17:13:04 1995
  60110. @@ -24,7 +24,6 @@
  60111.  #include "termchar.h"
  60112.  #include "termopts.h"
  60113.  #include "cm.h"
  60114. -#undef NULL
  60115.  #include "lisp.h"
  60116.  #include "frame.h"
  60117.  #include "disptab.h"
  60118. @@ -258,8 +257,15 @@
  60119.  
  60120.     Used IFF TN_standout_width >= 0. */
  60121.  
  60122. +#ifdef AMIGA /* CHFIXME: check */
  60123. +char *chars_wasted;
  60124. +char *copybuf;
  60125. +#define FAR far /* force object into pure section */
  60126. +#else
  60127.  static char *chars_wasted;
  60128.  static char *copybuf;
  60129. +#define FAR
  60130. +#endif
  60131.  
  60132.  /* nonzero means supposed to write text in standout mode.  */
  60133.  int standout_requested;
  60134. @@ -501,10 +507,16 @@
  60135.    if (TN_standout_width < 0)
  60136.      /* Handle terminals where standout takes affect at output time */
  60137.      standout_requested = highlight;
  60138. -  else if (chars_wasted[vpos] == 0)
  60139. +  else
  60140. +    {
  60141. +#ifdef AMIGA
  60142. +      assert(chars_wasted!=NULL);
  60143. +#endif
  60144. +      if (chars_wasted[vpos] == 0)
  60145.      /* For terminals with standout markers, write one on this line
  60146.         if there isn't one already.  */
  60147. -    write_standout_marker (highlight, vpos);
  60148. +      write_standout_marker (highlight, vpos);
  60149. +    }
  60150.  }
  60151.  
  60152.  /* Call this when about to modify line at position VPOS
  60153. @@ -558,6 +570,9 @@
  60154.        return;
  60155.      }
  60156.  
  60157. +  if (chars_wasted == 0)
  60158. +    chars_wasted = (char *) xmalloc (FRAME_HEIGHT (frame));
  60159. +
  60160.    col += chars_wasted[row] & 077;
  60161.    if (curY == row && curX == col)
  60162.      return;
  60163. @@ -1092,7 +1107,12 @@
  60164.        return;
  60165.      }
  60166.  #endif
  60167. -
  60168. +#ifdef AMIGA
  60169. +  /* CHFIXME: does not work for termcap !, should use predicate as X above */
  60170. +  do_line_insertion_deletion_costs (frame, 0, ".5*", 0, ".5*", 0, 0,
  60171. +                    1 /* x_screen_planes CHFIXME: get planes ?*/);
  60172. +  return;
  60173. +#else
  60174.    /* These variables are only used for terminal stuff.  They are allocated
  60175.       once for the terminal frame of X-windows emacs, but not used afterwards.
  60176.  
  60177. @@ -1147,6 +1167,7 @@
  60178.      RPov = FRAME_WIDTH (frame) * 2;
  60179.  
  60180.    cmcostinit ();        /* set up cursor motion costs */
  60181. +#endif
  60182.  }
  60183.  
  60184.  struct fkey_table {
  60185. @@ -1160,7 +1181,7 @@
  60186.       other keys (as on the IBM PC keyboard) they get overridden.
  60187.    */
  60188.  
  60189. -static struct fkey_table keys[] = {
  60190. +static struct fkey_table FAR keys[] = {
  60191.    "kh", "home",        /* termcap */
  60192.    "kl", "left",        /* termcap */
  60193.    "ku", "up",        /* termcap */
  60194. diff -ru --new-file baseline/fsf/emacs/src/term_protos.h amiga/fsf/emacs/src/term_protos.h
  60195. --- baseline/fsf/emacs/src/term_protos.h    Wed Dec 31 17:00:00 1969
  60196. +++ amiga/fsf/emacs/src/term_protos.h    Sun Oct 15 17:13:06 1995
  60197. @@ -0,0 +1,266 @@
  60198. +/* Prototypes for functions defined in
  60199. +term.c
  60200. + */
  60201. +
  60202. +extern int must_write_spaces;
  60203. +
  60204. +extern int min_padding_speed;
  60205. +
  60206. +extern int line_ins_del_ok;
  60207. +
  60208. +extern int char_ins_del_ok;
  60209. +
  60210. +extern int scroll_region_ok;
  60211. +
  60212. +extern int memory_below_frame;
  60213. +
  60214. +extern int fast_clear_end_of_line;
  60215. +
  60216. +extern int dont_calculate_costs;
  60217. +
  60218. +extern int no_redraw_on_reenter;
  60219. +
  60220. +extern int (* cursor_to_hook)(int , int);
  60221. +
  60222. +extern int (* raw_cursor_to_hook)(int, int);
  60223. +
  60224. +extern int (* clear_to_end_hook)(void);
  60225. +
  60226. +extern int (* clear_frame_hook)(int);
  60227. +
  60228. +extern int (* clear_end_of_line_hook)(int);
  60229. +
  60230. +extern int (* ins_del_lines_hook)(int, int);
  60231. +
  60232. +extern int (* change_line_highlight_hook)(int, int, int);
  60233. +
  60234. +extern int (* reassert_line_highlight_hook)(int, int);
  60235. +
  60236. +extern int (* insert_glyphs_hook)(unsigned int *, int);
  60237. +
  60238. +extern int (* write_glyphs_hook)(unsigned int*, int);
  60239. +
  60240. +extern int (* delete_glyphs_hook)(unsigned int*, int);
  60241. +
  60242. +extern int (* ring_bell_hook)(void);
  60243. +
  60244. +extern int (* reset_terminal_modes_hook)(void);
  60245. +
  60246. +extern int (* set_terminal_modes_hook)(void);
  60247. +
  60248. +extern int (* update_begin_hook)(void*);
  60249. +
  60250. +extern int (* update_end_hook)(void*);
  60251. +
  60252. +extern int (* set_terminal_window_hook)(int);
  60253. +
  60254. +extern int (* read_socket_hook)(int, void *, int, int, int);
  60255. +
  60256. +extern int (* frame_up_to_date_hook)(int);
  60257. +
  60258. +#if 0
  60259. +extern void (* mouse_position_hook)(void *, Lisp_Object *, void *, Lisp_Object *, Lisp_Object *, unsigned long *);
  60260. +#endif
  60261. +
  60262. +extern void (* frame_rehighlight_hook)(int);
  60263. +
  60264. +extern void (* frame_raise_lower_hook)(void* , int);
  60265. +
  60266. +extern void (* set_vertical_scroll_bar_hook)(struct window *, int, int, int);
  60267. +
  60268. +extern void (* condemn_scroll_bars_hook)(int);
  60269. +
  60270. +extern void (* redeem_scroll_bar_hook)(struct window *);
  60271. +
  60272. +extern void (* judge_scroll_bars_hook)(int);
  60273. +
  60274. +extern char * TS_ins_line;
  60275. +
  60276. +extern char * TS_ins_multi_lines;
  60277. +
  60278. +extern char * TS_bell;
  60279. +
  60280. +extern char * TS_clr_to_bottom;
  60281. +
  60282. +extern char * TS_clr_line;
  60283. +
  60284. +extern char * TS_clr_frame;
  60285. +
  60286. +extern char * TS_set_scroll_region;
  60287. +
  60288. +extern char * TS_set_scroll_region_1;
  60289. +
  60290. +extern char * TS_del_char;
  60291. +
  60292. +extern char * TS_del_multi_chars;
  60293. +
  60294. +extern char * TS_del_line;
  60295. +
  60296. +extern char * TS_del_multi_lines;
  60297. +
  60298. +extern char * TS_delete_mode;
  60299. +
  60300. +extern char * TS_end_delete_mode;
  60301. +
  60302. +extern char * TS_end_insert_mode;
  60303. +
  60304. +extern char * TS_ins_char;
  60305. +
  60306. +extern char * TS_ins_multi_chars;
  60307. +
  60308. +extern char * TS_insert_mode;
  60309. +
  60310. +extern char * TS_pad_inserted_char;
  60311. +
  60312. +extern char * TS_end_keypad_mode;
  60313. +
  60314. +extern char * TS_keypad_mode;
  60315. +
  60316. +extern char * TS_pad_char;
  60317. +
  60318. +extern char * TS_repeat;
  60319. +
  60320. +extern char * TS_end_standout_mode;
  60321. +
  60322. +extern char * TS_fwd_scroll;
  60323. +
  60324. +extern char * TS_standout_mode;
  60325. +
  60326. +extern char * TS_rev_scroll;
  60327. +
  60328. +extern char * TS_end_termcap_modes;
  60329. +
  60330. +extern char * TS_termcap_modes;
  60331. +
  60332. +extern char * TS_visible_bell;
  60333. +
  60334. +extern char * TS_end_visual_mode;
  60335. +
  60336. +extern char * TS_visual_mode;
  60337. +
  60338. +extern char * TS_set_window;
  60339. +
  60340. +extern int TF_hazeltine;
  60341. +
  60342. +extern int TF_insmode_motion;
  60343. +
  60344. +extern int TF_standout_motion;
  60345. +
  60346. +extern int TF_underscore;
  60347. +
  60348. +extern int TF_teleray;
  60349. +
  60350. +extern int TF_xs;
  60351. +
  60352. +extern int TN_standout_width;
  60353. +
  60354. +extern int RPov;
  60355. +
  60356. +extern int delete_in_insert_mode;
  60357. +
  60358. +extern int se_is_so;
  60359. +
  60360. +extern char * chars_wasted;
  60361. +
  60362. +extern char * copybuf;
  60363. +
  60364. +extern int standout_requested;
  60365. +
  60366. +extern int insert_mode;
  60367. +
  60368. +extern int standout_mode;
  60369. +
  60370. +extern int specified_window;
  60371. +
  60372. +extern int updating_frame;
  60373. +
  60374. +extern int system_uses_terminfo;
  60375. +
  60376. +int ring_bell(void);
  60377. +
  60378. +int set_terminal_modes(void);
  60379. +
  60380. +int reset_terminal_modes(void);
  60381. +
  60382. +int update_begin(int f);
  60383. +
  60384. +int update_end(int f);
  60385. +
  60386. +int set_terminal_window(int size);
  60387. +
  60388. +int set_scroll_region(int start,
  60389. +                      int stop);
  60390. +
  60391. +int turn_on_insert(void);
  60392. +
  60393. +int turn_off_insert(void);
  60394. +
  60395. +int turn_off_highlight(void);
  60396. +
  60397. +int turn_on_highlight(void);
  60398. +
  60399. +int background_highlight(void);
  60400. +
  60401. +int highlight_if_desired(void);
  60402. +
  60403. +int write_standout_marker(int flag,
  60404. +                          int vpos);
  60405. +
  60406. +int reassert_line_highlight(int highlight,
  60407. +                            int vpos);
  60408. +
  60409. +int change_line_highlight(int new_highlight,
  60410. +                          int vpos,
  60411. +                          int first_unused_hpos);
  60412. +
  60413. +int cursor_to(int row,
  60414. +              int col);
  60415. +
  60416. +int raw_cursor_to(int row,
  60417. +                  int col);
  60418. +
  60419. +int clear_to_end(void);
  60420. +
  60421. +int clear_frame(void);
  60422. +
  60423. +int clear_end_of_line(int first_unused_hpos);
  60424. +
  60425. +int clear_end_of_line_raw(int first_unused_hpos);
  60426. +
  60427. +int write_glyphs(register unsigned int * string,
  60428. +                 register int len);
  60429. +
  60430. +int insert_glyphs(register unsigned int * start,
  60431. +                  register int len);
  60432. +
  60433. +int delete_glyphs(register int n);
  60434. +
  60435. +int ins_del_lines(int vpos,
  60436. +                  int n);
  60437. +
  60438. +int string_cost(char * str);
  60439. +
  60440. +int string_cost_one_line(char * str);
  60441. +
  60442. +int per_line_cost(register char * str);
  60443. +
  60444. +extern int * char_ins_del_vector;
  60445. +
  60446. +void calculate_ins_del_char_costs(int frame);
  60447. +
  60448. +int calculate_costs(int frame);
  60449. +
  60450. +extern struct fkey_table __far keys[40];
  60451. +
  60452. +extern char ** term_get_fkeys_arg;
  60453. +
  60454. +void term_get_fkeys(char ** address);
  60455. +
  60456. +int term_get_fkeys_1(void);
  60457. +
  60458. +int term_init(char * terminal_type);
  60459. +
  60460. +int fatal(char * str, ...);
  60461. +
  60462. +int syms_of_term(void);
  60463. +
  60464. diff -ru --new-file baseline/fsf/emacs/src/termcap.c amiga/fsf/emacs/src/termcap.c
  60465. --- baseline/fsf/emacs/src/termcap.c    Wed Aug 31 08:18:10 1994
  60466. +++ amiga/fsf/emacs/src/termcap.c    Sun Oct 15 17:13:08 1995
  60467. @@ -19,6 +19,7 @@
  60468.  #ifdef HAVE_CONFIG_H
  60469.  
  60470.  #include <config.h>
  60471. +#include <paths.h>
  60472.  
  60473.  /* Get the O_* definitions for open et al.  */
  60474.  #include <sys/file.h>
  60475. @@ -381,9 +382,17 @@
  60476.    return *fn == '/' || fn[1] == ':';
  60477.  }
  60478.  #else
  60479. +#ifdef AMIGA
  60480. +static int
  60481. +valid_filename_p (fn)
  60482. +     char *fn;
  60483. +{
  60484. +  return (fn && (index(fn+1, ':')));
  60485. +}
  60486. +#else /* not AMIGA */
  60487.  #define valid_filename_p(fn) (*(fn) == '/')
  60488.  #endif
  60489. -
  60490. +#endif /* not AMIGA */
  60491.  #endif /* !VMS */
  60492.  
  60493.  /* Find the termcap entry data for terminal type NAME
  60494. @@ -439,8 +448,12 @@
  60495.      dostounix_filename(termcap_name);
  60496.  #endif
  60497.  
  60498. +#ifdef AMIGA
  60499. +  filep = termcap_name != NULL; /* assume ok */
  60500. +#else
  60501.    filep = termcap_name && valid_filename_p (termcap_name);
  60502. -
  60503. +#endif
  60504. +  
  60505.    /* If termcap_name is non-null and starts with / (in the un*x case, that is),
  60506.       it is a file name to use instead of /etc/termcap.
  60507.       If it is non-null and does not start with /,
  60508. diff -ru --new-file baseline/fsf/emacs/src/undo_protos.h amiga/fsf/emacs/src/undo_protos.h
  60509. --- baseline/fsf/emacs/src/undo_protos.h    Wed Dec 31 17:00:00 1969
  60510. +++ amiga/fsf/emacs/src/undo_protos.h    Sun Oct 15 17:13:10 1995
  60511. @@ -0,0 +1,41 @@
  60512. +/* Prototypes for functions defined in
  60513. +undo.c
  60514. + */
  60515. +
  60516. +extern int last_undo_buffer;
  60517. +
  60518. +extern int Qinhibit_read_only;
  60519. +
  60520. +extern int pending_boundary;
  60521. +
  60522. +int record_insert(int beg,
  60523. +                  int length);
  60524. +
  60525. +int record_delete(int beg,
  60526. +                  int length);
  60527. +
  60528. +int record_change(int beg,
  60529. +                  int length);
  60530. +
  60531. +int record_first_change(void);
  60532. +
  60533. +int record_property_change(int beg,
  60534. +                           int length,
  60535. +                           int prop,
  60536. +                           int value,
  60537. +                           int buffer);
  60538. +
  60539. +extern struct Lisp_Subr Sundo_boundary;
  60540. +
  60541. +int Fundo_boundary(void);
  60542. +
  60543. +int truncate_undo_list(int list,
  60544. +                       int minsize,
  60545. +                       int maxsize);
  60546. +
  60547. +extern struct Lisp_Subr Sprimitive_undo;
  60548. +
  60549. +int Fprimitive_undo(int , int );
  60550. +
  60551. +int syms_of_undo(void);
  60552. +
  60553. diff -ru --new-file baseline/fsf/emacs/src/window.c amiga/fsf/emacs/src/window.c
  60554. --- baseline/fsf/emacs/src/window.c    Sat Aug 13 15:54:53 1994
  60555. +++ amiga/fsf/emacs/src/window.c    Sun Oct 15 17:13:14 1995
  60556. @@ -29,6 +29,11 @@
  60557.  #include "disptab.h"
  60558.  #include "keyboard.h"
  60559.  
  60560. +
  60561. +#ifdef AMIGA
  60562. +#include <assert.h> /* CHFIXME */
  60563. +#endif
  60564. +
  60565.  Lisp_Object Qwindowp, Qwindow_live_p;
  60566.  
  60567.  Lisp_Object Fnext_window (), Fdelete_window (), Fselect_window ();
  60568. @@ -617,6 +622,7 @@
  60569.       struct window *w;
  60570.  {
  60571.    Lisp_Object tem;
  60572. +  assert(w!=NULL);
  60573.    tem = w->display_table;
  60574.    if (XTYPE (tem) == Lisp_Vector && XVECTOR (tem)->size == DISP_TABLE_SIZE)
  60575.      return XVECTOR (tem);
  60576. @@ -2788,7 +2794,7 @@
  60577.        if (XFASTINT (data->frame_height) != previous_frame_height
  60578.        || XFASTINT (data->frame_width) != previous_frame_width)
  60579.      change_frame_size (f, data->frame_height, data->frame_width, 0, 0);
  60580. -#ifdef HAVE_X_WINDOWS
  60581. +#if defined(HAVE_X_WINDOWS) || defined(USE_EXTERNAL_MENU_BAR)
  60582.        if (XFASTINT (data->frame_menu_bar_lines)
  60583.        != previous_frame_menu_bar_lines)
  60584.      x_set_menu_bar_lines (f, data->frame_menu_bar_lines, 0);
  60585. @@ -2930,7 +2936,7 @@
  60586.        || previous_frame_width != FRAME_WIDTH (f))
  60587.      change_frame_size (f, previous_frame_height, previous_frame_width,
  60588.                 0, 0);
  60589. -#ifdef HAVE_X_WINDOWS
  60590. +#ifdef defined(HAVE_X_WINDOWS) || defined(USE_EXTERNAL_MENU_BAR) /* CHFIXME */
  60591.        if (previous_frame_menu_bar_lines != FRAME_MENU_BAR_LINES (f))
  60592.      x_set_menu_bar_lines (f, previous_frame_menu_bar_lines, 0);
  60593.  #endif
  60594. diff -ru --new-file baseline/fsf/emacs/src/window_protos.h amiga/fsf/emacs/src/window_protos.h
  60595. --- baseline/fsf/emacs/src/window_protos.h    Wed Dec 31 17:00:00 1969
  60596. +++ amiga/fsf/emacs/src/window_protos.h    Sun Oct 15 17:13:17 1995
  60597. @@ -0,0 +1,319 @@
  60598. +/* Prototypes for functions defined in
  60599. +window.c
  60600. + */
  60601. +
  60602. +extern int Qwindowp;
  60603. +
  60604. +extern int Qwindow_live_p;
  60605. +
  60606. +extern int selected_window;
  60607. +
  60608. +extern int minibuf_window;
  60609. +
  60610. +extern int Vminibuf_scroll_window;
  60611. +
  60612. +extern int Vother_window_scroll_buffer;
  60613. +
  60614. +extern int Vtemp_buffer_show_function;
  60615. +
  60616. +extern int window_min_height;
  60617. +
  60618. +extern int window_min_width;
  60619. +
  60620. +extern int pop_up_windows;
  60621. +
  60622. +extern int pop_up_frames;
  60623. +
  60624. +extern int Vpop_up_frame_function;
  60625. +
  60626. +extern int Vdisplay_buffer_function;
  60627. +
  60628. +extern int Vspecial_display_buffer_names;
  60629. +
  60630. +extern int Vspecial_display_regexps;
  60631. +
  60632. +extern int Vspecial_display_function;
  60633. +
  60634. +extern int split_height_threshold;
  60635. +
  60636. +extern int next_screen_context_lines;
  60637. +
  60638. +extern int sequence_number;
  60639. +
  60640. +extern struct Lisp_Subr Swindowp;
  60641. +
  60642. +int Fwindowp(int );
  60643. +
  60644. +extern struct Lisp_Subr Swindow_live_p;
  60645. +
  60646. +int Fwindow_live_p(int );
  60647. +
  60648. +int make_window(void);
  60649. +
  60650. +extern struct Lisp_Subr Sselected_window;
  60651. +
  60652. +int Fselected_window(void);
  60653. +
  60654. +extern struct Lisp_Subr Sminibuffer_window;
  60655. +
  60656. +int Fminibuffer_window(int );
  60657. +
  60658. +extern struct Lisp_Subr Swindow_minibuffer_p;
  60659. +
  60660. +int Fwindow_minibuffer_p(int );
  60661. +
  60662. +extern struct Lisp_Subr Spos_visible_in_window_p;
  60663. +
  60664. +int Fpos_visible_in_window_p(int , int );
  60665. +
  60666. +struct window * decode_window(register int window);
  60667. +
  60668. +extern struct Lisp_Subr Swindow_buffer;
  60669. +
  60670. +int Fwindow_buffer(int );
  60671. +
  60672. +extern struct Lisp_Subr Swindow_height;
  60673. +
  60674. +int Fwindow_height(int );
  60675. +
  60676. +extern struct Lisp_Subr Swindow_width;
  60677. +
  60678. +int Fwindow_width(int );
  60679. +
  60680. +extern struct Lisp_Subr Swindow_hscroll;
  60681. +
  60682. +int Fwindow_hscroll(int );
  60683. +
  60684. +extern struct Lisp_Subr Sset_window_hscroll;
  60685. +
  60686. +int Fset_window_hscroll(int , int );
  60687. +
  60688. +extern struct Lisp_Subr Swindow_edges;
  60689. +
  60690. +int Fwindow_edges(int );
  60691. +
  60692. +int coordinates_in_window(register struct window * w,
  60693. +                          register int * x,
  60694. +                          register int * y);
  60695. +
  60696. +extern struct Lisp_Subr Scoordinates_in_window_p;
  60697. +
  60698. +int Fcoordinates_in_window_p(int , int );
  60699. +
  60700. +int window_from_coordinates(int frame,
  60701. +                            int x,
  60702. +                            int y,
  60703. +                            int * part);
  60704. +
  60705. +extern struct Lisp_Subr Swindow_at;
  60706. +
  60707. +int Fwindow_at(int , int , int );
  60708. +
  60709. +extern struct Lisp_Subr Swindow_point;
  60710. +
  60711. +int Fwindow_point(int );
  60712. +
  60713. +extern struct Lisp_Subr Swindow_start;
  60714. +
  60715. +int Fwindow_start(int );
  60716. +
  60717. +extern struct Lisp_Subr Swindow_end;
  60718. +
  60719. +int Fwindow_end(int );
  60720. +
  60721. +extern struct Lisp_Subr Sset_window_point;
  60722. +
  60723. +int Fset_window_point(int , int );
  60724. +
  60725. +extern struct Lisp_Subr Sset_window_start;
  60726. +
  60727. +int Fset_window_start(int , int , int );
  60728. +
  60729. +extern struct Lisp_Subr Swindow_dedicated_p;
  60730. +
  60731. +int Fwindow_dedicated_p(int );
  60732. +
  60733. +extern struct Lisp_Subr Sset_window_dedicated_p;
  60734. +
  60735. +int Fset_window_dedicated_p(int , int );
  60736. +
  60737. +extern struct Lisp_Subr Swindow_display_table;
  60738. +
  60739. +int Fwindow_display_table(int );
  60740. +
  60741. +struct Lisp_Vector * window_display_table(struct window * w);
  60742. +
  60743. +extern struct Lisp_Subr Sset_window_display_table;
  60744. +
  60745. +int Fset_window_display_table(int , int );
  60746. +
  60747. +int unshow_buffer(register struct window * w);
  60748. +
  60749. +int replace_window(int old,
  60750. +                   int replacement);
  60751. +
  60752. +extern struct Lisp_Subr Sdelete_window;
  60753. +
  60754. +int Fdelete_window(int );
  60755. +
  60756. +extern struct Lisp_Subr Snext_window;
  60757. +
  60758. +int Fnext_window(int , int , int );
  60759. +
  60760. +extern struct Lisp_Subr Sprevious_window;
  60761. +
  60762. +int Fprevious_window(int , int , int );
  60763. +
  60764. +extern struct Lisp_Subr Sother_window;
  60765. +
  60766. +int Fother_window(int , int );
  60767. +
  60768. +int window_loop(enum window_loop type,
  60769. +                register int obj,
  60770. +                int mini,
  60771. +                register int frames);
  60772. +
  60773. +extern struct Lisp_Subr Sget_lru_window;
  60774. +
  60775. +int Fget_lru_window(int );
  60776. +
  60777. +extern struct Lisp_Subr Sget_largest_window;
  60778. +
  60779. +int Fget_largest_window(int );
  60780. +
  60781. +extern struct Lisp_Subr Sget_buffer_window;
  60782. +
  60783. +int Fget_buffer_window(int , int );
  60784. +
  60785. +extern struct Lisp_Subr Sdelete_other_windows;
  60786. +
  60787. +int Fdelete_other_windows(int );
  60788. +
  60789. +extern struct Lisp_Subr Sdelete_windows_on;
  60790. +
  60791. +int Fdelete_windows_on(int , int );
  60792. +
  60793. +extern struct Lisp_Subr Sreplace_buffer_in_windows;
  60794. +
  60795. +int Freplace_buffer_in_windows(int );
  60796. +
  60797. +void check_min_window_sizes(void);
  60798. +
  60799. +void check_frame_size(int frame,
  60800. +                      int * rows,
  60801. +                      int * cols);
  60802. +
  60803. +int set_window_height(int window,
  60804. +                      int height,
  60805. +                      int nodelete);
  60806. +
  60807. +int set_window_width(int window,
  60808. +                     int width,
  60809. +                     int nodelete);
  60810. +
  60811. +extern int window_select_count;
  60812. +
  60813. +extern struct Lisp_Subr Sset_window_buffer;
  60814. +
  60815. +int Fset_window_buffer(int , int );
  60816. +
  60817. +extern struct Lisp_Subr Sselect_window;
  60818. +
  60819. +int Fselect_window(int );
  60820. +
  60821. +extern struct Lisp_Subr Sdisplay_buffer;
  60822. +
  60823. +int Fdisplay_buffer(int , int );
  60824. +
  60825. +void temp_output_buffer_show(register int buf);
  60826. +
  60827. +int make_dummy_parent(int window);
  60828. +
  60829. +extern struct Lisp_Subr Ssplit_window;
  60830. +
  60831. +int Fsplit_window(int , int , int );
  60832. +
  60833. +extern struct Lisp_Subr Senlarge_window;
  60834. +
  60835. +int Fenlarge_window(int , int );
  60836. +
  60837. +extern struct Lisp_Subr Sshrink_window;
  60838. +
  60839. +int Fshrink_window(int , int );
  60840. +
  60841. +int window_height(int window);
  60842. +
  60843. +int window_width(int window);
  60844. +
  60845. +int change_window_height(register int delta,
  60846. +                         int widthflag);
  60847. +
  60848. +int window_internal_height(struct window * w);
  60849. +
  60850. +int window_internal_width(struct window * w);
  60851. +
  60852. +void window_scroll(int window,
  60853. +                   int n,
  60854. +                   int noerror);
  60855. +
  60856. +void scroll_command(register int n,
  60857. +                    int direction);
  60858. +
  60859. +extern struct Lisp_Subr Sscroll_up;
  60860. +
  60861. +int Fscroll_up(int );
  60862. +
  60863. +extern struct Lisp_Subr Sscroll_down;
  60864. +
  60865. +int Fscroll_down(int );
  60866. +
  60867. +extern struct Lisp_Subr Sscroll_other_window;
  60868. +
  60869. +int Fscroll_other_window(int );
  60870. +
  60871. +extern struct Lisp_Subr Sscroll_left;
  60872. +
  60873. +int Fscroll_left(int );
  60874. +
  60875. +extern struct Lisp_Subr Sscroll_right;
  60876. +
  60877. +int Fscroll_right(int );
  60878. +
  60879. +extern struct Lisp_Subr Srecenter;
  60880. +
  60881. +int Frecenter(int );
  60882. +
  60883. +extern struct Lisp_Subr Smove_to_window_line;
  60884. +
  60885. +int Fmove_to_window_line(int );
  60886. +
  60887. +extern struct Lisp_Subr Swindow_configuration_p;
  60888. +
  60889. +int Fwindow_configuration_p(int );
  60890. +
  60891. +extern struct Lisp_Subr Sset_window_configuration;
  60892. +
  60893. +int Fset_window_configuration(int );
  60894. +
  60895. +void delete_all_subwindows(register struct window * w);
  60896. +
  60897. +int count_windows(register struct window * window);
  60898. +
  60899. +int save_window_save(int window,
  60900. +                     struct Lisp_Vector * vector,
  60901. +                     int i);
  60902. +
  60903. +extern struct Lisp_Subr Scurrent_window_configuration;
  60904. +
  60905. +int Fcurrent_window_configuration(int );
  60906. +
  60907. +extern struct Lisp_Subr Ssave_window_excursion;
  60908. +
  60909. +int Fsave_window_excursion(int );
  60910. +
  60911. +int init_window_once(void);
  60912. +
  60913. +int syms_of_window(void);
  60914. +
  60915. +int keys_of_window(void);
  60916. +
  60917. diff -ru --new-file baseline/fsf/emacs/src/xdisp.c amiga/fsf/emacs/src/xdisp.c
  60918. --- baseline/fsf/emacs/src/xdisp.c    Fri Sep  9 21:01:12 1994
  60919. +++ amiga/fsf/emacs/src/xdisp.c    Sun Oct 15 17:13:20 1995
  60920. @@ -35,7 +35,28 @@
  60921.  #include "termhooks.h"
  60922.  #include "intervals.h"
  60923.  
  60924. -#ifdef USE_X_TOOLKIT
  60925. +#ifdef USE_PROTOS
  60926. +#define _XDISP_C
  60927. +#include "protos.h"
  60928. +#endif
  60929. +
  60930. +#ifdef AMIGA
  60931. +#define MAX_WIN_LINE 64
  60932. +static int win_line_bufpos[MAX_WIN_LINE];
  60933. +static int win_line_modified;
  60934. +static struct buffer *win_line_buffer;
  60935. +#define CLEAR_WIN_LINE() (win_line_buffer = 0)
  60936. +#include <assert.h> /* CHFIXME */
  60937. +#define FAR far
  60938. +#else
  60939. +#define FAR
  60940. +#endif /* AMIGA */
  60941. +
  60942. +#ifdef USE_X_TOOLKIT /* CHFIXME: move to config somehow */
  60943. +#define USE_EXTERNAL_MENU_BAR  
  60944. +#endif
  60945. +
  60946. +#ifdef USE_EXTERNAL_MENU_BAR 
  60947.  extern void set_frame_menubar ();
  60948.  #endif
  60949.  
  60950. @@ -322,7 +343,7 @@
  60951.                  FRAME_WIDTH (echo_frame), m, 0, 3, a);
  60952.  #else
  60953.            len = doprnt (FRAME_MESSAGE_BUF (echo_frame),
  60954. -                FRAME_WIDTH (echo_frame), m, 0, 3, &a1);
  60955. +                FRAME_WIDTH (echo_frame), m, 0, 3, (char **) &a1);
  60956.  #endif /* NO_ARG_ARRAY */
  60957.  
  60958.            message2 (FRAME_MESSAGE_BUF (echo_frame), len);
  60959. @@ -388,8 +409,13 @@
  60960.      windows_or_buffers_changed++;
  60961.  
  60962.    if (EQ (minibuf_window, selected_window))
  60963. -    this_line_bufpos = 0;
  60964. -
  60965. +    {
  60966. +      this_line_bufpos = 0;
  60967. +#ifdef AMIGA
  60968. +      CLEAR_WIN_LINE();
  60969. +    }
  60970. +#endif /* AMIGA */
  60971. +  
  60972.    previous_echo_glyphs = echo_area_glyphs;
  60973.  }
  60974.  
  60975. @@ -568,7 +594,10 @@
  60976.        echo_area_display ();
  60977.        must_finish = 1;
  60978.      }
  60979. -
  60980. +#ifdef AMIGA
  60981. +    if (windows_or_buffers_changed) CLEAR_WIN_LINE();
  60982. +#endif
  60983. +  
  60984.    /* If showing region, and mark has changed, must redisplay whole window.  */
  60985.    if (((!NILP (Vtransient_mark_mode)
  60986.      && !NILP (XBUFFER (w->buffer)->mark_active))
  60987. @@ -788,6 +817,9 @@
  60988.       Also, don't forget to check every line to update the arrow.  */
  60989.    if (pause)
  60990.      {
  60991. +#ifdef AMIGA
  60992. +      CLEAR_WIN_LINE();
  60993. +#endif
  60994.        this_line_bufpos = 0;
  60995.        if (!NILP (last_arrow_position))
  60996.      {
  60997. @@ -944,7 +976,7 @@
  60998.      w->update_mode_line = Qt;
  60999.  
  61000.    if (
  61001. -#ifdef USE_X_TOOLKIT
  61002. +#ifdef USE_EXTERNAL_MENU_BAR
  61003.        FRAME_EXTERNAL_MENU_BAR (f) 
  61004.  #else
  61005.        FRAME_MENU_BAR_LINES (f) > 0
  61006. @@ -969,9 +1001,9 @@
  61007.        current_buffer = XBUFFER (w->buffer);
  61008.        FRAME_MENU_BAR_ITEMS (f) = menu_bar_items (FRAME_MENU_BAR_ITEMS (f));
  61009.        current_buffer = prev;
  61010. -#ifdef USE_X_TOOLKIT
  61011. +#ifdef USE_EXTERNAL_MENU_BAR
  61012.        set_frame_menubar (f, 0);
  61013. -#endif /* USE_X_TOOLKIT */
  61014. +#endif /* USE_EXTERNAL_MENU_BAR */
  61015.      }
  61016.      }
  61017.  }
  61018. @@ -1151,10 +1183,35 @@
  61019.        && XFASTINT (w->window_end_vpos) < XFASTINT (w->height)
  61020.        && !EQ (window, minibuf_window))
  61021.      {
  61022. +#ifdef XXXXAMIGA /* CHFIXME: check, mind. highlight case */
  61023. +       int *wlb;
  61024. +      int line, best_startp, best_vpos;
  61025. +
  61026. +      best_startp = startp; best_vpos = 0;
  61027. +      if (win_line_buffer && BUF_MODIFF(win_line_buffer) > win_line_modified)
  61028. +      CLEAR_WIN_LINE();
  61029. +      if (current_buffer == win_line_buffer && current_buffer == XBUFFER (w->buffer))
  61030. +        {
  61031. +      /* Try & find line to start from */
  61032. +      wlb = win_line_bufpos; line = 0;
  61033. +      while (line < MAX_WIN_LINE)
  61034. +        {
  61035. +          if (*wlb && point > *wlb && *wlb > best_startp)
  61036. +            {
  61037. +          best_startp = *wlb;
  61038. +          best_vpos = line;
  61039. +            }
  61040. +          line++; wlb++;
  61041. +        }
  61042. +        }
  61043. +      pos = *compute_motion (best_startp, best_vpos, (hscroll ? 1 - hscroll : 0),
  61044. +                  point, height + 1, 10000, width, hscroll,
  61045. +                pos_tab_offset (w, best_startp), w);
  61046. +#else /* not AMIGA */
  61047.        pos = *compute_motion (startp, 0, (hscroll ? 1 - hscroll : 0),
  61048.                  PT, height + 1, 10000, width, hscroll,
  61049.                  pos_tab_offset (w, startp), w);
  61050. -
  61051. +#endif /* not AMIGA */
  61052.        if (pos.vpos < height)
  61053.      {
  61054.        /* Ok, point is still on frame */
  61055. @@ -1292,7 +1349,7 @@
  61056.  
  61057.    /* When we reach a frame's selected window, redo the frame's menu bar.  */
  61058.    if (!NILP (w->update_mode_line)
  61059. -#ifdef USE_X_TOOLKIT
  61060. +#ifdef USE_EXTERNAL_MENU_BAR
  61061.        && FRAME_EXTERNAL_MENU_BAR (f) 
  61062.  #else
  61063.        && FRAME_MENU_BAR_LINES (f) > 0
  61064. @@ -1356,6 +1413,10 @@
  61065.    int width = window_internal_width (w) - 1;
  61066.    struct position val;
  61067.  
  61068. +#ifdef AMIGA
  61069. +  if (XBUFFER(w->buffer) == win_line_buffer) CLEAR_WIN_LINE();
  61070. +#endif 
  61071. +
  61072.    Fset_marker (w->start, make_number (pos), Qnil);
  61073.    cursor_vpos = -1;
  61074.    overlay_arrow_seen = 0;
  61075. @@ -1431,6 +1492,10 @@
  61076.    int delta;
  61077.    int tab_offset, epto;
  61078.  
  61079. +#ifdef AMIGA
  61080. +    if (XBUFFER(w->buffer) == win_line_buffer) CLEAR_WIN_LINE();
  61081. +#endif
  61082. +  
  61083.    if (GPT - BEG < beg_unchanged)
  61084.      beg_unchanged = GPT - BEG;
  61085.    if (Z - GPT < end_unchanged)
  61086. @@ -1996,7 +2061,11 @@
  61087.        ? XINT (current_buffer->selective_display)
  61088.      : !NILP (current_buffer->selective_display) ? -1 : 0;
  61089.    register struct frame_glyphs *desired_glyphs = FRAME_DESIRED_GLYPHS (f);
  61090. +#ifdef AMIGA /* CHFIXME */
  61091. +  register struct Lisp_Vector *dp = (assert(w != 0), window_display_table (w));
  61092. +#else
  61093.    register struct Lisp_Vector *dp = window_display_table (w);
  61094. +#endif
  61095.  
  61096.    Lisp_Object default_invis_vector[3];
  61097.    /* Nonzero means display something where there are invisible lines.
  61098. @@ -2539,7 +2608,7 @@
  61099.    int hpos = 0;
  61100.    int i;
  61101.  
  61102. -#ifndef USE_X_TOOLKIT
  61103. +#ifndef USE_EXTERNAL_MENU_BAR
  61104.    if (FRAME_MENU_BAR_LINES (f) <= 0)
  61105.      return;
  61106.  
  61107. @@ -2580,7 +2649,7 @@
  61108.    vpos++;
  61109.    while (vpos < FRAME_MENU_BAR_LINES (f))
  61110.      get_display_line (f, vpos++, 0);
  61111. -#endif /* not USE_X_TOOLKIT */
  61112. +#endif /* not USE_EXTERNAL_MENU_BAR */
  61113.  }
  61114.  
  61115.  /* Display the mode line for window w */
  61116. @@ -2835,7 +2904,10 @@
  61117.  /* Return a string for the output of a mode line %-spec for window W,
  61118.     generated by character C and width MAXWIDTH.  */
  61119.  
  61120. -static char lots_of_dashes[] = "--------------------------------------------------------------------------------------------------------------------------------------------";
  61121. +#ifdef AMIGA
  61122. +const
  61123. +#endif
  61124. +static char FAR lots_of_dashes[] = "--------------------------------------------------------------------------------------------------------------------------------------------";
  61125.  
  61126.  static char *
  61127.  decode_mode_spec (w, c, maxwidth)
  61128. @@ -3488,7 +3560,11 @@
  61129.  #ifndef COMPILER_REGISTER_BUG
  61130.    register
  61131.  #endif /* COMPILER_REGISTER_BUG */
  61132. -    struct window *mini_w;
  61133. +   struct window *mini_w;
  61134. +
  61135. +#ifdef AMIGA
  61136. +  CLEAR_WIN_LINE();
  61137. +#endif
  61138.  
  61139.    this_line_bufpos = 0;
  61140.  
  61141. diff -ru --new-file baseline/fsf/emacs/src/xdisp_protos.h amiga/fsf/emacs/src/xdisp_protos.h
  61142. --- baseline/fsf/emacs/src/xdisp_protos.h    Wed Dec 31 17:00:00 1969
  61143. +++ amiga/fsf/emacs/src/xdisp_protos.h    Sun Oct 15 17:13:23 1995
  61144. @@ -0,0 +1,193 @@
  61145. +/* Prototypes for functions defined in
  61146. +xdisp.c
  61147. + */
  61148. +
  61149. +extern int win_line_bufpos[64];
  61150. +
  61151. +extern int win_line_modified;
  61152. +
  61153. +extern struct buffer * win_line_buffer;
  61154. +
  61155. +extern char visible[256];
  61156. +
  61157. +extern int noninteractive_need_newline;
  61158. +
  61159. +extern int this_line_bufpos;
  61160. +
  61161. +extern int this_line_endpos;
  61162. +
  61163. +extern int this_line_vpos;
  61164. +
  61165. +extern int this_line_start_hpos;
  61166. +
  61167. +extern struct buffer * this_line_buffer;
  61168. +
  61169. +extern int scroll_bottom_vpos;
  61170. +
  61171. +extern char * previous_echo_glyphs;
  61172. +
  61173. +extern int truncate_partial_width_windows;
  61174. +
  61175. +extern int Vglobal_mode_string;
  61176. +
  61177. +extern int Voverlay_arrow_position;
  61178. +
  61179. +extern int Voverlay_arrow_string;
  61180. +
  61181. +extern int last_arrow_position;
  61182. +
  61183. +extern int last_arrow_string;
  61184. +
  61185. +extern int Qmenu_bar_update_hook;
  61186. +
  61187. +extern int overlay_arrow_seen;
  61188. +
  61189. +extern int highlight_nonselected_windows;
  61190. +
  61191. +extern int scroll_step;
  61192. +
  61193. +extern int blank_end_of_window;
  61194. +
  61195. +extern int buffer_shared;
  61196. +
  61197. +extern int cursor_vpos;
  61198. +
  61199. +extern int cursor_hpos;
  61200. +
  61201. +extern int debug_end_pos;
  61202. +
  61203. +extern int mode_line_inverse_video;
  61204. +
  61205. +#if 0
  61206. +extern char * minibuf_prompt;
  61207. +#endif
  61208. +
  61209. +extern int minibuf_prompt_width;
  61210. +
  61211. +extern char * echo_area_glyphs;
  61212. +
  61213. +extern int echo_area_glyphs_length;
  61214. +
  61215. +extern int update_mode_lines;
  61216. +
  61217. +extern int beg_unchanged;
  61218. +
  61219. +extern int end_unchanged;
  61220. +
  61221. +extern int unchanged_modified;
  61222. +
  61223. +extern int clip_changed;
  61224. +
  61225. +extern int windows_or_buffers_changed;
  61226. +
  61227. +extern int line_number_displayed;
  61228. +
  61229. +extern int line_number_display_limit;
  61230. +
  61231. +void message2(char * m,
  61232. +              int len);
  61233. +
  61234. +void message1(char * m);
  61235. +
  61236. +void truncate_echo_area(int len);
  61237. +
  61238. +extern int message_buf_print;
  61239. +
  61240. +#ifdef _XDISP_C
  61241. +void message(char * m,
  61242. +             int a1,
  61243. +             int a2,
  61244. +             int a3);
  61245. +#else
  61246. +void message(char * m, ...);
  61247. +#endif
  61248. +void echo_area_display(void);
  61249. +
  61250. +void prepare_menu_bars(void);
  61251. +
  61252. +extern int do_verify_charstarts;
  61253. +
  61254. +void redisplay(void);
  61255. +
  61256. +int redisplay_preserve_echo_area(void);
  61257. +
  61258. +void mark_window_display_accurate(int window,
  61259. +                                  int flag);
  61260. +
  61261. +void update_menu_bar(int f);
  61262. +
  61263. +extern int do_id;
  61264. +
  61265. +void redisplay_windows(int window);
  61266. +
  61267. +void redisplay_window(int window,
  61268. +                      int just_this_one);
  61269. +
  61270. +void try_window(int window,
  61271. +                register int pos);
  61272. +
  61273. +int try_window_id(int window);
  61274. +
  61275. +void redisplay_region(struct buffer * buf,
  61276. +                      int start,
  61277. +                      int end);
  61278. +
  61279. +unsigned int * copy_part_of_rope(int f,
  61280. +                                 register unsigned int * to,
  61281. +                                 register unsigned int * s,
  61282. +                                 int * from,
  61283. +                                 int len,
  61284. +
  61285. +                          int face);
  61286. +
  61287. +unsigned int fix_glyph(int f,
  61288. +                       unsigned int glyph,
  61289. +                       int cface);
  61290. +
  61291. +extern struct position val_display_text_line;
  61292. +
  61293. +struct position * display_text_line(struct window * w,
  61294. +                                    int start,
  61295. +                                    int vpos,
  61296. +                                    int hpos,
  61297. +                                    int taboffset);
  61298. +
  61299. +void display_menu_bar(struct window * w);
  61300. +
  61301. +void display_mode_line(struct window * w);
  61302. +
  61303. +int display_mode_element(struct window * w,
  61304. +                         register int vpos,
  61305. +                         register int hpos,
  61306. +                         int depth,
  61307. +                         int minendcol,
  61308. +                         register int maxendcol
  61309. +,
  61310. +                         register int elt);
  61311. +
  61312. +extern const char far lots_of_dashes[141];
  61313. +
  61314. +char * decode_mode_spec(struct window * w,
  61315. +                        register int c,
  61316. +                        register int maxwidth);
  61317. +
  61318. +int display_count_lines(int from,
  61319. +                        int limit,
  61320. +                        int n,
  61321. +                        int * pos_ptr);
  61322. +
  61323. +int display_string(struct window * w,
  61324. +                   int vpos,
  61325. +                   unsigned char * string,
  61326. +                   int length,
  61327. +                   int hpos,
  61328. +                   unsigned int truncate,
  61329. +                   int obey_window_width,
  61330. +
  61331. +                  int mincol,
  61332. +                   int maxcol);
  61333. +
  61334. +void syms_of_xdisp(void);
  61335. +
  61336. +int init_xdisp(void);
  61337. +
  61338. diff -ru --new-file baseline/fsf/emacs/src/xmakefile amiga/fsf/emacs/src/xmakefile
  61339. --- baseline/fsf/emacs/src/xmakefile    Wed Dec 31 17:00:00 1969
  61340. +++ amiga/fsf/emacs/src/xmakefile    Sun Oct 15 17:13:25 1995
  61341. @@ -0,0 +1,227 @@
  61342. +srcdir=/src
  61343. +VPATH=""
  61344. +CC=sc
  61345. +CPP=/cpp/cpp
  61346. +CFLAGS=
  61347. +LN_S=
  61348. +MAKE=gmake
  61349. +dot = .
  61350. +lispdir = /lisp/
  61351. +libsrc = /lib-src/
  61352. +etc = /etc/
  61353. +shortnamesdir = $(dot)$(dot)/shortnames/
  61354. +cppdir = /cpp/
  61355. +oldXMenudir = $(dot)$(dot)/oldXMenu/
  61356. +lwlibdir = $(dot)$(dot)/lwlib/
  61357. +M_FILE = ${srcdir}/m/amiga.h
  61358. +S_FILE = #${srcdir}/s/amigados.h #CHFIXME: reactivate
  61359. +config_h = config.h $(M_FILE) $(S_FILE)
  61360. +
  61361. +MYCPPFLAGS=def static 
  61362. +LDFLAGS=
  61363. +C_SWITCH_SYSTEM=
  61364. +
  61365. +SHELL=/bin/sh
  61366. +STARTFILES = lib:c.o firstfile.o
  61367. +ALL_CFLAGS=def emacs def HAVE_CONFIG_H $(MYCPPFLAGS) idir ${srcdir}       ${CFLAGS}
  61368. +.c.o:
  61369. +    $(CC) $(CPPFLAGS) $(ALL_CFLAGS) $< OBJNAME=t:$*.o
  61370. +    @copy t:$*.o $*.o
  61371. +    @rm t:$*.o
  61372. +
  61373. +GNULIB_VAR =
  61374. +LD=ld
  61375. +ALL_LDFLAGS =    $(LDFLAGS)
  61376. +amigasrcs=amiga_clipboard.c amiga_tty.c amiga_serial.c \
  61377. +    amiga_screen.c amiga_menu.c amiga_malloc.c \
  61378. +        amiga_rexx.c simplerexx.c amiga_term.c amiga_fns.c #amiga_select.c
  61379. +srcs=    dispnew.c frame.c scroll.c xdisp.c window.c     term.c cm.c emacs.c keyboard.c macros.c keymap.c amiga_sysdep.c     buffer.c filelock.c insdel.c marker.c      minibuf.c fileio.c dired.c filemode.c     cmds.c casetab.c casefiddle.c indent.c search.c regex.c undo.c     alloc.c data.c doc.c editfns.c callint.c     eval.c floatfns.c fns.c print.c lread.c     abbrev.c syntax.c amiga_dump.c mocklisp.c bytecode.c     process.c callproc.c     doprnt.c getloadavg.c ${amigasrcs}
  61380. +amigaobj=amiga_clipboard.o amiga_tty.o amiga_serial.o \
  61381. +    amiga_screen.o amiga_menu.o amiga_malloc.o \
  61382. +        amiga_rexx.o simplerexx.o amiga_term.o amiga_xmenu.o amiga_fns.o
  61383. +obj=    dispnew.o frame.o scroll.o xdisp.o window.o     term.o cm.o $(XOBJ)     emacs.o keyboard.o macros.o keymap.o amiga_sysdep.o     buffer.o filelock.o insdel.o marker.o      minibuf.o fileio.o dired.o filemode.o     cmds.o casetab.o casefiddle.o indent.o search.o regex.o undo.o     alloc.o data.o doc.o editfns.o callint.o     eval.o floatfns.o fns.o print.o lread.o     abbrev.o syntax.o amiga_dump.o mocklisp.o bytecode.o     process.o callproc.o     doprnt.o getloadavg.o intervals.o textprop.o ${amigaobj}
  61384. +SOME_MACHINE_OBJECTS = #${amigaobj}
  61385. +termcapobj = termcap.o tparam.o
  61386. +mallocobj = #malloc.o
  61387. +allocaobj = oldalloca.o
  61388. +widgetobj=
  61389. +
  61390. +otherobj= $(termcapobj) lastfile.o $(mallocobj) $(allocaobj) $(widgetobj)
  61391. +lisp=     ${lispdir}abbrev.elc     ${lispdir}buff-menu.elc     ${lispdir}byte-run.elc     ${lispdir}c-mode.elc     ${lispdir}files.elc     ${lispdir}fill.elc                    ${lispdir}help.elc     ${lispdir}indent.elc     ${lispdir}isearch.elc     ${lispdir}lisp-mode.elc     ${lispdir}lisp.elc     ${lispdir}loaddefs.el     ${lispdir}map-ynp.elc     ${lispdir}page.elc     ${lispdir}paragraphs.elc     ${lispdir}paths.el     ${lispdir}register.elc     ${lispdir}replace.elc     ${lispdir}simple.elc     ${lispdir}startup.el     ${lispdir}subr.elc     ${lispdir}text-mode.elc     ${lispdir}vc-hooks.elc               ${lispdir}window.elc     ${lispdir}version.el
  61392. +LIBES = $(LIBX)       -lg $(GNULIB_VAR)  -lc $(GNULIB_VAR)
  61393. +
  61394. +all: emacs
  61395. +
  61396. +emacs: temacs ${etc}DOC ${lisp}
  61397. +    /src/temacs -batch -l loadup dump
  61398. +
  61399. +${etc}DOC: ${libsrc}make-docfile ${obj} ${lisp}
  61400. +    -rm -f ${etc}DOC
  61401. +    ${libsrc}make-docfile -o ${etc}DOC -f < <
  61402. +${obj}
  61403. +${SOME_MACHINE_OBJECTS}       
  61404. +${lisp} 
  61405. +${amigalisp}
  61406. +< 
  61407. +
  61408. +${libsrc}make-docfile:
  61409. +    sc link {libsrc}make-docfile.c
  61410. +
  61411. +temacs:  $(LOCALCPP) $(SHORT) $(STARTFILES) $(OLDXMENU) ${obj} ${otherobj}   prefix-args
  61412. +    slink <with <
  61413. +from ${STARTFILES} $(obj)
  61414. +$(otherobj)
  61415. +to t:temacs
  61416. +lib     //unix/src/unix.lib lib:scmieee.lib lib:sc.lib lib:amiga.lib
  61417. +addsym
  61418. +batch
  61419. +<
  61420. +    copy t:temacs temacs
  61421. +    rm t:temacs
  61422. +
  61423. +protos.h: amiga_fns_protos.h amiga_screen_protos.h amiga_menu_protos.h amiga_tty_protos.h \
  61424. +    amiga_term_protos.h amiga_xmenu_protos.h
  61425. +
  61426. +amiga_fns_protos.h: amiga_fns.c
  61427. +    $(CC) $(ALL_CFLAGS) DEF GENPROTO GENPROTO NOGenProtoTypeDEFs $<
  61428. +amiga_menu_protos.h: amiga_menu.c
  61429. +    $(CC) $(ALL_CFLAGS) DEF GENPROTO GENPROTO NOGenProtoTypeDEFs $<
  61430. +amiga_screen_protos.h: amiga_screen.c
  61431. +    $(CC) $(ALL_CFLAGS) DEF GENPROTO GENPROTO NOGenProtoTypeDEFs $<
  61432. +amiga_term_protos.h: amiga_term.c
  61433. +    $(CC) $(ALL_CFLAGS) DEF GENPROTO GENPROTO NOGenProtoTypeDEFs $<
  61434. +amiga_tty_protos.h: amiga_tty.c
  61435. +    $(CC) $(ALL_CFLAGS) DEF GENPROTO GENPROTO NOGenProtoTypeDEFs $<
  61436. +amiga_xmenu_protos.h: amiga_xmenu.c
  61437. +    $(CC) $(ALL_CFLAGS) DEF GENPROTO GENPROTO NOGenProtoTypeDEFs $<
  61438. +
  61439. +
  61440. +amiga_malloc.o: amiga_malloc.c amiga.h config.h  
  61441. +        $(CC) $(ALL_CFLAGS) parms=both amiga_malloc.c
  61442. +
  61443. +amiga_select.o: amiga_select.c 
  61444. +        $(CC) $(ALL_CFLAGS) parms=both amiga_select.c
  61445. +
  61446. +prefix-args: prefix-args.c $(config_h)
  61447. +    $(CC) $(ALL_CFLAGS) ${srcdir}/prefix-args.c LINK to prefix-args
  61448. +
  61449. +CPP = $(CC) -E
  61450. +paths.h: paths.h.in
  61451. +    @echo "The file paths.h needs to be set up from paths.h.in."
  61452. +    @echo "Consult the file \`INSTALL' for instructions for building Emacs."
  61453. +    exit 1
  61454. +config.h: config.h.in
  61455. +    @echo "The file config.h needs to be set up from config.h.in."
  61456. +    @echo "Consult the file \`INSTALL' for instructions for building Emacs."
  61457. +    exit 1
  61458. +alloca.o : alloca.s $(config_h)
  61459. +    cp ${srcdir}/alloca.s allocatem.c
  61460. +    $(CPP) $(CPPFLAGS) $(ALL_CFLAGS) allocatem.c |     sed -e 's/ //' -e 's/^#.*//' |     sed -n -e '/^..*$$/p' > allocax.s
  61461. +    -rm -f alloca.o
  61462. +    $(CC) -c allocax.s
  61463. +    mv allocax.o alloca.o
  61464. +    rm allocax.s allocatem.c
  61465. +abbrev.o : abbrev.c buffer.h commands.h $(config_h)
  61466. +buffer.o : buffer.c buffer.h commands.h window.h     blockinput.h $(config_h)
  61467. +callint.o : callint.c window.h commands.h buffer.h mocklisp.h    keyboard.h $(config_h)
  61468. +callproc.o : callproc.c paths.h buffer.h commands.h $(config_h)     process.h systty.h syssignal.h
  61469. +casefiddle.o : casefiddle.c syntax.h commands.h buffer.h $(config_h)
  61470. +casetab.o : casetab.c buffer.h $(config_h)
  61471. +cm.o : cm.c cm.h termhooks.h $(config_h)
  61472. +cmds.o : cmds.c syntax.h buffer.h commands.h $(config_h)
  61473. +pre-crt0.o : pre-crt0.c
  61474. +crt0.o : crt0.c $(config_h)
  61475. +    $(CC) -c $(ALL_CFLAGS)   ${srcdir}/crt0.c
  61476. +dired.o : dired.c commands.h buffer.h $(config_h) regex.h
  61477. +dispnew.o : dispnew.c commands.h frame.h window.h buffer.h dispextern.h    termchar.h termopts.h termhooks.h cm.h disptab.h systty.h systime.h $(config_h)
  61478. +doc.o : doc.c $(config_h) paths.h buffer.h keyboard.h
  61479. +doprnt.o : doprnt.c
  61480. +editfns.o : editfns.c window.h buffer.h systime.h  $(config_h)
  61481. +emacs.o : emacs.c commands.h systty.h syssignal.h process.h  $(config_h)
  61482. +fileio.o : fileio.c window.h buffer.h systime.h  $(config_h)
  61483. +filelock.o : filelock.c buffer.h paths.h $(config_h)
  61484. +filemode.o : filemode.c  $(config_h)
  61485. +getloadavg.o : getloadavg.c $(config_h)
  61486. +indent.o : indent.c frame.h window.h indent.h buffer.h $(config_h) termchar.h    termopts.h disptab.h
  61487. +insdel.o : insdel.c window.h buffer.h  blockinput.h $(config_h)
  61488. +keyboard.o : keyboard.c termchar.h termhooks.h termopts.h buffer.h    commands.h frame.h window.h macros.h disptab.h keyboard.h syssignal.h    systty.h systime.h dispextern.h intervals.h blockinput.h $(config_h)
  61489. +keymap.o : keymap.c buffer.h commands.h keyboard.h termhooks.h blockinput.h    $(config_h)
  61490. +lastfile.o : lastfile.c  $(config_h)
  61491. +macros.o : macros.c window.h buffer.h commands.h macros.h $(config_h)
  61492. +malloc.o : malloc.c $(config_h)
  61493. +gmalloc.o : gmalloc.c $(config_h)
  61494. +ralloc.o : ralloc.c $(config_h)
  61495. +vm-limit.o : vm-limit.c mem-limits.h $(config_h)
  61496. +marker.o : marker.c buffer.h $(config_h)
  61497. +minibuf.o : minibuf.c syntax.h dispextern.h frame.h window.h    buffer.h commands.h $(config_h)
  61498. +mocklisp.o : mocklisp.c buffer.h $(config_h)
  61499. +process.o : process.c process.h buffer.h window.h termhooks.h termopts.h    commands.h syssignal.h systime.h systty.h syswait.h frame.h $(config_h)
  61500. +regex.o : regex.c syntax.h buffer.h $(config_h) regex.h
  61501. +frame.o : frame.c xterm.h window.h frame.h termhooks.h commands.h keyboard.h    buffer.h $(config_h)
  61502. +scroll.o : scroll.c termchar.h $(config_h) dispextern.h frame.h
  61503. +search.o : search.c regex.h commands.h buffer.h syntax.h blockinput.h $(config_h)
  61504. +syntax.o : syntax.c syntax.h buffer.h commands.h $(config_h)
  61505. +sysdep.o : sysdep.c $(config_h) dispextern.h termhooks.h termchar.h termopts.h    frame.h syssignal.h systty.h systime.h syswait.h blockinput.h window.h
  61506. +term.o : term.c termchar.h termhooks.h termopts.h $(config_h) cm.h frame.h    disptab.h
  61507. +termcap.o : termcap.c $(config_h)
  61508. +terminfo.o : terminfo.c $(config_h)
  61509. +tparam.o : tparam.c $(config_h)
  61510. +undo.o : undo.c buffer.h commands.h $(config_h)
  61511. +UNEXEC_ALIAS=unexec.o
  61512. +$(UNEXEC_ALIAS) : unexec.c $(config_h)
  61513. +widget.o : widget.c xterm.h frame.h dispextern.h widgetprv.h $(config_h)
  61514. +window.o : window.c indent.h commands.h frame.h window.h buffer.h termchar.h    termhooks.h disptab.h keyboard.h $(config_h)
  61515. +xdisp.o : xdisp.c macros.h commands.h indent.h buffer.h dispextern.h    termchar.h frame.h window.h disptab.h termhooks.h $(config_h)
  61516. +xfaces.o : xfaces.c dispextern.h frame.h xterm.h buffer.h blockinput.h    window.h $(config_h)
  61517. +xfns.o : xfns.c buffer.h frame.h window.h keyboard.h xterm.h    blockinput.h $(config_h)
  61518. +xmenu.o : xmenu.c xterm.h window.h frame.h keyboard.h blockinput.h $(config_h)
  61519. +xterm.o : xterm.c xterm.h termhooks.h termopts.h termchar.h window.h   dispextern.h frame.h disptab.h blockinput.h systime.h syssignal.h   gnu.h sink.h sinkmask.h $(config_h)
  61520. +xselect.o : xselect.c dispextern.h frame.h xterm.h blockinput.h $(config_h)
  61521. +xrdb.o : xrdb.c $(config_h)
  61522. +hftctl.o : hftctl.c $(config_h)
  61523. +alloc.o : alloc.c frame.h window.h buffer.h  puresize.h syssignal.h
  61524. +alloc.o : blockinput.h $(config_h)
  61525. +bytecode.o : bytecode.c buffer.h $(config_h)
  61526. +data.o : data.c buffer.h puresize.h syssignal.h $(config_h)
  61527. +eval.o : eval.c commands.h keyboard.h blockinput.h $(config_h)
  61528. +floatfns.o : floatfns.c $(config_h)
  61529. +fns.o : fns.c commands.h $(config_h) frame.h buffer.h keyboard.h
  61530. +print.o : print.c process.h frame.h window.h buffer.h $(config_h)
  61531. +lread.o : lread.c commands.h keyboard.h buffer.h paths.h $(config_h)  termhooks.h
  61532. +textprop.o : textprop.c buffer.h intervals.h $(config_h)
  61533. +intervals.o : intervals.c buffer.h intervals.h puresize.h $(config_h)
  61534. +sunfns.o  : sunfns.c buffer.h $(config_h)
  61535. +amiga_dump.o: amiga_dump.c frame.h
  61536. +amiga_menu.o: amiga_menu.c frame.h
  61537. +amiga_screen.o: amiga_screen.c frame.h
  61538. +amiga_term.o: amiga_term.c frame.h
  61539. +amiga_tty.o: amiga_tty.c frame.h
  61540. +${libsrc}emacstool: ${libsrc}emacstool.c
  61541. +    cd ${libsrc}; ${MAKE} ${MFLAGS} emacstool
  61542. +mostlyclean:
  61543. +    rm -f temacs prefix-args core \#* *.o libXMenu11.a liblw.a
  61544. +    rm -f ../etc/DOC
  61545. +clean: mostlyclean
  61546. +    rm -f emacs-* emacs
  61547. +distclean: clean
  61548. +    rm -f paths.h config.h Makefile Makefile.in ../etc/DOC-*
  61549. +realclean: distclean
  61550. +    rm -f TAGS
  61551. +versionclean:
  61552. +    -rm -f emacs emacs-* ../etc/DOC*
  61553. +extraclean: distclean
  61554. +    -rm -f *~ \#* m/?*~ s/?*~
  61555. +SOURCES = *.[ch] [sm]/?* COPYING ymakefile     config.h.in README COPYING ChangeLog vms.pp-trans
  61556. +unlock:
  61557. +    chmod u+w $(SOURCES)
  61558. +relock:
  61559. +    chmod -w $(SOURCES)
  61560. +    chmod +w paths.h
  61561. +ctagsfiles = [a-zA-Z]*.h [a-zA-Z]*.c
  61562. +lisptagsfiles = ../lisp/[a-zA-Z]*.el ../lisp/term/[a-zA-Z]*.el
  61563. +TAGS: $(ctagsfiles)
  61564. +    ../lib-src/etags --include=../lisp/TAGS $(ctagsfiles)
  61565. +../lisp/TAGS: $(lisptagsfiles)
  61566. +    cd ../lisp; $(MAKE) TAGS
  61567. +tags: TAGS ../lisp/TAGS
  61568. +.PHONY: tags
  61569. diff -ru --new-file baseline/fsf/emacs/src/xmakefile.test amiga/fsf/emacs/src/xmakefile.test
  61570. --- baseline/fsf/emacs/src/xmakefile.test    Wed Dec 31 17:00:00 1969
  61571. +++ amiga/fsf/emacs/src/xmakefile.test    Sun Oct 15 17:13:27 1995
  61572. @@ -0,0 +1,172 @@
  61573. +srcdir=/src
  61574. +VPATH=""
  61575. +CC=sc
  61576. +CPP=/cpp/cpp
  61577. +CFLAGS=
  61578. +LN_S=
  61579. +MAKE=gmake
  61580. +dot = .
  61581. +lispdir = ${srcdir}/$(dot)$(dot)/lisp/
  61582. +libsrc = $(dot)$(dot)/lib-src/
  61583. +etc = $(dot)$(dot)/etc/
  61584. +shortnamesdir = $(dot)$(dot)/shortnames/
  61585. +cppdir = $(dot)$(dot)/cpp/
  61586. +oldXMenudir = $(dot)$(dot)/oldXMenu/
  61587. +lwlibdir = $(dot)$(dot)/lwlib/
  61588. +M_FILE = ${srcdir}/m/m-amiga.h
  61589. +S_FILE = ${srcdir}/s/s-amigados.h
  61590. +config_h = config.h $(M_FILE) $(S_FILE)
  61591. +/* From here on, comments must be done in C syntax.  */
  61592. +CPPFLAGS=
  61593. +LDFLAGS=
  61594. +C_SWITCH_SYSTEM=
  61595. +/* just to be sure the sh is used */
  61596. +SHELL=/bin/sh
  61597. +/* Use HAVE_X11 as an alias for X11 in this file
  61598. +to avoid problems with X11 as a subdirectory name
  61599. +in -I and other such options which pass through this file. */
  61600. +/* On some machines #define register is done in config;
  61601. +don't let it interfere with this file.  */
  61602. +STARTFILES = crt0.o
  61603. +ALL_CFLAGS=-Demacs -DHAVE_CONFIG_H $(MYCPPFLAG) -I. -I${srcdir}       ${CFLAGS}
  61604. +.c.o:
  61605. +    $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<
  61606. +GNULIB_VAR =
  61607. +LD=ld
  61608. +ALL_LDFLAGS =    $(LDFLAGS)
  61609. +obj=    dispnew.o frame.o scroll.o xdisp.o window.o     term.o cm.o $(XOBJ)     emacs.o keyboard.o macros.o keymap.o sysdep.o     buffer.o filelock.o insdel.o marker.o      minibuf.o fileio.o dired.o filemode.o     cmds.o casetab.o casefiddle.o indent.o search.o regex.o undo.o     alloc.o data.o doc.o editfns.o callint.o     eval.o floatfns.o fns.o print.o lread.o     abbrev.o syntax.o unexec.o mocklisp.o bytecode.o     process.o callproc.o     doprnt.o getloadavg.o
  61610. +SOME_MACHINE_OBJECTS = sunfns.o
  61611. +termcapobj = termcap.o tparam.o
  61612. +mallocobj = malloc.o
  61613. +allocaobj = alloca.o
  61614. +widgetobj=
  61615. +otherobj= $(termcapobj) lastfile.o $(mallocobj) $(allocaobj) $(widgetobj)
  61616. +lisp=     ${lispdir}abbrev.elc     ${lispdir}buff-menu.elc     ${lispdir}byte-run.elc     ${lispdir}c-mode.elc     ${lispdir}files.elc     ${lispdir}fill.elc                    ${lispdir}help.elc     ${lispdir}indent.elc     ${lispdir}isearch.elc     ${lispdir}lisp-mode.elc     ${lispdir}lisp.elc     ${lispdir}loaddefs.el     ${lispdir}map-ynp.elc     ${lispdir}page.elc     ${lispdir}paragraphs.elc     ${lispdir}paths.el     ${lispdir}register.elc     ${lispdir}replace.elc     ${lispdir}simple.elc     ${lispdir}startup.elc     ${lispdir}subr.elc     ${lispdir}text-mode.elc     ${lispdir}vc-hooks.elc               ${lispdir}window.elc     ${lispdir}version.el
  61617. +LIBES = $(LIBX)       -lg $(GNULIB_VAR)  -lc $(GNULIB_VAR)
  61618. +all: emacs
  61619. +emacs: temacs ${etc}DOC ${lisp}
  61620. +    ./temacs -batch -l loadup dump
  61621. +${etc}DOC: ${libsrc}make-docfile ${obj} ${lisp}
  61622. +    -rm -f ${etc}DOC
  61623. +    ${libsrc}make-docfile -d ${srcdir} ${obj} ${SOME_MACHINE_OBJECTS}       ${lisp} > ${etc}DOC
  61624. +${libsrc}make-docfile:
  61625. +    cd ${libsrc}; ${MAKE} ${MFLAGS} make-docfile
  61626. +temacs:  $(LOCALCPP) $(SHORT) $(STARTFILES) $(OLDXMENU) ${obj} ${otherobj}   prefix-args
  61627. +    $(LD) ${STARTFLAGS} ${ALL_LDFLAGS}     -o temacs ${STARTFILES} ${obj} ${otherobj}        ${LIBES}
  61628. +prefix-args: prefix-args.c $(config_h)
  61629. +    $(CC) $(ALL_CFLAGS) ${srcdir}/prefix-args.c -o prefix-args
  61630. +CPP = $(CC) -E
  61631. +paths.h: paths.h.in
  61632. +    @echo "The file paths.h needs to be set up from paths.h.in."
  61633. +    @echo "Consult the file \`INSTALL' for instructions for building Emacs."
  61634. +    exit 1
  61635. +config.h: config.h.in
  61636. +    @echo "The file config.h needs to be set up from config.h.in."
  61637. +    @echo "Consult the file \`INSTALL' for instructions for building Emacs."
  61638. +    exit 1
  61639. +alloca.o : alloca.s $(config_h)
  61640. +    cp ${srcdir}/alloca.s allocatem.c
  61641. +    $(CPP) $(CPPFLAGS) $(ALL_CFLAGS) allocatem.c |     sed -e 's/ //' -e 's/^#.*//' |     sed -n -e '/^..*$$/p' > allocax.s
  61642. +    -rm -f alloca.o
  61643. +    $(CC) -c allocax.s
  61644. +    mv allocax.o alloca.o
  61645. +    rm allocax.s allocatem.c
  61646. +abbrev.o : abbrev.c buffer.h commands.h $(config_h)
  61647. +buffer.o : buffer.c buffer.h commands.h window.h     blockinput.h $(config_h)
  61648. +callint.o : callint.c window.h commands.h buffer.h mocklisp.h    keyboard.h $(config_h)
  61649. +callproc.o : callproc.c paths.h buffer.h commands.h $(config_h)     process.h systty.h syssignal.h
  61650. +casefiddle.o : casefiddle.c syntax.h commands.h buffer.h $(config_h)
  61651. +casetab.o : casetab.c buffer.h $(config_h)
  61652. +cm.o : cm.c cm.h termhooks.h $(config_h)
  61653. +cmds.o : cmds.c syntax.h buffer.h commands.h $(config_h)
  61654. +pre-crt0.o : pre-crt0.c
  61655. +crt0.o : crt0.c $(config_h)
  61656. +    $(CC) -c $(ALL_CFLAGS)   ${srcdir}/crt0.c
  61657. +dired.o : dired.c commands.h buffer.h $(config_h) regex.h
  61658. +dispnew.o : dispnew.c commands.h frame.h window.h buffer.h dispextern.h    termchar.h termopts.h termhooks.h cm.h disptab.h systty.h systime.h $(config_h)
  61659. +doc.o : doc.c $(config_h) paths.h buffer.h keyboard.h
  61660. +doprnt.o : doprnt.c
  61661. +editfns.o : editfns.c window.h buffer.h systime.h  $(config_h)
  61662. +emacs.o : emacs.c commands.h systty.h syssignal.h process.h  $(config_h)
  61663. +fileio.o : fileio.c window.h buffer.h systime.h  $(config_h)
  61664. +filelock.o : filelock.c buffer.h paths.h $(config_h)
  61665. +filemode.o : filemode.c  $(config_h)
  61666. +getloadavg.o : getloadavg.c $(config_h)
  61667. +indent.o : indent.c frame.h window.h indent.h buffer.h $(config_h) termchar.h    termopts.h disptab.h
  61668. +insdel.o : insdel.c window.h buffer.h  blockinput.h $(config_h)
  61669. +keyboard.o : keyboard.c termchar.h termhooks.h termopts.h buffer.h    commands.h frame.h window.h macros.h disptab.h keyboard.h syssignal.h    systty.h systime.h dispextern.h intervals.h blockinput.h $(config_h)
  61670. +keymap.o : keymap.c buffer.h commands.h keyboard.h termhooks.h blockinput.h    $(config_h)
  61671. +lastfile.o : lastfile.c  $(config_h)
  61672. +macros.o : macros.c window.h buffer.h commands.h macros.h $(config_h)
  61673. +malloc.o : malloc.c $(config_h)
  61674. +gmalloc.o : gmalloc.c $(config_h)
  61675. +ralloc.o : ralloc.c $(config_h)
  61676. +vm-limit.o : vm-limit.c mem-limits.h $(config_h)
  61677. +marker.o : marker.c buffer.h $(config_h)
  61678. +minibuf.o : minibuf.c syntax.h dispextern.h frame.h window.h    buffer.h commands.h $(config_h)
  61679. +mocklisp.o : mocklisp.c buffer.h $(config_h)
  61680. +process.o : process.c process.h buffer.h window.h termhooks.h termopts.h    commands.h syssignal.h systime.h systty.h syswait.h frame.h $(config_h)
  61681. +regex.o : regex.c syntax.h buffer.h $(config_h) regex.h
  61682. +frame.o : frame.c xterm.h window.h frame.h termhooks.h commands.h keyboard.h    buffer.h $(config_h)
  61683. +scroll.o : scroll.c termchar.h $(config_h) dispextern.h frame.h
  61684. +search.o : search.c regex.h commands.h buffer.h syntax.h blockinput.h $(config_h)
  61685. +syntax.o : syntax.c syntax.h buffer.h commands.h $(config_h)
  61686. +sysdep.o : sysdep.c $(config_h) dispextern.h termhooks.h termchar.h termopts.h    frame.h syssignal.h systty.h systime.h syswait.h blockinput.h window.h
  61687. +term.o : term.c termchar.h termhooks.h termopts.h $(config_h) cm.h frame.h    disptab.h
  61688. +termcap.o : termcap.c $(config_h)
  61689. +terminfo.o : terminfo.c $(config_h)
  61690. +tparam.o : tparam.c $(config_h)
  61691. +undo.o : undo.c buffer.h commands.h $(config_h)
  61692. +UNEXEC_ALIAS=unexec.o
  61693. +$(UNEXEC_ALIAS) : unexec.c $(config_h)
  61694. +widget.o : widget.c xterm.h frame.h dispextern.h widgetprv.h $(config_h)
  61695. +window.o : window.c indent.h commands.h frame.h window.h buffer.h termchar.h    termhooks.h disptab.h keyboard.h $(config_h)
  61696. +xdisp.o : xdisp.c macros.h commands.h indent.h buffer.h dispextern.h    termchar.h frame.h window.h disptab.h termhooks.h $(config_h)
  61697. +xfaces.o : xfaces.c dispextern.h frame.h xterm.h buffer.h blockinput.h    window.h $(config_h)
  61698. +xfns.o : xfns.c buffer.h frame.h window.h keyboard.h xterm.h    blockinput.h $(config_h)
  61699. +xmenu.o : xmenu.c xterm.h window.h frame.h keyboard.h blockinput.h $(config_h)
  61700. +xterm.o : xterm.c xterm.h termhooks.h termopts.h termchar.h window.h   dispextern.h frame.h disptab.h blockinput.h systime.h syssignal.h   gnu.h sink.h sinkmask.h $(config_h)
  61701. +xselect.o : xselect.c dispextern.h frame.h xterm.h blockinput.h $(config_h)
  61702. +xrdb.o : xrdb.c $(config_h)
  61703. +hftctl.o : hftctl.c $(config_h)
  61704. +alloc.o : alloc.c frame.h window.h buffer.h  puresize.h syssignal.h
  61705. +alloc.o : blockinput.h $(config_h)
  61706. +bytecode.o : bytecode.c buffer.h $(config_h)
  61707. +data.o : data.c buffer.h puresize.h syssignal.h $(config_h)
  61708. +eval.o : eval.c commands.h keyboard.h blockinput.h $(config_h)
  61709. +floatfns.o : floatfns.c $(config_h)
  61710. +fns.o : fns.c commands.h $(config_h) frame.h buffer.h keyboard.h
  61711. +print.o : print.c process.h frame.h window.h buffer.h $(config_h)
  61712. +lread.o : lread.c commands.h keyboard.h buffer.h paths.h $(config_h)  termhooks.h
  61713. +textprop.o : textprop.c buffer.h intervals.h $(config_h)
  61714. +intervals.o : intervals.c buffer.h intervals.h puresize.h $(config_h)
  61715. +sunfns.o  : sunfns.c buffer.h $(config_h)
  61716. +${libsrc}emacstool: ${libsrc}emacstool.c
  61717. +    cd ${libsrc}; ${MAKE} ${MFLAGS} emacstool
  61718. +mostlyclean:
  61719. +    rm -f temacs prefix-args core \#* *.o libXMenu11.a liblw.a
  61720. +    rm -f ../etc/DOC
  61721. +clean: mostlyclean
  61722. +    rm -f emacs-* emacs
  61723. +distclean: clean
  61724. +    rm -f paths.h config.h Makefile Makefile.in ../etc/DOC-*
  61725. +realclean: distclean
  61726. +    rm -f TAGS
  61727. +versionclean:
  61728. +    -rm -f emacs emacs-* ../etc/DOC*
  61729. +extraclean: distclean
  61730. +    -rm -f *~ \#* m/?*~ s/?*~
  61731. +SOURCES = *.[ch] [sm]/?* COPYING ymakefile     config.h.in README COPYING ChangeLog vms.pp-trans
  61732. +unlock:
  61733. +    chmod u+w $(SOURCES)
  61734. +relock:
  61735. +    chmod -w $(SOURCES)
  61736. +    chmod +w paths.h
  61737. +ctagsfiles = [a-zA-Z]*.h [a-zA-Z]*.c
  61738. +lisptagsfiles = ../lisp/[a-zA-Z]*.el ../lisp/term/[a-zA-Z]*.el
  61739. +TAGS: $(ctagsfiles)
  61740. +    ../lib-src/etags --include=../lisp/TAGS $(ctagsfiles)
  61741. +../lisp/TAGS: $(lisptagsfiles)
  61742. +    cd ../lisp; $(MAKE) TAGS
  61743. +tags: TAGS ../lisp/TAGS
  61744. +.PHONY: tags
  61745. diff -ru --new-file baseline/fsf/emacs/src/ymakefile amiga/fsf/emacs/src/ymakefile
  61746. --- baseline/fsf/emacs/src/ymakefile    Wed Dec 31 17:00:00 1969
  61747. +++ amiga/fsf/emacs/src/ymakefile    Sun Oct 15 17:13:29 1995
  61748. @@ -0,0 +1,915 @@
  61749. +# Makefile for GNU Emacs.
  61750. +# Copyright (C) 1985, 1987, 1988, 1993, 1994 Free Software Foundation, Inc.
  61751. +
  61752. +# This file is part of GNU Emacs.
  61753. +
  61754. +# GNU Emacs is free software; you can redistribute it and/or modify
  61755. +# it under the terms of the GNU General Public License as published by
  61756. +# the Free Software Foundation; either version 2, or (at your option)
  61757. +# any later version.
  61758. +
  61759. +# GNU Emacs is distributed in the hope that it will be useful,
  61760. +# but WITHOUT ANY WARRANTY; without even the implied warranty of
  61761. +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  61762. +# GNU General Public License for more details.
  61763. +
  61764. +# You should have received a copy of the GNU General Public License
  61765. +# along with GNU Emacs; see the file COPYING.  If not, write to
  61766. +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  61767. +
  61768. +# Here are the things that we expect ../configure to edit.
  61769. +srcdir=/src
  61770. +VPATH=""
  61771. +CC=sc
  61772. +CPP=/cpp/cpp
  61773. +CFLAGS=
  61774. +LN_S=
  61775. +# Substitute an assignment for the MAKE variable, because
  61776. +# BSD doesn't have it as a default.
  61777. +MAKE=gmake
  61778. +
  61779. +# On Xenix and the IBM RS6000, double-dot gets screwed up.
  61780. +dot = .
  61781. +lispdir = ${srcdir}/$(dot)$(dot)/lisp/
  61782. +libsrc = $(dot)$(dot)/lib-src/
  61783. +etc = $(dot)$(dot)/etc/
  61784. +shortnamesdir = $(dot)$(dot)/shortnames/
  61785. +cppdir = $(dot)$(dot)/cpp/
  61786. +oldXMenudir = $(dot)$(dot)/oldXMenu/
  61787. +lwlibdir = $(dot)$(dot)/lwlib/
  61788. +
  61789. +# Configuration files for .o files to depend on.
  61790. +M_FILE = ${srcdir}/m/m-amiga.h
  61791. +S_FILE = ${srcdir}/s/s-amigados.h
  61792. +config_h = config.h $(M_FILE) $(S_FILE)
  61793. +
  61794. +# ========================== start of cpp stuff ======================= */
  61795. +/* From here on, comments must be done in C syntax.  */
  61796. +
  61797. +CPPFLAGS=
  61798. +LDFLAGS=
  61799. +C_SWITCH_SYSTEM=
  61800. +
  61801. +/* just to be sure the sh is used */
  61802. +SHELL=/bin/sh
  61803. +
  61804. +#define NO_SHORTNAMES
  61805. +#define THIS_IS_YMAKEFILE
  61806. +#define NOT_C_CODE
  61807. +#include "config.h"
  61808. +
  61809. +/* Use HAVE_X11 as an alias for X11 in this file
  61810. +   to avoid problems with X11 as a subdirectory name
  61811. +   in -I and other such options which pass through this file. */
  61812. +
  61813. +#ifdef X11
  61814. +#define HAVE_X11
  61815. +#undef X11
  61816. +#endif
  61817. +
  61818. +/* On some machines #define register is done in config;
  61819. +   don't let it interfere with this file.  */
  61820. +#undef register
  61821. +
  61822. +/* On some systems we may not be able to use the system make command. */
  61823. +#ifdef MAKE_COMMAND
  61824. +MAKE = MAKE_COMMAND
  61825. +#endif
  61826. +
  61827. +#ifdef C_COMPILER
  61828. +CC = C_COMPILER
  61829. +#endif
  61830. +
  61831. +/* GNU libc requires ORDINARY_LINK so that its own crt0 is used.
  61832. +   Linux is an exception because it uses a funny variant of GNU libc.  */
  61833. +#ifdef __GNU_LIBRARY__
  61834. +#ifndef LINUX
  61835. +#define ORDINARY_LINK
  61836. +#endif
  61837. +#endif
  61838. +
  61839. +/* Some machines don't find the standard C libraries in the usual place.  */
  61840. +#ifndef ORDINARY_LINK
  61841. +#ifndef LIB_STANDARD
  61842. +#define LIB_STANDARD -lc
  61843. +#endif
  61844. +#else
  61845. +#ifndef LIB_STANDARD
  61846. +#define LIB_STANDARD
  61847. +#endif
  61848. +#endif
  61849. +
  61850. +/* Unless inhibited or changed, use -lg to link for debugging.  */
  61851. +#ifndef LIBS_DEBUG
  61852. +#define LIBS_DEBUG -lg
  61853. +#endif
  61854. +
  61855. +/* Some s/*.h files define this to request special libraries.  */
  61856. +#ifndef LIBS_SYSTEM
  61857. +#define LIBS_SYSTEM
  61858. +#endif
  61859. +
  61860. +/* Some m/*.h files define this to request special libraries.  */
  61861. +#ifndef LIBS_MACHINE
  61862. +#define LIBS_MACHINE
  61863. +#endif
  61864. +
  61865. +#ifndef LIB_MATH
  61866. +# ifdef LISP_FLOAT_TYPE
  61867. +#  define LIB_MATH -lm
  61868. +# else /* ! defined (LISP_FLOAT_TYPE) */
  61869. +#  define LIB_MATH
  61870. +# endif /* ! defined (LISP_FLOAT_TYPE) */
  61871. +#endif /* LIB_MATH */
  61872. +
  61873. +/* Some s/*.h files define this to request special switches in ld.  */
  61874. +#ifndef LD_SWITCH_SYSTEM
  61875. +#if !defined (__GNUC__) && (defined(COFF_ENCAPSULATE) || (defined (BSD) && !defined (COFF)))
  61876. +#define LD_SWITCH_SYSTEM -X
  61877. +#else /* ! defined(COFF_ENCAPSULATE) || (defined (BSD) && !defined (COFF)) */
  61878. +#define LD_SWITCH_SYSTEM
  61879. +#endif /* ! defined(COFF_ENCAPSULATE) || (defined (BSD) && !defined (COFF)) */
  61880. +#endif /* LD_SWITCH_SYSTEM */
  61881. +
  61882. +/* Some m/*.h files define this to request special switches in ld.  */
  61883. +#ifndef LD_SWITCH_MACHINE
  61884. +#define LD_SWITCH_MACHINE
  61885. +#endif
  61886. +
  61887. +/* Some m/*.h files define this to request special switches in cc.  */
  61888. +#ifndef C_SWITCH_MACHINE
  61889. +#define C_SWITCH_MACHINE
  61890. +#endif
  61891. +
  61892. +/* Some s/*.h files define this to request special switches in cc.  */
  61893. +#ifndef C_SWITCH_SYSTEM
  61894. +#define C_SWITCH_SYSTEM
  61895. +#endif
  61896. +
  61897. +/* These macros are for switches specifically related to X Windows.  */
  61898. +#ifndef C_SWITCH_X_MACHINE
  61899. +#define C_SWITCH_X_MACHINE
  61900. +#endif
  61901. +
  61902. +#ifndef C_SWITCH_X_SYSTEM
  61903. +#define C_SWITCH_X_SYSTEM
  61904. +#endif
  61905. +
  61906. +#ifndef C_SWITCH_X_SITE
  61907. +#define C_SWITCH_X_SITE
  61908. +#endif
  61909. +
  61910. +#ifndef LD_SWITCH_X_SITE
  61911. +#define LD_SWITCH_X_SITE
  61912. +#endif
  61913. +
  61914. +#ifndef LD_SWITCH_X_DEFAULT
  61915. +#define LD_SWITCH_X_DEFAULT
  61916. +#endif
  61917. +
  61918. +/* These can be passed in from config.h to define special load and
  61919. +   compile switches needed by individual sites */
  61920. +#ifndef LD_SWITCH_SITE
  61921. +#define LD_SWITCH_SITE
  61922. +#endif
  61923. +
  61924. +#ifndef C_SWITCH_SITE
  61925. +#define C_SWITCH_SITE
  61926. +#endif
  61927. +
  61928. +#ifndef ORDINARY_LINK
  61929. +
  61930. +#ifndef CRT0_COMPILE
  61931. +#define CRT0_COMPILE $(CC) -c $(ALL_CFLAGS) C_SWITCH_ASM 
  61932. +#endif
  61933. +
  61934. +#ifndef START_FILES
  61935. +#ifdef NO_REMAP
  61936. +#ifdef COFF_ENCAPSULATE
  61937. +#define START_FILES pre-crt0.o /usr/local/lib/gcc-crt0.o
  61938. +#else /* ! defined (COFF_ENCAPSULATE) */
  61939. +#define START_FILES pre-crt0.o /lib/crt0.o
  61940. +#endif /* ! defined (COFF_ENCAPSULATE) */
  61941. +#else /* ! defined (NO_REMAP) */
  61942. +#define START_FILES crt0.o
  61943. +#endif /* ! defined (NO_REMAP) */
  61944. +#endif /* START_FILES */
  61945. +STARTFILES = START_FILES
  61946. +
  61947. +#else /* ORDINARY_LINK */
  61948. +
  61949. +/* config.h might want to force START_FILES anyway */
  61950. +#ifdef START_FILES
  61951. +STARTFILES = START_FILES
  61952. +#endif /* START_FILES */
  61953. +
  61954. +#endif /* not ORDINARY_LINK */
  61955. +
  61956. +
  61957. +/* cc switches needed to make `asm' keyword work.
  61958. +   Nothing special needed on most machines.  */
  61959. +#ifndef C_SWITCH_ASM
  61960. +#define C_SWITCH_ASM
  61961. +#endif
  61962. +
  61963. +/* Figure out whether the system cpp can handle long names.
  61964. +   Do it by testing it right now.
  61965. +   If it loses, arrange to use the GNU cpp.  */
  61966. +
  61967. +#define LONGNAMEBBBFOOX
  61968. +#ifdef LONGNAMEBBBARFOOX
  61969. +/* Installed cpp fails to distinguish those names!  */
  61970. +/* Arrange to compile the GNU cpp later on */
  61971. +#define NEED_CPP
  61972. +/* Cause cc to invoke the cpp that comes with Emacs,
  61973. +   which will be in a file named localcpp.  */
  61974. +MYCPPFLAG= -Blocal
  61975. +/* LOCALCPP is the local one or nothing.
  61976. +   CPP is the local one or the standardone.  */
  61977. +LOCALCPP= localcpp
  61978. +#endif /* ! defined (LONGNAMEBBBARFOOX) */
  61979. +
  61980. +#ifdef SHORTNAMES
  61981. +SHORT= shortnames
  61982. +#endif
  61983. +
  61984. +/* DO NOT use -R.  There is a special hack described in lastfile.c
  61985. +   which is used instead.  Some initialized data areas are modified
  61986. +   at initial startup, then labeled as part of the text area when
  61987. +   Emacs is dumped for the first time, and never changed again. */
  61988. +
  61989. +/* -Demacs is needed to make some files produce the correct version
  61990. +   for use in Emacs.
  61991. +
  61992. +   -DHAVE_CONFIG_H is needed for some other files to take advantage of
  61993. +   the information in `config.h'.  */
  61994. +
  61995. +/* C_SWITCH_X_SITE must come before C_SWITCH_X_MACHINE and C_SWITCH_X_SYSTEM
  61996. +   since it may have -I options that should override those two.  */
  61997. +ALL_CFLAGS=-Demacs -DHAVE_CONFIG_H $(MYCPPFLAG) -I. -I${srcdir} C_SWITCH_MACHINE C_SWITCH_SYSTEM C_SWITCH_SITE C_SWITCH_X_SITE C_SWITCH_X_MACHINE C_SWITCH_X_SYSTEM ${CFLAGS}
  61998. +.c.o:
  61999. +    $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<
  62000. +
  62001. +#ifndef LIBX10_MACHINE
  62002. +#define LIBX10_MACHINE
  62003. +#endif
  62004. +
  62005. +#ifndef LIBX11_MACHINE
  62006. +#define LIBX11_MACHINE
  62007. +#endif
  62008. +
  62009. +#ifndef LIBX10_SYSTEM
  62010. +#define LIBX10_SYSTEM
  62011. +#endif
  62012. +
  62013. +#ifndef LIBX11_SYSTEM
  62014. +#define LIBX11_SYSTEM
  62015. +#endif
  62016. +
  62017. +#ifndef LIB_X11_LIB
  62018. +#define LIB_X11_LIB -lX11
  62019. +#endif
  62020. +
  62021. +#ifdef HAVE_X_WINDOWS
  62022. +#ifdef HAVE_X_MENU
  62023. +
  62024. +/* Include xmenu.o in the list of X object files.  */
  62025. +XOBJ= xterm.o xfns.o xfaces.o xmenu.o xselect.o xrdb.o
  62026. +
  62027. +/* The X Menu stuff is present in the X10 distribution, but missing
  62028. +   from X11.  If we have X10, just use the installed library;
  62029. +   otherwise, use our own copy.  */
  62030. +#ifdef HAVE_X11
  62031. +#ifdef USE_X_TOOLKIT
  62032. +OLDXMENU=liblw.a
  62033. +LIBXMENU= $(OLDXMENU)
  62034. +#else /* not USE_X_TOOLKIT */
  62035. +OLDXMENU= libXMenu11.a
  62036. +LIBXMENU= $(OLDXMENU)
  62037. +#endif /* not USE_X_TOOLKIT */
  62038. +#else /* not HAVE_X11 */
  62039. +LIBXMENU= -lXMenu
  62040. +#endif /* not HAVE_X11 */
  62041. +
  62042. +#else /* not HAVE_X_MENU */
  62043. +
  62044. +/* Otherwise, omit xmenu.o from the list of X object files, and
  62045. +   don't worry about the menu library at all.  */
  62046. +XOBJ= xterm.o xfns.o xfaces.o xselect.o xrdb.o
  62047. +LIBXMENU=
  62048. +#endif /* not HAVE_X_MENU */
  62049. +
  62050. +#ifdef USE_X_TOOLKIT
  62051. +#define @X_TOOLKIT_TYPE@
  62052. +#if defined (LUCID) || defined (ATHENA)
  62053. +LIBW= -lXaw
  62054. +#endif
  62055. +#ifdef MOTIF
  62056. +#ifdef LIB_MOTIF
  62057. +LIBW= LIB_MOTIF
  62058. +#else
  62059. +LIBW= -lXm
  62060. +#endif
  62061. +#endif
  62062. +#ifdef OPEN_LOOK
  62063. +LIBW= -lXol
  62064. +#endif
  62065. +
  62066. +#ifdef HAVE_X11XTR6
  62067. +LIBXTR6 = -lSM -lICE
  62068. +#endif
  62069. +
  62070. +LIBXT= $(LIBW) -lXmu -lXt $(LIBXTR6) -lXext
  62071. +#else
  62072. +LIBXT=
  62073. +#endif
  62074. +
  62075. +#ifdef HAVE_X11
  62076. +/* LD_SWITCH_X_DEFAULT comes after everything else that specifies
  62077. +   options for where to find X libraries, but before those libraries.  */
  62078. +LIBX= $(LIBXMENU) LD_SWITCH_X_SITE LD_SWITCH_X_DEFAULT $(LIBXT) LIB_X11_LIB LIBX11_MACHINE LIBX11_SYSTEM
  62079. +#else /* not HAVE_X11 */
  62080. +LIBX= $(LIBXMENU) LD_SWITCH_X_SITE -lX10 LIBX10_MACHINE LIBX10_SYSTEM
  62081. +#endif /* not HAVE_X11 */
  62082. +#endif /* not HAVE_X_WINDOWS */
  62083. +
  62084. +#ifndef ORDINARY_LINK
  62085. +/* Fix linking if compiled with GCC.  */
  62086. +#ifdef __GNUC__
  62087. +
  62088. +#if __GNUC__ > 1
  62089. +
  62090. +#ifdef LINKER
  62091. +#define LINKER_WAS_SPECIFIED
  62092. +#endif
  62093. +
  62094. +/* Versions of GCC >= 2.0 put their library, libgcc.a, in obscure
  62095. +   places that are difficult to figure out at make time.  Fortunately,
  62096. +   these same versions allow you to pass arbitrary flags on to the
  62097. +   linker, so there's no reason not to use it as a linker.
  62098. +
  62099. +   Well, it's not quite perfect.  The `-nostdlib' keeps GCC from
  62100. +   searching for libraries in its internal directories, so we have to
  62101. +   ask GCC explicitly where to find libgcc.a.  */
  62102. +
  62103. +#ifndef LINKER
  62104. +#define LINKER $(CC) -nostdlib
  62105. +#endif
  62106. +
  62107. +#ifndef LIB_GCC
  62108. +/* Ask GCC where to find libgcc.a.  */
  62109. +#define LIB_GCC `$(CC) -print-libgcc-file-name`
  62110. +#endif /* not LIB_GCC */
  62111. +
  62112. +GNULIB_VAR = LIB_GCC
  62113. +
  62114. +#ifndef LINKER_WAS_SPECIFIED
  62115. +/* GCC passes any argument prefixed with -Xlinker directly to the
  62116. +   linker.  See prefix-args.c for an explanation of why we don't do
  62117. +   this with the shell's `for' construct.
  62118. +   Note that some people don't have '.'  in their paths, so we must
  62119. +   use ./prefix-args.  */
  62120. +#define YMF_PASS_LDFLAGS(flags) `./prefix-args -Xlinker flags`
  62121. +#else
  62122. +#define YMF_PASS_LDFLAGS(flags) flags
  62123. +#endif
  62124. +
  62125. +#else /* __GNUC__ < 2 */
  62126. +
  62127. +#ifndef LIB_GCC
  62128. +#define LIB_GCC /usr/local/lib/gcc-gnulib
  62129. +#endif /* not LIB_GCC */
  62130. +GNULIB_VAR = `if [ -f LIB_GCC ] ; then echo LIB_GCC; else echo; fi`
  62131. +#endif /* __GNUC__ < 2 */
  62132. +#else /* not __GNUC__ */
  62133. +GNULIB_VAR = 
  62134. +
  62135. +#endif /* not __GNUC__ */
  62136. +#endif /* not ORDINARY_LINK */
  62137. +
  62138. +/* Specify address for ld to start loading at,
  62139. +   if requested by configuration.  */
  62140. +#ifdef LD_TEXT_START_ADDR
  62141. +STARTFLAGS = -T LD_TEXT_START_ADDR -e __start
  62142. +#endif
  62143. +
  62144. +#ifdef ORDINARY_LINK
  62145. +LD = $(CC)
  62146. +#else
  62147. +#ifdef COFF_ENCAPSULATE
  62148. +LD=$(CC) -nostdlib
  62149. +#else /* not ORDINARY_LINK */
  62150. +#ifdef LINKER
  62151. +LD=LINKER
  62152. +#else /* not LINKER */
  62153. +LD=ld
  62154. +#endif /* not LINKER */
  62155. +#endif /* not COFF_ENCAPSULATE */
  62156. +#endif /* not ORDINARY_LINK */
  62157. +
  62158. +ALL_LDFLAGS = LD_SWITCH_SYSTEM LD_SWITCH_MACHINE LD_SWITCH_SITE $(LDFLAGS)
  62159. +
  62160. +/* A macro which other sections of ymakefile can redefine to munge the
  62161. +   flags before they're passed to LD.  This is helpful if you have
  62162. +   redefined LD to something odd, like "gcc".  */
  62163. +#ifndef YMF_PASS_LDFLAGS
  62164. +#define YMF_PASS_LDFLAGS(flags) flags
  62165. +#endif
  62166. +
  62167. +/* Allow config.h to specify a replacement file for unexec.c.  */
  62168. +#ifndef UNEXEC
  62169. +#define UNEXEC unexec.o
  62170. +#endif
  62171. +#ifndef UNEXEC_SRC
  62172. +#define UNEXEC_SRC unexec.c
  62173. +#endif
  62174. +
  62175. +#ifdef USE_TEXT_PROPERTIES
  62176. +#define INTERVAL_SRC intervals.h
  62177. +#define INTERVAL_OBJ intervals.o textprop.o
  62178. +#else
  62179. +#define INTERVAL_SRC
  62180. +#define INTERVAL_OBJ
  62181. +#endif
  62182. +
  62183. +#ifdef HAVE_GETLOADAVG
  62184. +#define GETLOADAVG_OBJ
  62185. +#else
  62186. +#define GETLOADAVG_OBJ getloadavg.o
  62187. +#endif
  62188. +
  62189. +/* lastfile must follow all files
  62190. +   whose initialized data areas should be dumped as pure by dump-emacs. */
  62191. +obj=    dispnew.o frame.o scroll.o xdisp.o window.o \
  62192. +    term.o cm.o $(XOBJ) \
  62193. +    emacs.o keyboard.o macros.o keymap.o sysdep.o \
  62194. +    buffer.o filelock.o insdel.o marker.o INTERVAL_OBJ \
  62195. +    minibuf.o fileio.o dired.o filemode.o \
  62196. +    cmds.o casetab.o casefiddle.o indent.o search.o regex.o undo.o \
  62197. +    alloc.o data.o doc.o editfns.o callint.o \
  62198. +    eval.o floatfns.o fns.o print.o lread.o \
  62199. +    abbrev.o syntax.o UNEXEC mocklisp.o bytecode.o \
  62200. +    process.o callproc.o \
  62201. +    doprnt.o GETLOADAVG_OBJ
  62202. +
  62203. +/* Object files used on some machine or other.
  62204. +   These go in the DOC file on all machines
  62205. +   in case they are needed there.  */
  62206. +SOME_MACHINE_OBJECTS = sunfns.o
  62207. +
  62208. +#ifdef TERMINFO
  62209. +/* Used to be -ltermcap here.  If your machine needs that,
  62210. +   define LIBS_TERMCAP in the m/*.h file.  */
  62211. +#ifndef LIBS_TERMCAP
  62212. +#define LIBS_TERMCAP -lcurses
  62213. +#endif /* LIBS_TERMCAP */
  62214. +termcapobj = terminfo.o
  62215. +#else /* ! defined (TERMINFO) */
  62216. +#ifndef LIBS_TERMCAP
  62217. +#define LIBS_TERMCAP
  62218. +termcapobj = termcap.o tparam.o
  62219. +#else /* LIBS_TERMCAP */
  62220. +termcapobj = tparam.o
  62221. +#endif /* LIBS_TERMCAP */
  62222. +#endif /* ! defined (TERMINFO) */
  62223. +
  62224. +
  62225. +#ifndef SYSTEM_MALLOC
  62226. +
  62227. +#ifdef GNU_MALLOC  /* New GNU malloc */
  62228. +#ifdef REL_ALLOC
  62229. +mallocobj = gmalloc.o ralloc.o vm-limit.o
  62230. +#else /* ! defined (REL_ALLOC) */
  62231. +mallocobj = gmalloc.o vm-limit.o
  62232. +#endif /* ! defined (REL_ALLOC) */
  62233. +#else /* Old GNU malloc */
  62234. +mallocobj = malloc.o
  62235. +#endif /* Old GNU malloc */
  62236. +
  62237. +#endif /* SYSTEM_MALLOC */
  62238. +
  62239. +
  62240. +#ifndef HAVE_ALLOCA
  62241. +allocaobj = alloca.o
  62242. +#else
  62243. +allocaobj =
  62244. +#endif
  62245. +
  62246. +#ifdef USE_X_TOOLKIT
  62247. +widgetobj= widget.o
  62248. +#else /* not USE_X_TOOLKIT */
  62249. +widgetobj=
  62250. +#endif /* not USE_X_TOOLKIT */
  62251. +
  62252. +
  62253. +/* define otherobj as list of object files that make-docfile
  62254. +   should not be told about.  */
  62255. +otherobj= $(termcapobj) lastfile.o $(mallocobj) $(allocaobj) $(widgetobj)
  62256. +
  62257. +#ifdef LISP_FLOAT_TYPE
  62258. +#define FLOAT_SUPPORT ${lispdir}float-sup.elc
  62259. +#else
  62260. +#define FLOAT_SUPPORT
  62261. +#endif
  62262. +
  62263. +#ifdef MULTI_FRAME
  62264. +#define FRAME_SUPPORT ${lispdir}frame.elc ${lispdir}menu-bar.elc \
  62265. +  ${lispdir}mouse.elc ${lispdir}select.elc ${lispdir}scroll-bar.elc
  62266. +#else
  62267. +#define FRAME_SUPPORT
  62268. +#endif
  62269. +
  62270. +#ifdef HAVE_X_WINDOWS
  62271. +#define X_WINDOWS_SUPPORT
  62272. +#else
  62273. +#define X_WINDOWS_SUPPORT
  62274. +#endif
  62275. +
  62276. +#ifdef VMS
  62277. +#define VMS_SUPPORT ${lispdir}vmsproc.elc ${lispdir}vms-patch
  62278. +#else
  62279. +#define VMS_SUPPORT
  62280. +#endif
  62281. +
  62282. +#ifdef MSDOS
  62283. +#define MSDOS_SUPPORT ${lispdir}ls-lisp.elc ${lispdir}disp-tab.elc ${lispdir}dos-fns.elc ${lispdir}mouse.elc
  62284. +#else
  62285. +#define MSDOS_SUPPORT
  62286. +#endif
  62287. +
  62288. +/* List of Lisp files loaded into the dumped Emacs.  It's arranged
  62289. +   like this because it's easier to generate it semi-mechanically from
  62290. +   loadup.el this way.
  62291. +
  62292. +   Note that this list should not include lisp files which might not
  62293. +   be present, like site-load.el and site-init.el; this makefile
  62294. +   expects them all to be either present or buildable.  */
  62295. +lisp= \
  62296. +    ${lispdir}abbrev.elc \
  62297. +    ${lispdir}buff-menu.elc \
  62298. +    ${lispdir}byte-run.elc \
  62299. +    ${lispdir}c-mode.elc \
  62300. +    ${lispdir}files.elc \
  62301. +    ${lispdir}fill.elc \
  62302. +    FLOAT_SUPPORT \
  62303. +    FRAME_SUPPORT \
  62304. +    X_WINDOWS_SUPPORT \
  62305. +    ${lispdir}help.elc \
  62306. +    ${lispdir}indent.elc \
  62307. +    ${lispdir}isearch.elc \
  62308. +    ${lispdir}lisp-mode.elc \
  62309. +    ${lispdir}lisp.elc \
  62310. +    ${lispdir}loaddefs.el \
  62311. +    ${lispdir}map-ynp.elc \
  62312. +    ${lispdir}page.elc \
  62313. +    ${lispdir}paragraphs.elc \
  62314. +    ${lispdir}paths.el \
  62315. +    ${lispdir}register.elc \
  62316. +    ${lispdir}replace.elc \
  62317. +    ${lispdir}simple.elc \
  62318. +    ${lispdir}startup.elc \
  62319. +    ${lispdir}subr.elc \
  62320. +    ${lispdir}text-mode.elc \
  62321. +    ${lispdir}vc-hooks.elc \
  62322. +    VMS_SUPPORT \
  62323. +    MSDOS_SUPPORT \
  62324. +    ${lispdir}window.elc \
  62325. +    ${lispdir}version.el
  62326. +
  62327. +/* Construct full set of libraries to be linked.
  62328. +   Note that SunOS needs -lm to come before -lc; otherwise, you get
  62329. +   duplicated symbols.  If the standard libraries were compiled
  62330. +   with GCC, we might need gnulib again after them.  */
  62331. +LIBES = $(LIBX) LIBS_SYSTEM LIBS_MACHINE LIBS_TERMCAP \
  62332. +   LIBS_DEBUG $(GNULIB_VAR) LIB_MATH LIB_STANDARD $(GNULIB_VAR)
  62333. +
  62334. +/* Enable recompilation of certain other files depending on system type.  */
  62335. +
  62336. +#ifndef OTHER_FILES
  62337. +#define OTHER_FILES
  62338. +#endif
  62339. +
  62340. +/* Enable inclusion of object files in temacs depending on system type.  */
  62341. +#ifndef OBJECTS_SYSTEM
  62342. +#define OBJECTS_SYSTEM
  62343. +#endif
  62344. +
  62345. +#ifndef OBJECTS_MACHINE
  62346. +#define OBJECTS_MACHINE
  62347. +#endif
  62348. +
  62349. +all: emacs OTHER_FILES
  62350. +
  62351. +emacs: temacs ${etc}DOC ${lisp}
  62352. +#ifdef CANNOT_DUMP
  62353. +    rm -f emacs
  62354. +    ln temacs emacs
  62355. +#else
  62356. +#ifdef HAVE_SHM
  62357. +    ./temacs -nl -batch -l loadup dump
  62358. +#else /* ! defined (HAVE_SHM) */
  62359. +    ./temacs -batch -l loadup dump
  62360. +#endif /* ! defined (HAVE_SHM) */
  62361. +#endif /* ! defined (CANNOT_DUMP) */
  62362. +
  62363. +${etc}DOC: ${libsrc}make-docfile ${obj} ${lisp}
  62364. +    -rm -f ${etc}DOC
  62365. +    ${libsrc}make-docfile -d ${srcdir} ${obj} ${SOME_MACHINE_OBJECTS} \
  62366. +      ${lisp} > ${etc}DOC
  62367. +
  62368. +${libsrc}make-docfile:
  62369. +    cd ${libsrc}; ${MAKE} ${MFLAGS} make-docfile
  62370. +
  62371. +/* Some systems define this to cause parallel Make-ing.  */
  62372. +#ifndef MAKE_PARALLEL
  62373. +#define MAKE_PARALLEL
  62374. +#endif
  62375. +
  62376. +temacs: MAKE_PARALLEL $(LOCALCPP) $(SHORT) $(STARTFILES) $(OLDXMENU) ${obj} ${otherobj} OBJECTS_SYSTEM OBJECTS_MACHINE prefix-args
  62377. +    $(LD) YMF_PASS_LDFLAGS (${STARTFLAGS} ${ALL_LDFLAGS}) \
  62378. +    -o temacs ${STARTFILES} ${obj} ${otherobj}  \
  62379. +    OBJECTS_SYSTEM OBJECTS_MACHINE ${LIBES}
  62380. +
  62381. +prefix-args: prefix-args.c $(config_h)
  62382. +    $(CC) $(ALL_CFLAGS) ${srcdir}/prefix-args.c -o prefix-args
  62383. +
  62384. +/* These are needed for C compilation, on the systems that need them */
  62385. +#ifdef NEED_CPP
  62386. +CPP = ./localcpp
  62387. +localcpp:
  62388. +    cd ${cppdir}; ${MAKE} ${MFLAGS} EMACS=-DEMACS
  62389. +    ln ${cppdir}cpp localcpp  /* Name where ALL_CFLAGS will refer to it */
  62390. +/* cc appears to be cretinous and require all of these to exist
  62391. +   if -B is specified -- we can't use one local pass and let the
  62392. +   others be the standard ones.  What a loser.
  62393. +   We can't even use ln, since they are probably
  62394. +   on different disks.  */
  62395. +    cp /lib/ccom localccom
  62396. +    -cp /lib/optim localoptim
  62397. +    -cp /lib/c2 localc2
  62398. +    cp /bin/as localas
  62399. +#else /* ! defined (NEED_CPP) */
  62400. +CPP = $(CC) -E
  62401. +#endif /* ! defined (NEED_CPP) */
  62402. +
  62403. +#ifdef SHORTNAMES
  62404. +shortnames:
  62405. +    cd ${shortnamesdir}; ${MAKE} ${MFLAGS}
  62406. +#endif
  62407. +
  62408. +/* Don't lose if this was not defined.  */
  62409. +#ifndef OLDXMENU_OPTIONS
  62410. +#define OLDXMENU_OPTIONS
  62411. +#endif
  62412. +
  62413. +/* Don't lose if this was not defined.  */
  62414. +#ifndef LWLIB_OPTIONS
  62415. +#define LWLIB_OPTIONS
  62416. +#endif
  62417. +
  62418. +#ifdef HAVE_X_WINDOWS
  62419. +#ifdef HAVE_X11
  62420. +#ifdef USE_X_TOOLKIT
  62421. +$(OLDXMENU): really-lwlib
  62422. +    -rm -f $(OLDXMENU) /* We might have a link to an old version.  */
  62423. +    ${LN_S} ${lwlibdir}liblw.a $(OLDXMENU)
  62424. +
  62425. +/* Encode the values of these two macros in Make variables,
  62426. +   so we can use $(...) to substitute their values within "...".  */
  62427. +C_SWITCH_MACHINE_1 = C_SWITCH_MACHINE
  62428. +C_SWITCH_SYSTEM_1 = C_SWITCH_SYSTEM
  62429. +C_SWITCH_SITE_1 = C_SWITCH_SITE
  62430. +C_SWITCH_X_SITE_1 = C_SWITCH_X_SITE
  62431. +C_SWITCH_X_MACHINE_1 = C_SWITCH_X_MACHINE
  62432. +C_SWITCH_X_SYSTEM_1 = C_SWITCH_X_SYSTEM
  62433. +really-lwlib:
  62434. +    cd ${lwlibdir}; ${MAKE} ${MFLAGS} LWLIB_OPTIONS \
  62435. +    CC='${CC}' CFLAGS='${CFLAGS}' MAKE='${MAKE}' \
  62436. +    "C_SWITCH_X_SITE=$(C_SWITCH_X_SITE_1)" \
  62437. +    "C_SWITCH_X_MACHINE=$(C_SWITCH_X_MACHINE_1)" \
  62438. +    "C_SWITCH_X_SYSTEM=$(C_SWITCH_X_SYSTEM_1)" \
  62439. +    "C_SWITCH_SITE=$(C_SWITCH_SITE_1)" \
  62440. +    "C_SWITCH_MACHINE=$(C_SWITCH_MACHINE_1)" \
  62441. +    "C_SWITCH_SYSTEM=$(C_SWITCH_SYSTEM_1)"
  62442. +    @true  /* make -t should not create really-lwlib.  */
  62443. +#else /* not USE_X_TOOLKIT */
  62444. +#ifdef HAVE_X_MENU
  62445. +$(OLDXMENU): really-oldXMenu
  62446. +    -rm -f $(OLDXMENU) /* We might have a link to an old version.  */
  62447. +    ${LN_S} ${oldXMenudir}libXMenu11.a $(OLDXMENU)
  62448. +
  62449. +/* Encode the values of these two macros in Make variables,
  62450. +   so we can use $(...) to substitute their values within "...".  */
  62451. +C_SWITCH_MACHINE_1 = C_SWITCH_MACHINE
  62452. +C_SWITCH_SYSTEM_1 = C_SWITCH_SYSTEM
  62453. +C_SWITCH_SITE_1 = C_SWITCH_SITE
  62454. +C_SWITCH_X_SITE_1 = C_SWITCH_X_SITE
  62455. +C_SWITCH_X_MACHINE_1 = C_SWITCH_X_MACHINE
  62456. +C_SWITCH_X_SYSTEM_1 = C_SWITCH_X_SYSTEM
  62457. +really-oldXMenu:
  62458. +    cd ${oldXMenudir}; ${MAKE} ${MFLAGS} OLDXMENU_OPTIONS \
  62459. +    CC='${CC}' CFLAGS='${CFLAGS}' MAKE='${MAKE}' \
  62460. +    "C_SWITCH_X_SITE=$(C_SWITCH_X_SITE_1)" \
  62461. +    "C_SWITCH_X_MACHINE=$(C_SWITCH_X_MACHINE_1)" \
  62462. +    "C_SWITCH_X_SYSTEM=$(C_SWITCH_X_SYSTEM_1)" \
  62463. +    "C_SWITCH_SITE=$(C_SWITCH_SITE_1)" \
  62464. +    "C_SWITCH_MACHINE=$(C_SWITCH_MACHINE_1)" \
  62465. +    "C_SWITCH_SYSTEM=$(C_SWITCH_SYSTEM_1)"
  62466. +    @true  /* make -t should not create really-oldXMenu.  */
  62467. +#endif /* HAVE_X_MENU */
  62468. +#endif /* not USE_X_TOOLKIT */
  62469. +#endif /* HAVE_X11 */
  62470. +#endif /* HAVE_X_WINDOWS */
  62471. +
  62472. +paths.h: paths.h.in
  62473. +    @echo "The file paths.h needs to be set up from paths.h.in."
  62474. +    @echo "Consult the file \`INSTALL' for instructions for building Emacs."
  62475. +    exit 1
  62476. +
  62477. +config.h: config.h.in
  62478. +    @echo "The file config.h needs to be set up from config.h.in."
  62479. +    @echo "Consult the file \`INSTALL' for instructions for building Emacs."
  62480. +    exit 1
  62481. +
  62482. +/* Some machines have alloca built-in.
  62483. +   They should define HAVE_ALLOCA, or may just let alloca.s
  62484. +   be used but generate no code.
  62485. +   Some have it written in assembler in alloca.s.
  62486. +   Some use the C version in alloca.c (these define C_ALLOCA in config.h).
  62487. +   */
  62488. +
  62489. +#ifdef C_ALLOCA
  62490. +/* We could put something in alloca.c to #define free and malloc
  62491. +   whenever emacs was #defined, but that's not appropriate for all
  62492. +   users of alloca in Emacs.  Check out ../lib-src/getopt.c.  */
  62493. +alloca.o : alloca.c
  62494. +    $(CC) -c $(CPPFLAGS) -Dfree=xfree -Dmalloc=xmalloc \
  62495. +    $(ALL_CFLAGS) ${srcdir}/alloca.c
  62496. +#else
  62497. +#ifndef HAVE_ALLOCA
  62498. +alloca.o : alloca.s $(config_h)
  62499. +/* $(CPP) is cc -E, which may get confused by filenames
  62500. +   that do not end in .c.  So copy file to a safe name.  */
  62501. +    cp ${srcdir}/alloca.s allocatem.c
  62502. +/* Remove any ^L, blank lines, and preprocessor comments,
  62503. +   since some assemblers barf on them.  Use a different basename for the
  62504. +   output file, since some stupid compilers (Green Hill's) use that
  62505. +   name for the intermediate assembler file. */
  62506. +    $(CPP) $(CPPFLAGS) $(ALL_CFLAGS) allocatem.c | \
  62507. +    sed -e 's/ //' -e 's/^#.*//' | \
  62508. +    sed -n -e '/^..*$$/p' > allocax.s
  62509. +    -rm -f alloca.o
  62510. +/* Xenix, in particular, needs to run assembler via cc.  */
  62511. +    $(CC) -c allocax.s
  62512. +    mv allocax.o alloca.o
  62513. +    rm allocax.s allocatem.c
  62514. +#endif /* HAVE_ALLOCA */
  62515. +#endif /* ! defined (C_ALLOCA) */
  62516. +
  62517. +/* Nearly all the following files depend on lisp.h,
  62518. +   but it is not included as a dependency because
  62519. +   it is so often changed in ways that do not require any recompilation
  62520. +   and so rarely changed in ways that do require any.  */
  62521. +
  62522. +abbrev.o : abbrev.c buffer.h commands.h $(config_h) 
  62523. +buffer.o : buffer.c buffer.h commands.h window.h \
  62524. +   INTERVAL_SRC blockinput.h $(config_h) 
  62525. +callint.o : callint.c window.h commands.h buffer.h mocklisp.h \
  62526. +   keyboard.h $(config_h)
  62527. +callproc.o : callproc.c paths.h buffer.h commands.h $(config_h) \
  62528. +    process.h systty.h syssignal.h
  62529. +casefiddle.o : casefiddle.c syntax.h commands.h buffer.h $(config_h) 
  62530. +casetab.o : casetab.c buffer.h $(config_h)
  62531. +cm.o : cm.c cm.h termhooks.h $(config_h)
  62532. +cmds.o : cmds.c syntax.h buffer.h commands.h $(config_h) 
  62533. +pre-crt0.o : pre-crt0.c
  62534. +crt0.o : crt0.c $(config_h)
  62535. +    CRT0_COMPILE ${srcdir}/crt0.c
  62536. +dired.o : dired.c commands.h buffer.h $(config_h) regex.h
  62537. +dispnew.o : dispnew.c commands.h frame.h window.h buffer.h dispextern.h \
  62538. +   termchar.h termopts.h termhooks.h cm.h disptab.h systty.h systime.h $(config_h)
  62539. +doc.o : doc.c $(config_h) paths.h buffer.h keyboard.h
  62540. +doprnt.o : doprnt.c
  62541. +editfns.o : editfns.c window.h buffer.h systime.h INTERVAL_SRC $(config_h) 
  62542. +emacs.o : emacs.c commands.h systty.h syssignal.h process.h INTERVAL_SRC $(config_h) 
  62543. +fileio.o : fileio.c window.h buffer.h systime.h INTERVAL_SRC $(config_h) 
  62544. +filelock.o : filelock.c buffer.h paths.h $(config_h)
  62545. +filemode.o : filemode.c  $(config_h)
  62546. +getloadavg.o : getloadavg.c $(config_h)
  62547. +indent.o : indent.c frame.h window.h indent.h buffer.h $(config_h) termchar.h \
  62548. +   termopts.h disptab.h
  62549. +insdel.o : insdel.c window.h buffer.h INTERVAL_SRC blockinput.h $(config_h)
  62550. +keyboard.o : keyboard.c termchar.h termhooks.h termopts.h buffer.h \
  62551. +   commands.h frame.h window.h macros.h disptab.h keyboard.h syssignal.h \
  62552. +   systty.h systime.h dispextern.h intervals.h blockinput.h $(config_h) 
  62553. +keymap.o : keymap.c buffer.h commands.h keyboard.h termhooks.h blockinput.h \
  62554. +   $(config_h) 
  62555. +lastfile.o : lastfile.c  $(config_h)
  62556. +macros.o : macros.c window.h buffer.h commands.h macros.h $(config_h)
  62557. +malloc.o : malloc.c $(config_h)
  62558. +gmalloc.o : gmalloc.c $(config_h)
  62559. +ralloc.o : ralloc.c $(config_h)
  62560. +vm-limit.o : vm-limit.c mem-limits.h $(config_h) 
  62561. +marker.o : marker.c buffer.h $(config_h) 
  62562. +minibuf.o : minibuf.c syntax.h dispextern.h frame.h window.h \
  62563. +   buffer.h commands.h $(config_h) 
  62564. +mocklisp.o : mocklisp.c buffer.h $(config_h)
  62565. +process.o : process.c process.h buffer.h window.h termhooks.h termopts.h \
  62566. +   commands.h syssignal.h systime.h systty.h syswait.h frame.h $(config_h) 
  62567. +regex.o : regex.c syntax.h buffer.h $(config_h) regex.h 
  62568. +frame.o : frame.c xterm.h window.h frame.h termhooks.h commands.h keyboard.h \
  62569. +   buffer.h $(config_h)
  62570. +scroll.o : scroll.c termchar.h $(config_h) dispextern.h frame.h
  62571. +search.o : search.c regex.h commands.h buffer.h syntax.h blockinput.h $(config_h) 
  62572. +syntax.o : syntax.c syntax.h buffer.h commands.h $(config_h) 
  62573. +sysdep.o : sysdep.c $(config_h) dispextern.h termhooks.h termchar.h termopts.h \
  62574. +   frame.h syssignal.h systty.h systime.h syswait.h blockinput.h window.h
  62575. +term.o : term.c termchar.h termhooks.h termopts.h $(config_h) cm.h frame.h \
  62576. +   disptab.h
  62577. +termcap.o : termcap.c $(config_h)
  62578. +terminfo.o : terminfo.c $(config_h)
  62579. +tparam.o : tparam.c $(config_h)
  62580. +undo.o : undo.c buffer.h commands.h $(config_h) 
  62581. +/* This hack is to discard any space that cpp might put at the beginning
  62582. +   of UNEXEC when substituting it in.  */
  62583. +UNEXEC_ALIAS=UNEXEC
  62584. +$(UNEXEC_ALIAS) : UNEXEC_SRC $(config_h)
  62585. +widget.o : widget.c xterm.h frame.h dispextern.h widgetprv.h $(config_h)
  62586. +window.o : window.c indent.h commands.h frame.h window.h buffer.h termchar.h \
  62587. +   termhooks.h disptab.h keyboard.h $(config_h)
  62588. +xdisp.o : xdisp.c macros.h commands.h indent.h buffer.h dispextern.h \
  62589. +   termchar.h frame.h window.h disptab.h termhooks.h $(config_h) 
  62590. +xfaces.o : xfaces.c dispextern.h frame.h xterm.h buffer.h blockinput.h \
  62591. +   window.h $(config_h) 
  62592. +xfns.o : xfns.c buffer.h frame.h window.h keyboard.h xterm.h \
  62593. +   blockinput.h $(config_h)
  62594. +xmenu.o : xmenu.c xterm.h window.h frame.h keyboard.h blockinput.h $(config_h)
  62595. +xterm.o : xterm.c xterm.h termhooks.h termopts.h termchar.h window.h \
  62596. +  dispextern.h frame.h disptab.h blockinput.h systime.h syssignal.h \
  62597. +  gnu.h sink.h sinkmask.h $(config_h)
  62598. +xselect.o : xselect.c dispextern.h frame.h xterm.h blockinput.h $(config_h) 
  62599. +xrdb.o : xrdb.c $(config_h)
  62600. +hftctl.o : hftctl.c $(config_h)
  62601. +
  62602. +/* The files of Lisp proper */
  62603. +
  62604. +alloc.o : alloc.c frame.h window.h buffer.h  puresize.h syssignal.h
  62605. +alloc.o : blockinput.h $(config_h) INTERVAL_SRC
  62606. +bytecode.o : bytecode.c buffer.h $(config_h)
  62607. +data.o : data.c buffer.h puresize.h syssignal.h $(config_h)
  62608. +eval.o : eval.c commands.h keyboard.h blockinput.h $(config_h)
  62609. +floatfns.o : floatfns.c $(config_h)
  62610. +fns.o : fns.c commands.h $(config_h) frame.h buffer.h keyboard.h INTERVAL_SRC
  62611. +print.o : print.c process.h frame.h window.h buffer.h $(config_h)
  62612. +lread.o : lread.c commands.h keyboard.h buffer.h paths.h $(config_h) \
  62613. + termhooks.h
  62614. +
  62615. +/* Text properties support */
  62616. +textprop.o : textprop.c buffer.h intervals.h $(config_h)
  62617. +intervals.o : intervals.c buffer.h intervals.h puresize.h $(config_h)
  62618. +
  62619. +/* System-specific programs to be made.
  62620. +   OTHER_FILES, OBJECTS_SYSTEM and OBJECTS_MACHINE
  62621. +   select which of these should be compiled.  */
  62622. +
  62623. +sunfns.o  : sunfns.c buffer.h $(config_h)
  62624. +
  62625. +${libsrc}emacstool: ${libsrc}emacstool.c
  62626. +    cd ${libsrc}; ${MAKE} ${MFLAGS} emacstool
  62627. +mostlyclean:
  62628. +    rm -f temacs prefix-args core \#* *.o libXMenu11.a liblw.a
  62629. +    rm -f ../etc/DOC
  62630. +clean: mostlyclean
  62631. +    rm -f emacs-* emacs
  62632. +/**/# This is used in making a distribution.
  62633. +/**/# Do not use it on development directories!
  62634. +distclean: clean
  62635. +    rm -f paths.h config.h Makefile Makefile.in ../etc/DOC-*
  62636. +realclean: distclean
  62637. +    rm -f TAGS
  62638. +versionclean:
  62639. +    -rm -f emacs emacs-* ../etc/DOC*
  62640. +extraclean: distclean
  62641. +    -rm -f *~ \#* m/?*~ s/?*~
  62642. +
  62643. +/* The rule for the [sm] files has to be written a little funny to
  62644. +   avoid looking like a C comment to CPP. */
  62645. +SOURCES = *.[ch] [sm]/?* COPYING ymakefile \
  62646. +    config.h.in README COPYING ChangeLog vms.pp-trans
  62647. +unlock:
  62648. +    chmod u+w $(SOURCES)
  62649. +
  62650. +relock:
  62651. +    chmod -w $(SOURCES)
  62652. +    chmod +w paths.h
  62653. +
  62654. +/* Arrange to make a tags table in ../lisp, and another in this dir
  62655. +   which includes ../lisp/TAGS by reference.  */
  62656. +ctagsfiles = [a-zA-Z]*.h [a-zA-Z]*.c
  62657. +lisptagsfiles = ../lisp/[a-zA-Z]*.el ../lisp/term/[a-zA-Z]*.el
  62658. +TAGS: $(ctagsfiles)
  62659. +    ../lib-src/etags --include=../lisp/TAGS $(ctagsfiles)
  62660. +../lisp/TAGS: $(lisptagsfiles)
  62661. +    cd ../lisp; $(MAKE) TAGS
  62662. +tags: TAGS ../lisp/TAGS
  62663. +.PHONY: tags
  62664. diff -ru --new-file baseline/fsf/emacs/unixlib/include/alloca.h amiga/fsf/emacs/unixlib/include/alloca.h
  62665. --- baseline/fsf/emacs/unixlib/include/alloca.h    Wed Dec 31 17:00:00 1969
  62666. +++ amiga/fsf/emacs/unixlib/include/alloca.h    Sun Oct 15 17:14:31 1995
  62667. @@ -0,0 +1,8 @@
  62668. +#ifndef ALLOCA_H
  62669. +#define ALLOCA_H
  62670. +
  62671. +#include <stddef.h>
  62672. +
  62673. +void *alloca(size_t size);
  62674. +
  62675. +#endif
  62676. diff -ru --new-file baseline/fsf/emacs/unixlib/include/amiga/ioctl.h amiga/fsf/emacs/unixlib/include/amiga/ioctl.h
  62677. --- baseline/fsf/emacs/unixlib/include/amiga/ioctl.h    Wed Dec 31 17:00:00 1969
  62678. +++ amiga/fsf/emacs/unixlib/include/amiga/ioctl.h    Sun Oct 15 17:15:04 1995
  62679. @@ -0,0 +1,15 @@
  62680. +#ifndef _AMIGA_H
  62681. +#define _AMIGA_H
  62682. +
  62683. +/* Amiga specific ioctl's */
  62684. +
  62685. +#define _AMIGA_IOCTL_BASE 2048
  62686. +
  62687. +#define _AMIGA_INTERACTIVE (_AMIGA_IOCTL_BASE + 0) /* Is file Interactive ? */
  62688. +#define _AMIGA_GET_FH (_AMIGA_IOCTL_BASE + 1) /* Get an AmigaDOS fh for file */
  62689. +#define _AMIGA_FREE_FH (_AMIGA_IOCTL_BASE + 2) /* Free a fh obtained by GET_FH */
  62690. +#define _AMIGA_TRUNCATE (_AMIGA_IOCTL_BASE + 3) /* Truncate file to given size */
  62691. +#define _AMIGA_SETPROTECTION (_AMIGA_IOCTL_BASE + 4) /* Set (amiga) protection on file */
  62692. +#define _AMIGA_DELETE_IF_ME (_AMIGA_IOCTL_BASE + 5) /* Delete myself if I am the file whose lock is passed as parameter */
  62693. +
  62694. +#endif
  62695. diff -ru --new-file baseline/fsf/emacs/unixlib/include/errno.h amiga/fsf/emacs/unixlib/include/errno.h
  62696. --- baseline/fsf/emacs/unixlib/include/errno.h    Wed Dec 31 17:00:00 1969
  62697. +++ amiga/fsf/emacs/unixlib/include/errno.h    Sun Oct 15 17:14:33 1995
  62698. @@ -0,0 +1,51 @@
  62699. +/**
  62700. +*
  62701. +* The following symbols are the error codes returned by the UNIX system
  62702. +* functions.  Typically, a UNIX function returns -1 when an error occurs,
  62703. +* and the global integer named errno contains one of these values.
  62704. +*
  62705. +*/
  62706. +#define EOSERR -1    /* Operating system error */
  62707. +
  62708. +#define EPERM 1        /* User is not owner */
  62709. +#define ENOENT 2    /* No such file or directory */
  62710. +#define ESRCH 3        /* No such process */
  62711. +#define EINTR 4        /* Interrupted system call */
  62712. +#define EIO 5        /* I/O error */
  62713. +#define ENXIO 6        /* No such device or address */
  62714. +#define E2BIG 7        /* Arg list is too long */
  62715. +#define ENOEXEC 8    /* Exec format error */
  62716. +#define EBADF 9        /* Bad file number */
  62717. +#define ECHILD 10    /* No child process */
  62718. +#define EAGAIN 11    /* No more processes allowed */
  62719. +#define ENOMEM 12    /* No memory available */
  62720. +#define EACCES 13    /* Access denied */
  62721. +#define EFAULT 14    /* Bad address */
  62722. +#define ENOTBLK 15    /* Bulk device required */
  62723. +#define EBUSY 16    /* Resource is busy */
  62724. +#define EEXIST 17    /* File already exists */
  62725. +#define EXDEV 18    /* Cross-device link */
  62726. +#define ENODEV 19    /* No such device */
  62727. +#define ENOTDIR 20    /* Not a directory */
  62728. +#define EISDIR 21    /* Is a directory */
  62729. +#define EINVAL 22    /* Invalid argument */
  62730. +#define ENFILE 23    /* No more files (units) allowed */
  62731. +#define EMFILE 24    /* No more files (units) allowed for this process */
  62732. +#define ENOTTY 25    /* Not a terminal */
  62733. +#define ETXTBSY 26    /* Text file is busy */
  62734. +#define EFBIG 27    /* File is too large */
  62735. +#define ENOSPC 28    /* No space left */
  62736. +#define ESPIPE 29    /* Seek issued to pipe */
  62737. +#define EROFS 30    /* Read-only file system */
  62738. +#define EMLINK 31    /* Too many links */
  62739. +#define EPIPE 32    /* Broken pipe */
  62740. +#define EDOM 33        /* Math function argument error */
  62741. +#define ERANGE 34    /* Math function result is out of range */
  62742. +#define EWOULDBLOCK 35    /* Operation would block */
  62743. +#define ENAMETOOLONG 36 /* File name is too long */
  62744. +#define ENOTEMPTY 37    /* Directory is not empty */
  62745. +#define ELOOP 38    /* Too many soft links found */
  62746. +
  62747. +extern int errno, _OSERR;
  62748. +extern int sys_nerr;
  62749. +extern char *sys_errlist[];
  62750. diff -ru --new-file baseline/fsf/emacs/unixlib/include/fcntl.h amiga/fsf/emacs/unixlib/include/fcntl.h
  62751. --- baseline/fsf/emacs/unixlib/include/fcntl.h    Wed Dec 31 17:00:00 1969
  62752. +++ amiga/fsf/emacs/unixlib/include/fcntl.h    Sun Oct 15 17:14:35 1995
  62753. @@ -0,0 +1 @@
  62754. +#include <sys/fcntl.h>
  62755. diff -ru --new-file baseline/fsf/emacs/unixlib/include/grp.h amiga/fsf/emacs/unixlib/include/grp.h
  62756. --- baseline/fsf/emacs/unixlib/include/grp.h    Wed Dec 31 17:00:00 1969
  62757. +++ amiga/fsf/emacs/unixlib/include/grp.h    Sun Oct 15 17:14:36 1995
  62758. @@ -0,0 +1,12 @@
  62759. +#ifndef _GRP_H
  62760. +#define _GRP_H
  62761. +
  62762. +struct group {
  62763. +  char *gr_name;        /* name of the group */
  62764. +  char *gr_passwd;        /* encrypted password of the group */
  62765. +  gid_t gr_gid;            /* numerical group ID */
  62766. +  char **gr_mem;        /* null-terminated array of pointers to the
  62767. +                   individual member names */
  62768. +};
  62769. +
  62770. +#endif
  62771. diff -ru --new-file baseline/fsf/emacs/unixlib/include/internal/devices.h amiga/fsf/emacs/unixlib/include/internal/devices.h
  62772. --- baseline/fsf/emacs/unixlib/include/internal/devices.h    Wed Dec 31 17:00:00 1969
  62773. +++ amiga/fsf/emacs/unixlib/include/internal/devices.h    Sun Oct 15 17:15:08 1995
  62774. @@ -0,0 +1,9 @@
  62775. +#ifndef DEVICES_H
  62776. +#define DEVICES_H
  62777. +
  62778. +struct IORequest *_device_open(char *name, unsigned long unit, unsigned long flags,
  62779. +                   void *data, unsigned long data_len, int req_size);
  62780. +
  62781. +void _device_close(struct IORequest *ioreq);
  62782. +
  62783. +#endif
  62784. diff -ru --new-file baseline/fsf/emacs/unixlib/include/internal/files.h amiga/fsf/emacs/unixlib/include/internal/files.h
  62785. --- baseline/fsf/emacs/unixlib/include/internal/files.h    Wed Dec 31 17:00:00 1969
  62786. +++ amiga/fsf/emacs/unixlib/include/internal/files.h    Sun Oct 15 17:15:09 1995
  62787. @@ -0,0 +1,35 @@
  62788. +#ifndef FILES_H
  62789. +#define FILES_H
  62790. +
  62791. +struct fileinfo {
  62792. +  int flags;
  62793. +  void *userinfo;
  62794. +  unsigned long (*__regargs select_start)(void *userinfo, int rd, int wr);
  62795. +  void (*__regargs select_poll)(void *userinfo, int *rd, int *wr);
  62796. +  int (*__regargs read)(void *userinfo, void *buffer, unsigned int length);
  62797. +  int (*__regargs write)(void *userinfo, void *buffer, unsigned int length);
  62798. +  int (*__regargs lseek)(void *userinfo, long rpos, int mode);
  62799. +  int (*__regargs close)(void *userinfo, int internal);
  62800. +  int (*__regargs ioctl)(void *userinfo, int request, void *data);
  62801. +};
  62802. +
  62803. +/* FI_READ & WRITE replace O_RDONLY, WRONLY & RDWR. Other flags are left untouched */
  62804. +#define FI_READ 1
  62805. +#define FI_WRITE 2
  62806. +
  62807. +int _alloc_fd(void *userinfo, int flags,
  62808. +  unsigned long (*__regargs select_start)(void *userinfo, int rd, int wr),
  62809. +  void (*__regargs select_poll)(void *userinfo, int *rd, int *wr),
  62810. +  int (*__regargs read)(void *userinfo, void *buffer, unsigned int length),
  62811. +  int (*__regargs write)(void *userinfo, void *buffer, unsigned int length),
  62812. +  int (*__regargs lseek)(void *userinfo, long rpos, int mode),
  62813. +  int (*__regargs close)(void *userinfo, int internal),
  62814. +  int (*__regargs ioctl)(void *userinfo, int request, void *data)
  62815. +);
  62816. +
  62817. +void _free_fd(int fd);
  62818. +
  62819. +struct fileinfo *_find_fd(int fd);
  62820. +int _last_fd(void);
  62821. +
  62822. +#endif
  62823. diff -ru --new-file baseline/fsf/emacs/unixlib/include/internal/messages.h amiga/fsf/emacs/unixlib/include/internal/messages.h
  62824. --- baseline/fsf/emacs/unixlib/include/internal/messages.h    Wed Dec 31 17:00:00 1969
  62825. +++ amiga/fsf/emacs/unixlib/include/internal/messages.h    Sun Oct 15 17:15:11 1995
  62826. @@ -0,0 +1,9 @@
  62827. +void _message(char *format, ...);
  62828. +/* Display a message which is as visible as possible (either to the console
  62829. +   or to a requester).
  62830. +   Assume very little about library state */
  62831. +void _fail(char *format, ...);
  62832. +/* Display a message which is as visible as possible (either to the console
  62833. +   or to a requester).
  62834. +   Assume very little about library state.
  62835. +   Exit with error code RETURN_FAIL after that. */
  62836. diff -ru --new-file baseline/fsf/emacs/unixlib/include/internal/timers.h amiga/fsf/emacs/unixlib/include/internal/timers.h
  62837. --- baseline/fsf/emacs/unixlib/include/internal/timers.h    Wed Dec 31 17:00:00 1969
  62838. +++ amiga/fsf/emacs/unixlib/include/internal/timers.h    Sun Oct 15 17:15:13 1995
  62839. @@ -0,0 +1,20 @@
  62840. +#ifndef TIMERS_H
  62841. +#define TIMERS_H
  62842. +
  62843. +struct timeinfo {
  62844. +  struct timerequest *io;
  62845. +  int sent;
  62846. +};
  62847. +
  62848. +struct timeinfo *_alloc_timer(void);
  62849. +void _free_timer(struct timeinfo *timer);
  62850. +void _timer_abort(struct timeinfo *timer);
  62851. +ULONG _timer_sig(struct timeinfo *timer);
  62852. +
  62853. +void _timer_start(struct timeinfo *timer, int secs, int micros);
  62854. +/* _timer_start(timer, 0) stops a timer */
  62855. +
  62856. +int _timer_expired(struct timeinfo *timer);
  62857. +/* A non-started timer is defined to not have expired */
  62858. +
  62859. +#endif
  62860. diff -ru --new-file baseline/fsf/emacs/unixlib/include/internal/vars.h amiga/fsf/emacs/unixlib/include/internal/vars.h
  62861. --- baseline/fsf/emacs/unixlib/include/internal/vars.h    Wed Dec 31 17:00:00 1969
  62862. +++ amiga/fsf/emacs/unixlib/include/internal/vars.h    Sun Oct 15 17:15:15 1995
  62863. @@ -0,0 +1,11 @@
  62864. +#ifndef VARS_H
  62865. +#define VARS_H
  62866. +
  62867. +/* <_us, _startup_time> should be a pretty good unique identifier of
  62868. +   this process */
  62869. +extern struct Process *_us;
  62870. +extern long _stack_size;
  62871. +extern long _startup_time;
  62872. +extern int use_amiga_flags;
  62873. +
  62874. +#endif
  62875. diff -ru --new-file baseline/fsf/emacs/unixlib/include/pwd.h amiga/fsf/emacs/unixlib/include/pwd.h
  62876. --- baseline/fsf/emacs/unixlib/include/pwd.h    Wed Dec 31 17:00:00 1969
  62877. +++ amiga/fsf/emacs/unixlib/include/pwd.h    Sun Oct 15 17:14:38 1995
  62878. @@ -0,0 +1,19 @@
  62879. +#ifndef _PWD_H
  62880. +#define _PWD_H
  62881. +
  62882. +struct    passwd {
  62883. +  char *pw_name;
  62884. +  char *pw_passwd;
  62885. +  uid_t pw_uid;
  62886. +  gid_t pw_gid;
  62887. +  int  pw_quota;
  62888. +  char *pw_comment;
  62889. +  char *pw_gecos;
  62890. +  char *pw_dir;
  62891. +  char *pw_shell;
  62892. +};
  62893. +
  62894. +struct passwd *getpwuid(uid_t uid);
  62895. +struct passwd *getpwnam(char *name);
  62896. +
  62897. +#endif
  62898. diff -ru --new-file baseline/fsf/emacs/unixlib/include/setjmp.h amiga/fsf/emacs/unixlib/include/setjmp.h
  62899. --- baseline/fsf/emacs/unixlib/include/setjmp.h    Wed Dec 31 17:00:00 1969
  62900. +++ amiga/fsf/emacs/unixlib/include/setjmp.h    Sun Oct 15 17:14:40 1995
  62901. @@ -0,0 +1,55 @@
  62902. +/*-
  62903. + * Copyright (c) 1990 The Regents of the University of California.
  62904. + * All rights reserved.
  62905. + *
  62906. + * Redistribution and use in source and binary forms, with or without
  62907. + * modification, are permitted provided that the following conditions
  62908. + * are met:
  62909. + * 1. Redistributions of source code must retain the above copyright
  62910. + *    notice, this list of conditions and the following disclaimer.
  62911. + * 2. Redistributions in binary form must reproduce the above copyright
  62912. + *    notice, this list of conditions and the following disclaimer in the
  62913. + *    documentation and/or other materials provided with the distribution.
  62914. + * 3. All advertising materials mentioning features or use of this software
  62915. + *    must display the following acknowledgement:
  62916. + *    This product includes software developed by the University of
  62917. + *    California, Berkeley and its contributors.
  62918. + * 4. Neither the name of the University nor the names of its contributors
  62919. + *    may be used to endorse or promote products derived from this software
  62920. + *    without specific prior written permission.
  62921. + *
  62922. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  62923. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  62924. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  62925. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  62926. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  62927. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  62928. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  62929. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  62930. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  62931. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  62932. + * SUCH DAMAGE.
  62933. + *
  62934. + *    @(#)setjmp.h    5.5 (Berkeley) 6/8/91
  62935. + */
  62936. +
  62937. +#ifndef _SETJMP_H_
  62938. +#define _SETJMP_H_
  62939. +
  62940. +#define _JBLEN 14
  62941. +
  62942. +typedef int jmp_buf[_JBLEN];
  62943. +
  62944. +#include <sys/cdefs.h>
  62945. +
  62946. +__BEGIN_DECLS
  62947. +int    setjmp __P((jmp_buf));
  62948. +void    longjmp __P((jmp_buf, int));
  62949. +
  62950. +#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
  62951. +int    _setjmp __P((jmp_buf));
  62952. +void    _longjmp __P((jmp_buf, int));
  62953. +#endif /* neither ANSI nor POSIX */
  62954. +__END_DECLS
  62955. +
  62956. +#endif /* !_SETJMP_H_ */
  62957. diff -ru --new-file baseline/fsf/emacs/unixlib/include/signal.h amiga/fsf/emacs/unixlib/include/signal.h
  62958. --- baseline/fsf/emacs/unixlib/include/signal.h    Wed Dec 31 17:00:00 1969
  62959. +++ amiga/fsf/emacs/unixlib/include/signal.h    Sun Oct 15 17:14:42 1995
  62960. @@ -0,0 +1,59 @@
  62961. +#ifndef _SIGNAL_H
  62962. +#define _SIGNAL_H
  62963. +
  62964. +#define NSIG 32            /* We define lots of signals (though most are never
  62965. +                   generated) */
  62966. +
  62967. +/* Signal number definitions */
  62968. +/* Those which can be generated other than by kill are described with
  62969. +    <name>, amiga: <cause> */
  62970. +   
  62971. +
  62972. +#define SIGHUP 1        /* hangup */
  62973. +#define SIGINT 2        /* interrupt, amiga: ctrl-c */
  62974. +#define SIGQUIT 3        /* quit, amiga: ctrl-d */
  62975. +#define SIGILL 4        /* illegal instruction */
  62976. +#define SIGTRAP 5        /* trace trap */
  62977. +#define SIGIOT 6        /* abort, amiga: abort() called */
  62978. +#define SIGEMT 7        /* emulator trap */
  62979. +#define SIGFPE 8        /* arithmetic exception, amiga: arith op */
  62980. +#define SIGKILL 9        /* kill */
  62981. +#define SIGBUS 10        /* bus error */
  62982. +#define SIGSEGV 11        /* segmentation violation */
  62983. +#define SIGSYS 12        /* bad argument to system call */
  62984. +#define SIGPIPE 13        /* write on pipe or socket with no reader,
  62985. +                   amiga: generated for 'pipe's or 'sktpair's */
  62986. +#define SIGALRM 14        /* alarm clock, amiga: see alarm */
  62987. +#define SIGTERM 15        /* software termination */
  62988. +#define SIGURG 16        /* urgent condition on socket */
  62989. +/* SIGSTOP, SIGTSTP, SIGCONT, SIGTTIN, SIGTTOU undefined to avoid creating the
  62990. +   belief that we support stopped processes */
  62991. +#define SIGCHLD 20        /* child status has changed */
  62992. +#define SIGIO 23        /* I/O possible on a descriptor */
  62993. +/* Less usual signals: SIGXCPU, SIGXFSZ, SIGVTALARM, SIGPROF, SIGLOST not defined */
  62994. +#define SIGWINCH 28        /* window changed */
  62995. +#define SIGUSR1 30        /* user-defined signal 1 */
  62996. +#define SIGUSR2 31        /* user-defined signal 2 */
  62997. +
  62998. +#define SIG_IGN (void *)0
  62999. +#define SIG_DFL (void *)1
  63000. +
  63001. +struct sigvec {
  63002. +  void (*sv_handler)();
  63003. +  long sv_mask;
  63004. +  /*int sv_flags;*/ /* Not implemented */
  63005. +};
  63006. +
  63007. +void (*signal(int sig,void (*fn)(int)))(int);
  63008. +int sigvec(int sig, struct sigvec *vec, struct sigvec *ovec);
  63009. +long sigsetmask(long mask);
  63010. +long sigblock(long mask);
  63011. +
  63012. +#define sigmask(s) (1 << (s))
  63013. +
  63014. +/* Only kill(getpid(), sig) works */
  63015. +/* Also, getpid() is a unique number for this process */
  63016. +int getpid(void);
  63017. +int kill(int pid, int sig);
  63018. +
  63019. +#endif
  63020. diff -ru --new-file baseline/fsf/emacs/unixlib/include/stat.h amiga/fsf/emacs/unixlib/include/stat.h
  63021. --- baseline/fsf/emacs/unixlib/include/stat.h    Wed Dec 31 17:00:00 1969
  63022. +++ amiga/fsf/emacs/unixlib/include/stat.h    Sun Oct 15 17:14:44 1995
  63023. @@ -0,0 +1 @@
  63024. +#include <sys/stat.h>
  63025. diff -ru --new-file baseline/fsf/emacs/unixlib/include/stdio.h amiga/fsf/emacs/unixlib/include/stdio.h
  63026. --- baseline/fsf/emacs/unixlib/include/stdio.h    Wed Dec 31 17:00:00 1969
  63027. +++ amiga/fsf/emacs/unixlib/include/stdio.h    Sun Oct 15 17:14:45 1995
  63028. @@ -0,0 +1,7 @@
  63029. +/* Avoid problems with conflicting declarations for mkdir */
  63030. +#define mkdir __fake_mkdir
  63031. +#include "include:stdio.h"
  63032. +
  63033. +#define P_tmpdir "t:"
  63034. +
  63035. +#undef mkdir
  63036. diff -ru --new-file baseline/fsf/emacs/unixlib/include/stdlib.h amiga/fsf/emacs/unixlib/include/stdlib.h
  63037. --- baseline/fsf/emacs/unixlib/include/stdlib.h    Wed Dec 31 17:00:00 1969
  63038. +++ amiga/fsf/emacs/unixlib/include/stdlib.h    Sun Oct 15 17:14:47 1995
  63039. @@ -0,0 +1,4 @@
  63040. +/* Avoid problems with conflicting declarations for mkdir */
  63041. +#define mkdir __fake_mkdir
  63042. +#include "include:stdlib.h"
  63043. +#undef mkdir
  63044. diff -ru --new-file baseline/fsf/emacs/unixlib/include/strings.h amiga/fsf/emacs/unixlib/include/strings.h
  63045. --- baseline/fsf/emacs/unixlib/include/strings.h    Wed Dec 31 17:00:00 1969
  63046. +++ amiga/fsf/emacs/unixlib/include/strings.h    Sun Oct 15 17:14:49 1995
  63047. @@ -0,0 +1 @@
  63048. +#include <string.h>
  63049. diff -ru --new-file baseline/fsf/emacs/unixlib/include/sys/cdefs.h amiga/fsf/emacs/unixlib/include/sys/cdefs.h
  63050. --- baseline/fsf/emacs/unixlib/include/sys/cdefs.h    Wed Dec 31 17:00:00 1969
  63051. +++ amiga/fsf/emacs/unixlib/include/sys/cdefs.h    Sun Oct 15 17:15:18 1995
  63052. @@ -0,0 +1,78 @@
  63053. +/*
  63054. + * Copyright (c) 1991 The Regents of the University of California.
  63055. + * All rights reserved.
  63056. + *
  63057. + * Redistribution and use in source and binary forms, with or without
  63058. + * modification, are permitted provided that the following conditions
  63059. + * are met:
  63060. + * 1. Redistributions of source code must retain the above copyright
  63061. + *    notice, this list of conditions and the following disclaimer.
  63062. + * 2. Redistributions in binary form must reproduce the above copyright
  63063. + *    notice, this list of conditions and the following disclaimer in the
  63064. + *    documentation and/or other materials provided with the distribution.
  63065. + * 3. All advertising materials mentioning features or use of this software
  63066. + *    must display the following acknowledgement:
  63067. + *    This product includes software developed by the University of
  63068. + *    California, Berkeley and its contributors.
  63069. + * 4. Neither the name of the University nor the names of its contributors
  63070. + *    may be used to endorse or promote products derived from this software
  63071. + *    without specific prior written permission.
  63072. + *
  63073. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  63074. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  63075. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  63076. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  63077. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  63078. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  63079. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  63080. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  63081. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  63082. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  63083. + * SUCH DAMAGE.
  63084. + *
  63085. + *    @(#)cdefs.h    7.6 (Berkeley) 5/4/91
  63086. + */
  63087. +
  63088. +#ifndef    _CDEFS_H_
  63089. +#define    _CDEFS_H_
  63090. +
  63091. +#if defined(__cplusplus)
  63092. +#define    __BEGIN_DECLS    extern "C" {
  63093. +#define    __END_DECLS    };
  63094. +#else
  63095. +#define    __BEGIN_DECLS
  63096. +#define    __END_DECLS
  63097. +#endif
  63098. +
  63099. +/*
  63100. + * The __CONCAT macro is used to concatenate parts of symbol names, e.g.
  63101. + * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo.
  63102. + * The __CONCAT macro is a bit tricky -- make sure you don't put spaces
  63103. + * in between its arguments.  __CONCAT can also concatenate double-quoted
  63104. + * strings produced by the __STRING macro, but this only works with ANSI C.
  63105. + */
  63106. +#if defined(__STDC__) || defined(__cplusplus)
  63107. +#define    __P(protos)    protos        /* full-blown ANSI C */
  63108. +#define    __CONCAT(x,y)    x ## y
  63109. +#define    __STRING(x)    #x
  63110. +
  63111. +#else    /* !(__STDC__ || __cplusplus) */
  63112. +#define    __P(protos)    ()        /* traditional C preprocessor */
  63113. +#define    __CONCAT(x,y)    x/**/y
  63114. +#define    __STRING(x)    "x"
  63115. +
  63116. +#ifdef __GNUC__
  63117. +#define    const        __const        /* GCC: ANSI C with -traditional */
  63118. +#define    inline        __inline
  63119. +#define    signed        __signed
  63120. +#define    volatile    __volatile
  63121. +
  63122. +#else    /* !__GNUC__ */
  63123. +#define    const                /* delete ANSI C keywords */
  63124. +#define    inline
  63125. +#define    signed
  63126. +#define    volatile
  63127. +#endif    /* !__GNUC__ */
  63128. +#endif    /* !(__STDC__ || __cplusplus) */
  63129. +
  63130. +#endif /* !_CDEFS_H_ */
  63131. diff -ru --new-file baseline/fsf/emacs/unixlib/include/sys/fcntl.h amiga/fsf/emacs/unixlib/include/sys/fcntl.h
  63132. --- baseline/fsf/emacs/unixlib/include/sys/fcntl.h    Wed Dec 31 17:00:00 1969
  63133. +++ amiga/fsf/emacs/unixlib/include/sys/fcntl.h    Sun Oct 15 17:15:20 1995
  63134. @@ -0,0 +1,193 @@
  63135. +/*-
  63136. + * Copyright (c) 1983, 1990 The Regents of the University of California.
  63137. + * All rights reserved.
  63138. + *
  63139. + * Redistribution and use in source and binary forms, with or without
  63140. + * modification, are permitted provided that the following conditions
  63141. + * are met:
  63142. + * 1. Redistributions of source code must retain the above copyright
  63143. + *    notice, this list of conditions and the following disclaimer.
  63144. + * 2. Redistributions in binary form must reproduce the above copyright
  63145. + *    notice, this list of conditions and the following disclaimer in the
  63146. + *    documentation and/or other materials provided with the distribution.
  63147. + * 3. All advertising materials mentioning features or use of this software
  63148. + *    must display the following acknowledgement:
  63149. + *    This product includes software developed by the University of
  63150. + *    California, Berkeley and its contributors.
  63151. + * 4. Neither the name of the University nor the names of its contributors
  63152. + *    may be used to endorse or promote products derived from this software
  63153. + *    without specific prior written permission.
  63154. + *
  63155. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  63156. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  63157. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  63158. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  63159. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  63160. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  63161. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  63162. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  63163. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  63164. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  63165. + * SUCH DAMAGE.
  63166. + *
  63167. + *    @(#)fcntl.h    5.14 (Berkeley) 7/1/91
  63168. + */
  63169. +
  63170. +#ifndef _FCNTL_H_
  63171. +#define    _FCNTL_H_
  63172. +
  63173. +/*
  63174. + * This file includes the definitions for open and fcntl
  63175. + * described by POSIX for <fcntl.h>; it also includes
  63176. + * related kernel definitions.
  63177. + */
  63178. +
  63179. +#ifndef KERNEL
  63180. +#include <sys/types.h>
  63181. +#endif
  63182. +
  63183. +/*
  63184. + * File status flags: these are used by open(2), fcntl(2).
  63185. + * They are also used (indirectly) in the kernel file structure f_flags,
  63186. + * which is a superset of the open/fcntl flags.  Open flags and f_flags
  63187. + * are inter-convertible using OFLAGS(fflags) and FFLAGS(oflags).
  63188. + * Open/fcntl flags begin with O_; kernel-internal flags begin with F.
  63189. + */
  63190. +/* open-only flags */
  63191. +#define    O_RDONLY    0x0000        /* open for reading only */
  63192. +#define    O_WRONLY    0x0001        /* open for writing only */
  63193. +#define    O_RDWR        0x0002        /* open for reading and writing */
  63194. +#define    O_ACCMODE    0x0003        /* mask for above modes */
  63195. +
  63196. +#ifdef KERNEL
  63197. +/*
  63198. + * Kernel encoding of open mode; separate read and write bits
  63199. + * that are independently testable: 1 greater than the above.
  63200. + */
  63201. +#define    FREAD        0x0001
  63202. +#define    FWRITE        0x0002
  63203. +#endif
  63204. +#define    O_NONBLOCK    0x0004        /* no delay */
  63205. +#define    O_APPEND    0x0008        /* set append mode */
  63206. +#ifndef _POSIX_SOURCE
  63207. +#define    O_SHLOCK    0x0010        /* open with shared file lock */
  63208. +#define    O_EXLOCK    0x0020        /* open with exclusive file lock */
  63209. +#define    O_ASYNC        0x0040        /* signal pgrp when data ready */
  63210. +#define    O_FSYNC        0x0080        /* synchronous writes */
  63211. +#endif
  63212. +#define    O_CREAT        0x0100        /* create if nonexistant */
  63213. +#define    O_TRUNC        0x0200        /* truncate to zero length */
  63214. +#define    O_EXCL        0x0400        /* error if already exists */
  63215. +#ifdef KERNEL
  63216. +#define    FMARK        0x1000        /* mark during gc() */
  63217. +#define    FDEFER        0x2000        /* defer for next gc pass */
  63218. +#define    FHASLOCK    0x4000        /* descriptor holds advisory lock */
  63219. +#endif
  63220. +
  63221. +/* defined by POSIX 1003.1; BSD default, so no bit required */
  63222. +#define    O_NOCTTY    0        /* don't assign controlling terminal */
  63223. +
  63224. +#ifdef KERNEL
  63225. +/* convert from open() flags to/from fflags; convert O_RD/WR to FREAD/FWRITE */
  63226. +#define    FFLAGS(oflags)    ((oflags) + 1)
  63227. +#define    OFLAGS(fflags)    ((fflags) - 1)
  63228. +
  63229. +/* bits to save after open */
  63230. +#define    FMASK        (FREAD|FWRITE|FAPPEND|FASYNC|FFSYNC|FNONBLOCK)
  63231. +/* bits settable by fcntl(F_SETFL, ...) */
  63232. +#define    FCNTLFLAGS    (FAPPEND|FASYNC|FFSYNC|FNONBLOCK)
  63233. +#endif
  63234. +
  63235. +/*
  63236. + * The O_* flags used to have only F* names, which were used in the kernel
  63237. + * and by fcntl.  We retain the F* names for the kernel f_flags field
  63238. + * and for backward compatibility for fcntl.
  63239. + */
  63240. +#ifndef _POSIX_SOURCE
  63241. +#define    FAPPEND        O_APPEND    /* kernel/compat */
  63242. +#define    FASYNC        O_ASYNC        /* kernel/compat */
  63243. +#define    FFSYNC        O_FSYNC        /* kernel */
  63244. +#define    FNONBLOCK    O_NONBLOCK    /* kernel */
  63245. +#define    FNDELAY        O_NONBLOCK    /* compat */
  63246. +#define    O_NDELAY    O_NONBLOCK    /* compat */
  63247. +#endif
  63248. +
  63249. +/*
  63250. + * Constants used for fcntl(2)
  63251. + */
  63252. +
  63253. +/* command values */
  63254. +#define    F_DUPFD        0        /* duplicate file descriptor */
  63255. +#define    F_GETFD        1        /* get file descriptor flags */
  63256. +#define    F_SETFD        2        /* set file descriptor flags */
  63257. +#define    F_GETFL        3        /* get file status flags */
  63258. +#define    F_SETFL        4        /* set file status flags */
  63259. +#ifndef _POSIX_SOURCE
  63260. +#define    F_GETOWN    5        /* get SIGIO/SIGURG proc/pgrp */
  63261. +#define F_SETOWN    6        /* set SIGIO/SIGURG proc/pgrp */
  63262. +#endif
  63263. +#define    F_GETLK        7        /* get record locking information */
  63264. +#define    F_SETLK        8        /* set record locking information */
  63265. +#define    F_SETLKW    9        /* F_SETLK; wait if blocked */
  63266. +
  63267. +/* file descriptor flags (F_GETFD, F_SETFD) */
  63268. +#define    FD_CLOEXEC    1        /* close-on-exec flag */
  63269. +
  63270. +/* record locking flags (F_GETLK, F_SETLK, F_SETLKW) */
  63271. +#define    F_RDLCK        1        /* shared or read lock */
  63272. +#define    F_UNLCK        2        /* unlock */
  63273. +#define    F_WRLCK        3        /* exclusive or write lock */
  63274. +#ifdef KERNEL
  63275. +#define    F_WAIT        0x010        /* Wait until lock is granted */
  63276. +#define    F_FLOCK        0x020         /* Use flock(2) semantics for lock */
  63277. +#define    F_POSIX        0x040         /* Use POSIX semantics for lock */
  63278. +#endif
  63279. +
  63280. +/*
  63281. + * Advisory file segment locking data type -
  63282. + * information passed to system by user
  63283. + */
  63284. +struct flock {
  63285. +    short    l_type;        /* lock type: read/write, etc. */
  63286. +    short    l_whence;    /* type of l_start */
  63287. +    off_t    l_start;    /* starting offset */
  63288. +    off_t    l_len;        /* len = 0 means until end of file */
  63289. +    pid_t    l_pid;        /* lock owner */
  63290. +};
  63291. +
  63292. +
  63293. +#ifndef _POSIX_SOURCE
  63294. +/* lock operations for flock(2) */
  63295. +#define    LOCK_SH        0x01        /* shared file lock */
  63296. +#define    LOCK_EX        0x02        /* exclusive file lock */
  63297. +#define    LOCK_NB        0x04        /* don't block when locking */
  63298. +#define    LOCK_UN        0x08        /* unlock file */
  63299. +#endif
  63300. +
  63301. +
  63302. +#ifndef KERNEL
  63303. +#include <sys/cdefs.h>
  63304. +
  63305. +__BEGIN_DECLS
  63306. +int    open __P((const char *, int, ...));
  63307. +int    creat __P((const char *, mode_t));
  63308. +int    fcntl __P((int, int, ...));
  63309. +#ifndef _POSIX_SOURCE
  63310. +int    flock __P((int, int));
  63311. +#endif /* !_POSIX_SOURCE */
  63312. +__END_DECLS
  63313. +#endif
  63314. +
  63315. +#ifdef AMIGA
  63316. +#define O_NO_CLOSE 0x100    /* An available value, means don't close
  63317. +                   underlying resource */
  63318. +/* Note: S_ISVTX (sticky) is mapped to the pure bit.
  63319. +         The amiga script bit is mapped to world execute ...
  63320. +     user S_IWRITE is the and of the amiga write & delete bits.
  63321. +     group S_IWRITE is the amiga write bit.
  63322. +     world S_IWRITE is the amiga delete bit.
  63323. +     We always set the archive bit off.
  63324. +*/
  63325. +#endif
  63326. +
  63327. +#endif /* !_FCNTL_H_ */
  63328. diff -ru --new-file baseline/fsf/emacs/unixlib/include/sys/file.h amiga/fsf/emacs/unixlib/include/sys/file.h
  63329. --- baseline/fsf/emacs/unixlib/include/sys/file.h    Wed Dec 31 17:00:00 1969
  63330. +++ amiga/fsf/emacs/unixlib/include/sys/file.h    Sun Oct 15 17:15:21 1995
  63331. @@ -0,0 +1,2 @@
  63332. +#include <fcntl.h>
  63333. +#include <sys/unistd.h>
  63334. diff -ru --new-file baseline/fsf/emacs/unixlib/include/sys/filio.h amiga/fsf/emacs/unixlib/include/sys/filio.h
  63335. --- baseline/fsf/emacs/unixlib/include/sys/filio.h    Wed Dec 31 17:00:00 1969
  63336. +++ amiga/fsf/emacs/unixlib/include/sys/filio.h    Sun Oct 15 17:15:23 1995
  63337. @@ -0,0 +1,3 @@
  63338. +#define FIONBIO 0        /* ioctl to change non blocking mode
  63339. +                   data (an int *) is a pointer a boolean,
  63340. +                   TRUE for non-blocking io */
  63341. diff -ru --new-file baseline/fsf/emacs/unixlib/include/sys/ioctl.h amiga/fsf/emacs/unixlib/include/sys/ioctl.h
  63342. --- baseline/fsf/emacs/unixlib/include/sys/ioctl.h    Wed Dec 31 17:00:00 1969
  63343. +++ amiga/fsf/emacs/unixlib/include/sys/ioctl.h    Sun Oct 15 17:15:25 1995
  63344. @@ -0,0 +1 @@
  63345. +#include <sys/termios.h>
  63346. diff -ru --new-file baseline/fsf/emacs/unixlib/include/sys/param.h amiga/fsf/emacs/unixlib/include/sys/param.h
  63347. --- baseline/fsf/emacs/unixlib/include/sys/param.h    Wed Dec 31 17:00:00 1969
  63348. +++ amiga/fsf/emacs/unixlib/include/sys/param.h    Sun Oct 15 17:15:27 1995
  63349. @@ -0,0 +1,11 @@
  63350. +#ifndef _PARAM_H
  63351. +#define _PARAM_H
  63352. +
  63353. +#define MAXPATHLEN 1024
  63354. +#define DEV_BSIZE 512
  63355. +
  63356. +#ifndef NULL
  63357. +#define NULL (0)
  63358. +#endif
  63359. +
  63360. +#endif
  63361. diff -ru --new-file baseline/fsf/emacs/unixlib/include/sys/socket.h amiga/fsf/emacs/unixlib/include/sys/socket.h
  63362. --- baseline/fsf/emacs/unixlib/include/sys/socket.h    Wed Dec 31 17:00:00 1969
  63363. +++ amiga/fsf/emacs/unixlib/include/sys/socket.h    Sun Oct 15 17:15:28 1995
  63364. @@ -0,0 +1,4 @@
  63365. +/* Support for socket pairs only */
  63366. +
  63367. +#define AF_UNIX 0
  63368. +#define SOCK_STREAM 0
  63369. diff -ru --new-file baseline/fsf/emacs/unixlib/include/sys/stat.h amiga/fsf/emacs/unixlib/include/sys/stat.h
  63370. --- baseline/fsf/emacs/unixlib/include/sys/stat.h    Wed Dec 31 17:00:00 1969
  63371. +++ amiga/fsf/emacs/unixlib/include/sys/stat.h    Sun Oct 15 17:15:30 1995
  63372. @@ -0,0 +1,133 @@
  63373. +#ifndef _STAT_H
  63374. +#define _STAT_H
  63375. +
  63376. +/*-
  63377. + * Copyright (c) 1982, 1986, 1989 The Regents of the University of California.
  63378. + * All rights reserved.
  63379. + *
  63380. + * Redistribution and use in source and binary forms, with or without
  63381. + * modification, are permitted provided that the following conditions
  63382. + * are met:
  63383. + * 1. Redistributions of source code must retain the above copyright
  63384. + *    notice, this list of conditions and the following disclaimer.
  63385. + * 2. Redistributions in binary form must reproduce the above copyright
  63386. + *    notice, this list of conditions and the following disclaimer in the
  63387. + *    documentation and/or other materials provided with the distribution.
  63388. + * 3. All advertising materials mentioning features or use of this software
  63389. + *    must display the following acknowledgement:
  63390. + *    This product includes software developed by the University of
  63391. + *    California, Berkeley and its contributors.
  63392. + * 4. Neither the name of the University nor the names of its contributors
  63393. + *    may be used to endorse or promote products derived from this software
  63394. + *    without specific prior written permission.
  63395. + *
  63396. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  63397. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  63398. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  63399. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  63400. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  63401. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  63402. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  63403. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  63404. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  63405. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  63406. + * SUCH DAMAGE.
  63407. + *
  63408. + *    @(#)stat.h    7.11 (Berkeley) 3/3/91
  63409. + */
  63410. +
  63411. +struct stat
  63412. +{
  63413. +    dev_t    st_dev;            /* inode's device */
  63414. +    ino_t    st_ino;            /* inode's number */
  63415. +    mode_t    st_mode;        /* inode protection mode */
  63416. +    nlink_t    st_nlink;        /* number of hard links */
  63417. +    uid_t    st_uid;            /* user ID of the file's owner */
  63418. +    gid_t    st_gid;            /* group ID of the file's group */
  63419. +    dev_t    st_rdev;        /* device type */
  63420. +    off_t    st_size;        /* file size, in bytes */
  63421. +    time_t    st_atime;        /* time of last access */
  63422. +    long    st_spare1;
  63423. +    time_t    st_mtime;        /* time of last data modification */
  63424. +    long    st_spare2;
  63425. +    time_t    st_ctime;        /* time of last file status change */
  63426. +    long    st_spare3;
  63427. +    long    st_blksize;        /* optimal blocksize for I/O */
  63428. +    long    st_blocks;        /* blocks allocated for file */
  63429. +    u_long    st_flags;        /* user defined flags for file */
  63430. +    u_long    st_gen;            /* file generation number */
  63431. +};
  63432. +
  63433. +#define    S_ISUID    0004000            /* set user id on execution */
  63434. +#define    S_ISGID    0002000            /* set group id on execution */
  63435. +#ifndef _POSIX_SOURCE
  63436. +#define    S_ISTXT    0001000            /* sticky bit */
  63437. +#endif
  63438. +
  63439. +#define    S_IRWXU    0000700            /* RWX mask for owner */
  63440. +#define    S_IRUSR    0000400            /* R for owner */
  63441. +#define    S_IWUSR    0000200            /* W for owner */
  63442. +#define    S_IXUSR    0000100            /* X for owner */
  63443. +
  63444. +#ifndef _POSIX_SOURCE
  63445. +#define    S_IREAD        S_IRUSR
  63446. +#define    S_IWRITE    S_IWUSR
  63447. +#define    S_IEXEC        S_IXUSR
  63448. +#endif
  63449. +
  63450. +#define    S_IRWXG    0000070            /* RWX mask for group */
  63451. +#define    S_IRGRP    0000040            /* R for group */
  63452. +#define    S_IWGRP    0000020            /* W for group */
  63453. +#define    S_IXGRP    0000010            /* X for group */
  63454. +
  63455. +#define    S_IRWXO    0000007            /* RWX mask for other */
  63456. +#define    S_IROTH    0000004            /* R for other */
  63457. +#define    S_IWOTH    0000002            /* W for other */
  63458. +#define    S_IXOTH    0000001            /* X for other */
  63459. +
  63460. +#ifndef _POSIX_SOURCE
  63461. +#define    S_IFMT     0170000        /* type of file */
  63462. +#define    S_IFIFO     0010000        /* named pipe (fifo) */
  63463. +#define    S_IFCHR     0020000        /* character special */
  63464. +#define    S_IFDIR     0040000        /* directory */
  63465. +#define    S_IFBLK     0060000        /* block special */
  63466. +#define    S_IFREG     0100000        /* regular */
  63467. +#define    S_IFLNK     0120000        /* symbolic link */
  63468. +#define    S_IFSOCK 0140000        /* socket */
  63469. +
  63470. +#define    S_ISVTX     0001000        /* save swapped text even after use */
  63471. +
  63472. +#define S_BLKSIZE    512        /* block size used in the stat struct */
  63473. +
  63474. +                    /* 0666 */
  63475. +#define    DEFFILEMODE    (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
  63476. +#endif
  63477. +
  63478. +#define    S_ISDIR(m)    ((m & 0170000) == 0040000)    /* directory */
  63479. +#define    S_ISCHR(m)    ((m & 0170000) == 0020000)    /* char special */
  63480. +#define    S_ISBLK(m)    ((m & 0170000) == 0060000)    /* block special */
  63481. +#define    S_ISREG(m)    ((m & 0170000) == 0100000)    /* regular file */
  63482. +#define    S_ISFIFO(m)    ((m & 0170000) == 0010000)    /* fifo */
  63483. +#ifndef _POSIX_SOURCE
  63484. +#define    S_ISLNK(m)    ((m & 0170000) == 0120000)    /* symbolic link */
  63485. +#define    S_ISSOCK(m)    ((m & 0170000) == 0140000)    /* socket */
  63486. +#endif
  63487. +
  63488. +#ifndef KERNEL
  63489. +#include <sys/cdefs.h>
  63490. +
  63491. +__BEGIN_DECLS
  63492. +mode_t    umask __P((mode_t));
  63493. +int    chmod __P((const char *, mode_t));
  63494. +int    fstat __P((int, struct stat *));
  63495. +int    mkdir __P((char *, mode_t));
  63496. +int    mkfifo __P((char *, mode_t));
  63497. +int    stat __P((char *, struct stat *));
  63498. +#ifndef _POSIX_SOURCE
  63499. +int    fchmod __P((int, mode_t));
  63500. +int    lstat __P((char *, struct stat *));
  63501. +#endif /* not POSIX */
  63502. +__END_DECLS
  63503. +#endif
  63504. +
  63505. +#endif
  63506. diff -ru --new-file baseline/fsf/emacs/unixlib/include/sys/termios.h amiga/fsf/emacs/unixlib/include/sys/termios.h
  63507. --- baseline/fsf/emacs/unixlib/include/sys/termios.h    Wed Dec 31 17:00:00 1969
  63508. +++ amiga/fsf/emacs/unixlib/include/sys/termios.h    Sun Oct 15 17:15:31 1995
  63509. @@ -0,0 +1,15 @@
  63510. +#ifndef _TERMIOS_H
  63511. +#define _TERMIOS_H
  63512. +
  63513. +struct winsize {
  63514. +  unsigned short ws_row;    /* rows, in characters */
  63515. +  unsigned short ws_col;    /* columns, in characters */
  63516. +  unsigned short ws_xpixel;    /* horizontal size, pixels - not used */
  63517. +  unsigned short ws_ypixel;    /* vertical size, pixels - not used */
  63518. +};
  63519. +
  63520. +#define _TERMIO_IOCTL_BASE 1024
  63521. +
  63522. +#define TIOCGWINSZ (_TERMIO_IOCTL_BASE + 0)
  63523. +
  63524. +#endif
  63525. diff -ru --new-file baseline/fsf/emacs/unixlib/include/sys/time.h amiga/fsf/emacs/unixlib/include/sys/time.h
  63526. --- baseline/fsf/emacs/unixlib/include/sys/time.h    Wed Dec 31 17:00:00 1969
  63527. +++ amiga/fsf/emacs/unixlib/include/sys/time.h    Sun Oct 15 17:15:33 1995
  63528. @@ -0,0 +1,90 @@
  63529. +/*
  63530. + * Copyright (c) 1982, 1986 The Regents of the University of California.
  63531. + * All rights reserved.
  63532. + *
  63533. + * Redistribution and use in source and binary forms, with or without
  63534. + * modification, are permitted provided that the following conditions
  63535. + * are met:
  63536. + * 1. Redistributions of source code must retain the above copyright
  63537. + *    notice, this list of conditions and the following disclaimer.
  63538. + * 2. Redistributions in binary form must reproduce the above copyright
  63539. + *    notice, this list of conditions and the following disclaimer in the
  63540. + *    documentation and/or other materials provided with the distribution.
  63541. + * 3. All advertising materials mentioning features or use of this software
  63542. + *    must display the following acknowledgement:
  63543. + *    This product includes software developed by the University of
  63544. + *    California, Berkeley and its contributors.
  63545. + * 4. Neither the name of the University nor the names of its contributors
  63546. + *    may be used to endorse or promote products derived from this software
  63547. + *    without specific prior written permission.
  63548. + *
  63549. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  63550. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  63551. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  63552. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  63553. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  63554. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  63555. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  63556. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  63557. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  63558. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  63559. + * SUCH DAMAGE.
  63560. + *
  63561. + *    @(#)time.h    7.6 (Berkeley) 2/22/91
  63562. + */
  63563. +
  63564. +#ifndef _SYS_TIME_H_
  63565. +#define _SYS_TIME_H_
  63566. +
  63567. +/*
  63568. + * Structure returned by gettimeofday(2) system call,
  63569. + * and used in other calls.
  63570. + */
  63571. +/* This defines a struct timeval, with basically equivalent fields. So we use it */
  63572. +#undef LONGBITS            /* This is for emacs's sake */
  63573. +#include <devices/timer.h>
  63574. +#undef LONGBITS
  63575. +/* But we need these defines */
  63576. +#define tv_sec tv_secs
  63577. +#define tv_usec tv_micro
  63578. +
  63579. +struct timezone {
  63580. +    int    tz_minuteswest;    /* minutes west of Greenwich */
  63581. +    int    tz_dsttime;    /* type of dst correction */
  63582. +};
  63583. +#define    DST_NONE    0    /* not on dst */
  63584. +#define    DST_USA        1    /* USA style dst */
  63585. +#define    DST_AUST    2    /* Australian style dst */
  63586. +#define    DST_WET        3    /* Western European dst */
  63587. +#define    DST_MET        4    /* Middle European dst */
  63588. +#define    DST_EET        5    /* Eastern European dst */
  63589. +#define    DST_CAN        6    /* Canada */
  63590. +
  63591. +/*
  63592. + * Operations on timevals.
  63593. + *
  63594. + * NB: timercmp does not work for >= or <=.
  63595. + */
  63596. +#define    timerisset(tvp)        ((tvp)->tv_sec || (tvp)->tv_usec)
  63597. +#define    timercmp(tvp, uvp, cmp)    \
  63598. +    ((tvp)->tv_sec cmp (uvp)->tv_sec || \
  63599. +     (tvp)->tv_sec == (uvp)->tv_sec && (tvp)->tv_usec cmp (uvp)->tv_usec)
  63600. +#define    timerclear(tvp)        (tvp)->tv_sec = (tvp)->tv_usec = 0
  63601. +
  63602. +#ifndef KERNEL
  63603. +#include <time.h>
  63604. +
  63605. +#ifndef _POSIX_SOURCE
  63606. +#include <sys/cdefs.h>
  63607. +
  63608. +__BEGIN_DECLS
  63609. +int    adjtime __P((const struct timeval *, struct timeval *));
  63610. +int    gettimeofday __P((struct timeval *, struct timezone *));
  63611. +int    settimeofday __P((const struct timeval *, const struct timezone *));
  63612. +int    utimes __P((const char *, const struct timeval *));
  63613. +__END_DECLS
  63614. +#endif /* !POSIX */
  63615. +
  63616. +#endif /* !KERNEL */
  63617. +
  63618. +#endif /* !_SYS_TIME_H_ */
  63619. diff -ru --new-file baseline/fsf/emacs/unixlib/include/sys/timeb.h amiga/fsf/emacs/unixlib/include/sys/timeb.h
  63620. --- baseline/fsf/emacs/unixlib/include/sys/timeb.h    Wed Dec 31 17:00:00 1969
  63621. +++ amiga/fsf/emacs/unixlib/include/sys/timeb.h    Sun Oct 15 17:15:35 1995
  63622. @@ -0,0 +1,12 @@
  63623. +#ifndef _TIMEB_H
  63624. +#define _TIMEB_H
  63625. +
  63626. +struct timeb
  63627. +{
  63628. +  time_t   time;
  63629. +  unsigned short millitm;
  63630. +  short    timezone;
  63631. +  short    dstflag;
  63632. +};
  63633. +
  63634. +#endif
  63635. diff -ru --new-file baseline/fsf/emacs/unixlib/include/sys/types.h amiga/fsf/emacs/unixlib/include/sys/types.h
  63636. --- baseline/fsf/emacs/unixlib/include/sys/types.h    Wed Dec 31 17:00:00 1969
  63637. +++ amiga/fsf/emacs/unixlib/include/sys/types.h    Sun Oct 15 17:15:36 1995
  63638. @@ -0,0 +1,90 @@
  63639. +/*-
  63640. + * Copyright (c) 1982, 1986, 1991 The Regents of the University of California.
  63641. + * All rights reserved.
  63642. + *
  63643. + * Redistribution and use in source and binary forms, with or without
  63644. + * modification, are permitted provided that the following conditions
  63645. + * are met:
  63646. + * 1. Redistributions of source code must retain the above copyright
  63647. + *    notice, this list of conditions and the following disclaimer.
  63648. + * 2. Redistributions in binary form must reproduce the above copyright
  63649. + *    notice, this list of conditions and the following disclaimer in the
  63650. + *    documentation and/or other materials provided with the distribution.
  63651. + * 3. All advertising materials mentioning features or use of this software
  63652. + *    must display the following acknowledgement:
  63653. + *    This product includes software developed by the University of
  63654. + *    California, Berkeley and its contributors.
  63655. + * 4. Neither the name of the University nor the names of its contributors
  63656. + *    may be used to endorse or promote products derived from this software
  63657. + *    without specific prior written permission.
  63658. + *
  63659. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  63660. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  63661. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  63662. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  63663. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  63664. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  63665. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  63666. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  63667. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  63668. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  63669. + * SUCH DAMAGE.
  63670. + *
  63671. + *    @(#)types.h    7.17 (Berkeley) 5/6/91
  63672. + */
  63673. +
  63674. +#ifndef _TYPES_H_
  63675. +#define    _TYPES_H_
  63676. +
  63677. +typedef    unsigned char    u_char;
  63678. +typedef    unsigned short    u_short;
  63679. +typedef    unsigned int    u_int;
  63680. +typedef    unsigned long    u_long;
  63681. +typedef    unsigned short    ushort;        /* Sys V compatibility */
  63682. +
  63683. +typedef    char *    caddr_t;        /* core address */
  63684. +typedef    long    daddr_t;        /* disk address */
  63685. +typedef    long    dev_t;            /* device number */
  63686. +typedef    u_long    ino_t;            /* inode number */
  63687. +typedef    long    off_t;            /* file offset (should be a quad) */
  63688. +typedef    u_short    nlink_t;        /* link count */
  63689. +typedef    long    swblk_t;        /* swap offset */
  63690. +typedef    long    segsz_t;        /* segment size */
  63691. +typedef    u_short    uid_t;            /* user id */
  63692. +typedef    u_short    gid_t;            /* group id */
  63693. +typedef    int    pid_t;            /* process id */
  63694. +typedef    int    mode_t;            /* permissions */
  63695. +typedef u_long    fixpt_t;        /* fixed point number */
  63696. +
  63697. +#ifndef _POSIX_SOURCE
  63698. +typedef    struct    _uquad    { u_long val[2]; } u_quad;
  63699. +typedef    struct    _quad    {   long val[2]; } quad;
  63700. +typedef    long *    qaddr_t;    /* should be typedef quad * qaddr_t; */
  63701. +
  63702. +#define    major(x)    ((int)(((u_int)(x) >> 8)&0xff))    /* major number */
  63703. +#define    minor(x)    ((int)((x)&0xff))        /* minor number */
  63704. +#define    makedev(x,y)    ((dev_t)(((x)<<8) | (y)))    /* create dev_t */
  63705. +#endif
  63706. +
  63707. +typedef    long clock_t;
  63708. +typedef long time_t;
  63709. +#ifndef _SIZE_T
  63710. +#define _SIZE_T
  63711. +typedef    unsigned int size_t;
  63712. +#endif
  63713. +
  63714. +#ifndef _POSIX_SOURCE
  63715. +/*
  63716. + * My implementation only allows 32 fds in select.
  63717. + */
  63718. +#define    FD_SETSIZE    32
  63719. +
  63720. +typedef    long fd_set;
  63721. +
  63722. +#define    FD_SET(n, p)    (*(p) |= (1 << (n)))
  63723. +#define    FD_CLR(n, p)    (*(p) &= ~(1 << (n)))
  63724. +#define    FD_ISSET(n, p)    (*(p) & (1 << (n)))
  63725. +#define    FD_ZERO(p)    bzero((char *)(p), sizeof(*(p)))
  63726. +
  63727. +#endif /* !_POSIX_SOURCE */
  63728. +#endif /* !_TYPES_H_ */
  63729. diff -ru --new-file baseline/fsf/emacs/unixlib/include/sys/unistd.h amiga/fsf/emacs/unixlib/include/sys/unistd.h
  63730. --- baseline/fsf/emacs/unixlib/include/sys/unistd.h    Wed Dec 31 17:00:00 1969
  63731. +++ amiga/fsf/emacs/unixlib/include/sys/unistd.h    Sun Oct 15 17:15:38 1995
  63732. @@ -0,0 +1,61 @@
  63733. +/*
  63734. + * Copyright (c) 1989 The Regents of the University of California.
  63735. + * All rights reserved.
  63736. + *
  63737. + * Redistribution and use in source and binary forms, with or without
  63738. + * modification, are permitted provided that the following conditions
  63739. + * are met:
  63740. + * 1. Redistributions of source code must retain the above copyright
  63741. + *    notice, this list of conditions and the following disclaimer.
  63742. + * 2. Redistributions in binary form must reproduce the above copyright
  63743. + *    notice, this list of conditions and the following disclaimer in the
  63744. + *    documentation and/or other materials provided with the distribution.
  63745. + * 3. All advertising materials mentioning features or use of this software
  63746. + *    must display the following acknowledgement:
  63747. + *    This product includes software developed by the University of
  63748. + *    California, Berkeley and its contributors.
  63749. + * 4. Neither the name of the University nor the names of its contributors
  63750. + *    may be used to endorse or promote products derived from this software
  63751. + *    without specific prior written permission.
  63752. + *
  63753. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  63754. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  63755. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  63756. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  63757. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  63758. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  63759. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  63760. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  63761. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  63762. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  63763. + * SUCH DAMAGE.
  63764. + *
  63765. + *    @(#)unistd.h    5.14 (Berkeley) 4/1/91
  63766. + */
  63767. +
  63768. +#ifndef _SYS_UNISTD_H_
  63769. +#define    _SYS_UNISTD_H_
  63770. +
  63771. +/* compile-time symbolic constants */
  63772. +
  63773. +/* access function */
  63774. +#ifndef F_OK
  63775. +#define    F_OK        0    /* test for existence of file */
  63776. +#define    X_OK        0x01    /* test for execute or search permission */
  63777. +#define    W_OK        0x02    /* test for write permission */
  63778. +#define    R_OK        0x04    /* test for read permission */
  63779. +#endif
  63780. +
  63781. +/* whence values for lseek(2) */
  63782. +#define    SEEK_SET    0    /* set file offset to offset */
  63783. +#define    SEEK_CUR    1    /* set file offset to current plus offset */
  63784. +#define    SEEK_END    2    /* set file offset to EOF plus offset */
  63785. +
  63786. +#ifndef _POSIX_SOURCE
  63787. +/* whence values for lseek(2); renamed by POSIX 1003.1 */
  63788. +#define    L_SET        SEEK_SET
  63789. +#define    L_INCR        SEEK_CUR
  63790. +#define    L_XTND        SEEK_END
  63791. +#endif
  63792. +
  63793. +#endif /* !_SYS_UNISTD_H_ */
  63794. diff -ru --new-file baseline/fsf/emacs/unixlib/include/sys/vlimit.h amiga/fsf/emacs/unixlib/include/sys/vlimit.h
  63795. --- baseline/fsf/emacs/unixlib/include/sys/vlimit.h    Wed Dec 31 17:00:00 1969
  63796. +++ amiga/fsf/emacs/unixlib/include/sys/vlimit.h    Sun Oct 15 17:15:40 1995
  63797. @@ -0,0 +1,2 @@
  63798. +/* Dummy for Emacs so that we can run on VMS... */
  63799. +#define LIM_DATA 0
  63800. diff -ru --new-file baseline/fsf/emacs/unixlib/include/sys/wait.h amiga/fsf/emacs/unixlib/include/sys/wait.h
  63801. --- baseline/fsf/emacs/unixlib/include/sys/wait.h    Wed Dec 31 17:00:00 1969
  63802. +++ amiga/fsf/emacs/unixlib/include/sys/wait.h    Sun Oct 15 17:15:42 1995
  63803. @@ -0,0 +1,82 @@
  63804. +/*
  63805. + * Copyright (c) 1982, 1986, 1989 The Regents of the University of California.
  63806. + * All rights reserved.
  63807. + *
  63808. + * Redistribution and use in source and binary forms, with or without
  63809. + * modification, are permitted provided that the following conditions
  63810. + * are met:
  63811. + * 1. Redistributions of source code must retain the above copyright
  63812. + *    notice, this list of conditions and the following disclaimer.
  63813. + * 2. Redistributions in binary form must reproduce the above copyright
  63814. + *    notice, this list of conditions and the following disclaimer in the
  63815. + *    documentation and/or other materials provided with the distribution.
  63816. + * 3. All advertising materials mentioning features or use of this software
  63817. + *    must display the following acknowledgement:
  63818. + *    This product includes software developed by the University of
  63819. + *    California, Berkeley and its contributors.
  63820. + * 4. Neither the name of the University nor the names of its contributors
  63821. + *    may be used to endorse or promote products derived from this software
  63822. + *    without specific prior written permission.
  63823. + *
  63824. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  63825. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  63826. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  63827. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  63828. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  63829. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  63830. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  63831. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  63832. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  63833. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  63834. + * SUCH DAMAGE.
  63835. + *
  63836. + *    @(#)wait.h    7.17 (Berkeley) 6/19/91
  63837. + */
  63838. +
  63839. +/*
  63840. + * This file holds definitions relevent to the wait4 system call
  63841. + * and the alternate interfaces that use it (wait, wait3, waitpid).
  63842. + */
  63843. +
  63844. +/*
  63845. + * Macros to test the exit status returned by wait
  63846. + * and extract the relevant values.
  63847. + */
  63848. +#define    _W_INT(i)    (i)
  63849. +
  63850. +#define    _WSTATUS(x)    (_W_INT(x) & 0177)
  63851. +#define    _WSTOPPED    0177        /* _WSTATUS if process is stopped */
  63852. +#define WIFSTOPPED(x)    (_WSTATUS(x) == _WSTOPPED)
  63853. +#define WSTOPSIG(x)    (_W_INT(x) >> 8)
  63854. +#define WIFSIGNALED(x)    (_WSTATUS(x) != _WSTOPPED && _WSTATUS(x) != 0)
  63855. +#define WTERMSIG(x)    (_WSTATUS(x))
  63856. +#define WIFEXITED(x)    (_WSTATUS(x) == 0)
  63857. +#define WEXITSTATUS(x)    (_W_INT(x) >> 8)
  63858. +#define    W_EXITCODE(ret, sig)    ((ret) << 8 | (sig))
  63859. +#define    W_STOPCODE(sig)        ((sig) << 8 | _WSTOPPED)
  63860. +
  63861. +/*
  63862. + * Option bits for the second argument of wait4.  WNOHANG causes the
  63863. + * wait to not hang if there are no stopped or terminated processes, rather
  63864. + * returning an error indication in this case (pid==0).  WUNTRACED
  63865. + * indicates that the caller should receive status about untraced children
  63866. + * which stop due to signals.  If children are stopped and a wait without
  63867. + * this option is done, it is as though they were still running... nothing
  63868. + * about them is returned.
  63869. + */
  63870. +#define WNOHANG        1    /* dont hang in wait */
  63871. +#define WUNTRACED    2    /* tell about stopped, untraced children */
  63872. +
  63873. +#ifndef KERNEL
  63874. +#include <sys/types.h>
  63875. +#include <sys/cdefs.h>
  63876. +
  63877. +__BEGIN_DECLS
  63878. +struct rusage;    /* forward declaration */
  63879. +
  63880. +pid_t    wait __P((int *));
  63881. +pid_t    waitpid __P((pid_t, int *, int));
  63882. +pid_t    wait3 __P((int *, int, struct rusage *));
  63883. +pid_t    wait4 __P((pid_t, int *, int, struct rusage *));
  63884. +__END_DECLS
  63885. +#endif
  63886. diff -ru --new-file baseline/fsf/emacs/unixlib/include/time.h amiga/fsf/emacs/unixlib/include/time.h
  63887. --- baseline/fsf/emacs/unixlib/include/time.h    Wed Dec 31 17:00:00 1969
  63888. +++ amiga/fsf/emacs/unixlib/include/time.h    Sun Oct 15 17:14:52 1995
  63889. @@ -0,0 +1,78 @@
  63890. +/*
  63891. + * Copyright (c) 1989 The Regents of the University of California.
  63892. + * All rights reserved.
  63893. + *
  63894. + * Redistribution and use in source and binary forms, with or without
  63895. + * modification, are permitted provided that the following conditions
  63896. + * are met:
  63897. + * 1. Redistributions of source code must retain the above copyright
  63898. + *    notice, this list of conditions and the following disclaimer.
  63899. + * 2. Redistributions in binary form must reproduce the above copyright
  63900. + *    notice, this list of conditions and the following disclaimer in the
  63901. + *    documentation and/or other materials provided with the distribution.
  63902. + * 3. All advertising materials mentioning features or use of this software
  63903. + *    must display the following acknowledgement:
  63904. + *    This product includes software developed by the University of
  63905. + *    California, Berkeley and its contributors.
  63906. + * 4. Neither the name of the University nor the names of its contributors
  63907. + *    may be used to endorse or promote products derived from this software
  63908. + *    without specific prior written permission.
  63909. + *
  63910. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  63911. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  63912. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  63913. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  63914. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  63915. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  63916. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  63917. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  63918. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  63919. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  63920. + * SUCH DAMAGE.
  63921. + *
  63922. + *    @(#)time.h    5.12 (Berkeley) 3/9/91
  63923. + */
  63924. +
  63925. +#ifndef _TIME_H_
  63926. +#define    _TIME_H_
  63927. +
  63928. +#include <sys/types.h>
  63929. +
  63930. +struct tm {
  63931. +    int    tm_sec;        /* seconds after the minute [0-60] */
  63932. +    int    tm_min;        /* minutes after the hour [0-59] */
  63933. +    int    tm_hour;    /* hours since midnight [0-23] */
  63934. +    int    tm_mday;    /* day of the month [1-31] */
  63935. +    int    tm_mon;        /* months since January [0-11] */
  63936. +    int    tm_year;    /* years since 1900 */
  63937. +    int    tm_wday;    /* days since Sunday [0-6] */
  63938. +    int    tm_yday;    /* days since January 1 [0-365] */
  63939. +    int    tm_isdst;    /* Daylight Savings Time flag */
  63940. +    long    tm_gmtoff;    /* offset from CUT in seconds */
  63941. +    char    *tm_zone;    /* timezone abbreviation */
  63942. +};
  63943. +
  63944. +#include <sys/cdefs.h>
  63945. +
  63946. +__BEGIN_DECLS
  63947. +char *asctime __P((const struct tm *));
  63948. +clock_t clock __P((void));
  63949. +char *ctime __P((const time_t *));
  63950. +double difftime __P((time_t, time_t));
  63951. +struct tm *gmtime __P((const time_t *));
  63952. +struct tm *localtime __P((const time_t *));
  63953. +time_t mktime __P((struct tm *));
  63954. +size_t strftime __P((char *, size_t, const char *, const struct tm *));
  63955. +time_t time __P((time_t *));
  63956. +
  63957. +#ifndef _ANSI_SOURCE
  63958. +void tzset __P((void));
  63959. +#endif /* not ANSI */
  63960. +
  63961. +#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
  63962. +/*char *timezone __P((int, int));*/
  63963. +void tzsetwall __P((void));
  63964. +#endif /* neither ANSI nor POSIX */
  63965. +__END_DECLS
  63966. +
  63967. +#endif /* !_TIME_H_ */
  63968. diff -ru --new-file baseline/fsf/emacs/unixlib/include/tzfile.h amiga/fsf/emacs/unixlib/include/tzfile.h
  63969. --- baseline/fsf/emacs/unixlib/include/tzfile.h    Wed Dec 31 17:00:00 1969
  63970. +++ amiga/fsf/emacs/unixlib/include/tzfile.h    Sun Oct 15 17:14:55 1995
  63971. @@ -0,0 +1,151 @@
  63972. +/*
  63973. + * Copyright (c) 1988 Regents of the University of California.
  63974. + * All rights reserved.
  63975. + *
  63976. + * This code is derived from software contributed to Berkeley by
  63977. + * Arthur David Olson of the National Cancer Institute.
  63978. + *
  63979. + * Redistribution and use in source and binary forms, with or without
  63980. + * modification, are permitted provided that the following conditions
  63981. + * are met:
  63982. + * 1. Redistributions of source code must retain the above copyright
  63983. + *    notice, this list of conditions and the following disclaimer.
  63984. + * 2. Redistributions in binary form must reproduce the above copyright
  63985. + *    notice, this list of conditions and the following disclaimer in the
  63986. + *    documentation and/or other materials provided with the distribution.
  63987. + * 3. All advertising materials mentioning features or use of this software
  63988. + *    must display the following acknowledgement:
  63989. + *    This product includes software developed by the University of
  63990. + *    California, Berkeley and its contributors.
  63991. + * 4. Neither the name of the University nor the names of its contributors
  63992. + *    may be used to endorse or promote products derived from this software
  63993. + *    without specific prior written permission.
  63994. + *
  63995. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  63996. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  63997. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  63998. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  63999. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  64000. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  64001. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  64002. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  64003. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  64004. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  64005. + * SUCH DAMAGE.
  64006. + *
  64007. + *    @(#)tzfile.h    5.10 (Berkeley) 4/3/91
  64008. + */
  64009. +
  64010. +#ifndef _TZFILE_H_
  64011. +#define    _TZFILE_H_
  64012. +
  64013. +/*
  64014. + * Information about time zone files.
  64015. + */
  64016. +            /* Time zone object file directory */
  64017. +#define TZDIR        "s:zoneinfo"
  64018. +#define TZDEFAULT    "s:localtime"
  64019. +#define TZDEFRULES    "posixrules"
  64020. +
  64021. +/*
  64022. +** Each file begins with. . .
  64023. +*/
  64024. +
  64025. +struct tzhead {
  64026. +    char    tzh_reserved[24];    /* reserved for future use */
  64027. +    char    tzh_ttisstdcnt[4];    /* coded number of trans. time flags */
  64028. +    char    tzh_leapcnt[4];        /* coded number of leap seconds */
  64029. +    char    tzh_timecnt[4];        /* coded number of transition times */
  64030. +    char    tzh_typecnt[4];        /* coded number of local time types */
  64031. +    char    tzh_charcnt[4];        /* coded number of abbr. chars */
  64032. +};
  64033. +
  64034. +/*
  64035. +** . . .followed by. . .
  64036. +**
  64037. +**    tzh_timecnt (char [4])s        coded transition times a la time(2)
  64038. +**    tzh_timecnt (unsigned char)s    types of local time starting at above
  64039. +**    tzh_typecnt repetitions of
  64040. +**        one (char [4])        coded GMT offset in seconds
  64041. +**        one (unsigned char)    used to set tm_isdst
  64042. +**        one (unsigned char)    that's an abbreviation list index
  64043. +**    tzh_charcnt (char)s        '\0'-terminated zone abbreviations
  64044. +**    tzh_leapcnt repetitions of
  64045. +**        one (char [4])        coded leap second transition times
  64046. +**        one (char [4])        total correction after above
  64047. +**    tzh_ttisstdcnt (char)s        indexed by type; if TRUE, transition
  64048. +**                    time is standard time, if FALSE,
  64049. +**                    transition time is wall clock time
  64050. +**                    if absent, transition times are
  64051. +**                    assumed to be wall clock time
  64052. +*/
  64053. +
  64054. +/*
  64055. +** In the current implementation, "tzset()" refuses to deal with files that
  64056. +** exceed any of the limits below.
  64057. +*/
  64058. +
  64059. +/*
  64060. +** The TZ_MAX_TIMES value below is enough to handle a bit more than a
  64061. +** year's worth of solar time (corrected daily to the nearest second) or
  64062. +** 138 years of Pacific Presidential Election time
  64063. +** (where there are three time zone transitions every fourth year).
  64064. +*/
  64065. +#define TZ_MAX_TIMES    370
  64066. +
  64067. +#define NOSOLAR            /* 4BSD doesn't currently handle solar time */
  64068. +
  64069. +#ifndef NOSOLAR
  64070. +#define TZ_MAX_TYPES    256    /* Limited by what (unsigned char)'s can hold */
  64071. +#else
  64072. +#define TZ_MAX_TYPES    10    /* Maximum number of local time types */
  64073. +#endif
  64074. +
  64075. +#define TZ_MAX_CHARS    50    /* Maximum number of abbreviation characters */
  64076. +
  64077. +#define    TZ_MAX_LEAPS    50    /* Maximum number of leap second corrections */
  64078. +
  64079. +#define SECSPERMIN    60
  64080. +#define MINSPERHOUR    60
  64081. +#define HOURSPERDAY    24
  64082. +#define DAYSPERWEEK    7
  64083. +#define DAYSPERNYEAR    365
  64084. +#define DAYSPERLYEAR    366
  64085. +#define SECSPERHOUR    (SECSPERMIN * MINSPERHOUR)
  64086. +#define SECSPERDAY    ((long) SECSPERHOUR * HOURSPERDAY)
  64087. +#define MONSPERYEAR    12
  64088. +
  64089. +#define TM_SUNDAY    0
  64090. +#define TM_MONDAY    1
  64091. +#define TM_TUESDAY    2
  64092. +#define TM_WEDNESDAY    3
  64093. +#define TM_THURSDAY    4
  64094. +#define TM_FRIDAY    5
  64095. +#define TM_SATURDAY    6
  64096. +
  64097. +#define TM_JANUARY    0
  64098. +#define TM_FEBRUARY    1
  64099. +#define TM_MARCH    2
  64100. +#define TM_APRIL    3
  64101. +#define TM_MAY        4
  64102. +#define TM_JUNE        5
  64103. +#define TM_JULY        6
  64104. +#define TM_AUGUST    7
  64105. +#define TM_SEPTEMBER    8
  64106. +#define TM_OCTOBER    9
  64107. +#define TM_NOVEMBER    10
  64108. +#define TM_DECEMBER    11
  64109. +
  64110. +#define TM_YEAR_BASE    1900
  64111. +
  64112. +#define EPOCH_YEAR    1970
  64113. +#define EPOCH_WDAY    TM_THURSDAY
  64114. +
  64115. +/*
  64116. +** Accurate only for the past couple of centuries;
  64117. +** that will probably do.
  64118. +*/
  64119. +
  64120. +#define isleap(y) (((y) % 4) == 0 && ((y) % 100) != 0 || ((y) % 400) == 0)
  64121. +
  64122. +#endif /* !_TZFILE_H_ */
  64123. diff -ru --new-file baseline/fsf/emacs/unixlib/include/unistd.h amiga/fsf/emacs/unixlib/include/unistd.h
  64124. --- baseline/fsf/emacs/unixlib/include/unistd.h    Wed Dec 31 17:00:00 1969
  64125. +++ amiga/fsf/emacs/unixlib/include/unistd.h    Sun Oct 15 17:14:57 1995
  64126. @@ -0,0 +1,178 @@
  64127. +/*-
  64128. + * Copyright (c) 1991 The Regents of the University of California.
  64129. + * All rights reserved.
  64130. + *
  64131. + * Redistribution and use in source and binary forms, with or without
  64132. + * modification, are permitted provided that the following conditions
  64133. + * are met:
  64134. + * 1. Redistributions of source code must retain the above copyright
  64135. + *    notice, this list of conditions and the following disclaimer.
  64136. + * 2. Redistributions in binary form must reproduce the above copyright
  64137. + *    notice, this list of conditions and the following disclaimer in the
  64138. + *    documentation and/or other materials provided with the distribution.
  64139. + * 3. All advertising materials mentioning features or use of this software
  64140. + *    must display the following acknowledgement:
  64141. + *    This product includes software developed by the University of
  64142. + *    California, Berkeley and its contributors.
  64143. + * 4. Neither the name of the University nor the names of its contributors
  64144. + *    may be used to endorse or promote products derived from this software
  64145. + *    without specific prior written permission.
  64146. + *
  64147. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  64148. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  64149. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  64150. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  64151. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  64152. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  64153. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  64154. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  64155. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  64156. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  64157. + * SUCH DAMAGE.
  64158. + *
  64159. + *    @(#)unistd.h    5.13 (Berkeley) 6/17/91
  64160. + */
  64161. +
  64162. +#ifndef _UNISTD_H_
  64163. +#define    _UNISTD_H_
  64164. +
  64165. +#include <sys/cdefs.h>
  64166. +#include <sys/types.h>
  64167. +#include <sys/unistd.h>
  64168. +
  64169. +#define     STDIN_FILENO    0    /* standard input file descriptor */
  64170. +#define    STDOUT_FILENO    1    /* standard output file descriptor */
  64171. +#define    STDERR_FILENO    2    /* standard error file descriptor */
  64172. +
  64173. +#ifndef NULL
  64174. +#define    NULL        0    /* null pointer constant */
  64175. +#endif
  64176. +
  64177. +typedef    int ssize_t;        /* count of bytes or error indication */
  64178. +
  64179. +__BEGIN_DECLS
  64180. +void     _exit __P((int));
  64181. +int     access __P((const char *, int));
  64182. +u_int     alarm __P((u_int));
  64183. +int     chdir __P((const char *));
  64184. +int     chown __P((const char *, uid_t, gid_t));
  64185. +int     close __P((int));
  64186. +char    *cuserid __P((char *));
  64187. +int     dup __P((int));
  64188. +int     dup2 __P((int, int));
  64189. +int     execl __P((const char *, const char *, ...));
  64190. +int     execle __P((const char *, const char *, ...));
  64191. +int     execlp __P((const char *, const char *, ...));
  64192. +int     execv __P((const char *, char * const *));
  64193. +int     execve __P((const char *, char * const *, char * const *));
  64194. +int     execvp __P((const char *, char * const *));
  64195. +pid_t     fork __P((void));
  64196. +long     fpathconf __P((int, int));        /* not yet */
  64197. +char    *getcwd __P((const char *, int));
  64198. +gid_t     getegid __P((void));
  64199. +uid_t     geteuid __P((void));
  64200. +gid_t     getgid __P((void));
  64201. +int     getgroups __P((int, int *));        /* XXX (gid_t *) */
  64202. +char    *getlogin __P((void));
  64203. +pid_t     getpgrp __P((void));
  64204. +pid_t     getpid __P((void));
  64205. +pid_t     getppid __P((void));
  64206. +uid_t     getuid __P((void));
  64207. +int     isatty __P((int));
  64208. +int     link __P((const char *, const char *));
  64209. +off_t     lseek __P((int, off_t, int));
  64210. +long     pathconf __P((const char *, int));    /* not yet */
  64211. +int     pause __P((void));
  64212. +int     pipe __P((int *));
  64213. +ssize_t     read __P((int, void *, size_t));
  64214. +int     rmdir __P((const char *));
  64215. +int     setgid __P((gid_t));
  64216. +int     setpgid __P((pid_t, pid_t));
  64217. +pid_t     setsid __P((void));
  64218. +int     setuid __P((uid_t));
  64219. +u_int     sleep __P((u_int));
  64220. +long     sysconf __P((int));            /* not yet */
  64221. +pid_t     tcgetpgrp __P((int));
  64222. +int     tcsetpgrp __P((int, pid_t));
  64223. +char    *ttyname __P((int));
  64224. +int     unlink __P((const char *));
  64225. +ssize_t     write __P((int, const void *, size_t));
  64226. +
  64227. +#ifndef    _POSIX_SOURCE
  64228. +
  64229. +/* structure timeval required for select() */
  64230. +#include <sys/time.h>
  64231. +
  64232. +int     acct __P((const char *));
  64233. +int     async_daemon __P((void));
  64234. +char    *brk __P((const char *));
  64235. +int     chflags __P((const char *, long));
  64236. +int     chroot __P((const char *));
  64237. +char    *crypt __P((const char *, const char *));
  64238. +int     des_cipher __P((const char *, char *, long, int));
  64239. +int     des_setkey __P((const char *key));
  64240. +int     encrypt __P((char *, int));
  64241. +void     endusershell __P((void));
  64242. +int     exect __P((const char *, char * const *, char * const *));
  64243. +int     fchdir __P((int));
  64244. +int     fchflags __P((int, long));
  64245. +int     fchown __P((int, int, int));
  64246. +int     fnmatch __P((const char *, const char *, int));
  64247. +int     fsync __P((int));
  64248. +int     ftruncate __P((int, off_t));
  64249. +int     getdtablesize __P((void));
  64250. +long     gethostid __P((void));
  64251. +int     gethostname __P((char *, int));
  64252. +mode_t     getmode __P((const void *, mode_t));
  64253. +int     getpagesize __P((void));
  64254. +char    *getpass __P((const char *));
  64255. +char    *getusershell __P((void));
  64256. +char    *getwd __P((char *));            /* obsoleted by getcwd() */
  64257. +int     initgroups __P((const char *, int));
  64258. +int     mknod __P((const char *, mode_t, dev_t));
  64259. +int     mkstemp __P((char *));
  64260. +char    *mktemp __P((char *));
  64261. +int     nfssvc __P((int));
  64262. +int     nice __P((int));
  64263. +void     psignal __P((u_int, const char *));
  64264. +extern char *sys_siglist[];
  64265. +int     profil __P((char *, int, int, int));
  64266. +int     rcmd __P((char **, int, const char *,
  64267. +        const char *, const char *, int *));
  64268. +char    *re_comp __P((const char *));
  64269. +int     re_exec __P((const char *));
  64270. +int     readlink __P((const char *, char *, int));
  64271. +int     reboot __P((int));
  64272. +int     revoke __P((const char *));
  64273. +int     rresvport __P((int *));
  64274. +int     ruserok __P((const char *, int, const char *, const char *));
  64275. +void    *sbrk __P((unsigned));
  64276. +int     select __P((int, fd_set *, fd_set *, fd_set *, struct timeval *));
  64277. +int     setegid __P((gid_t));
  64278. +int     seteuid __P((uid_t));
  64279. +int     setgroups __P((int, const int *));
  64280. +void     sethostid __P((long));
  64281. +int     sethostname __P((const char *, int));
  64282. +int     setkey __P((const char *));
  64283. +int     setlogin __P((const char *));
  64284. +void    *setmode __P((const char *));
  64285. +int     setpgrp __P((pid_t pid, pid_t pgrp));    /* obsoleted by setpgid() */
  64286. +int     setregid __P((int, int));
  64287. +int     setreuid __P((int, int));
  64288. +int     setrgid __P((gid_t));
  64289. +int     setruid __P((uid_t));
  64290. +void     setusershell __P((void));
  64291. +int     swapon __P((const char *));
  64292. +int     symlink __P((const char *, const char *));
  64293. +void     sync __P((void));
  64294. +int     syscall __P((int, ...));
  64295. +int     truncate __P((const char *, off_t));
  64296. +int     ttyslot __P((void));
  64297. +u_int     ualarm __P((u_int, u_int));
  64298. +void     usleep __P((u_int));
  64299. +int     vfork __P((void));
  64300. +
  64301. +#endif /* !_POSIX_SOURCE */
  64302. +__END_DECLS
  64303. +
  64304. +#endif /* !_UNISTD_H_ */
  64305. diff -ru --new-file baseline/fsf/emacs/unixlib/include/utime.h amiga/fsf/emacs/unixlib/include/utime.h
  64306. --- baseline/fsf/emacs/unixlib/include/utime.h    Wed Dec 31 17:00:00 1969
  64307. +++ amiga/fsf/emacs/unixlib/include/utime.h    Sun Oct 15 17:14:58 1995
  64308. @@ -0,0 +1,3 @@
  64309. +struct utimbuf { time_t actime, modtime; };
  64310. +
  64311. +int utime(char *path, struct utimbuf *times);
  64312. diff -ru --new-file baseline/fsf/emacs/unixlib/intro.doc amiga/fsf/emacs/unixlib/intro.doc
  64313. --- baseline/fsf/emacs/unixlib/intro.doc    Wed Dec 31 17:00:00 1969
  64314. +++ amiga/fsf/emacs/unixlib/intro.doc    Sun Oct 15 17:14:21 1995
  64315. @@ -0,0 +1,44 @@
  64316. +A quick guide to programs compiled with the unix library
  64317. +--------------------------------------------------------
  64318. +
  64319. +If you are using programs compiled with my unix library, you should note
  64320. +the following points:
  64321. +
  64322. +a) The following environment variables are taken into account by the unix library,
  64323. +and therefore by any program compiled with it:
  64324. +
  64325. +USER - A user name for the sole Amiga user (default "user").
  64326. +USERNAME - The full name of the sole Amiga user (default $USER).
  64327. +HOME - A "home" directory (default "s:") for programs that want one. Configuration
  64328. +       files will probably end up here ...
  64329. +SHELL - A program which behaves reasonably like a Unix shell (default "bin:sh").
  64330. +    You should copy the sh executable there if you don't have a Unix-like shell.
  64331. +HOSTNAME - The name of your machine (default "amiga").
  64332. +
  64333. +b) Command line parsing is a mixture of AmigaDOS and Unix conventions (this
  64334. +explanation assumes familiarity with Unix terminology ...) :
  64335. +
  64336. +- Arguments in single quotes (') are left as is.
  64337. +
  64338. +- Within arguments in double quotes ("), * acts as an escape character. Arguments
  64339. +cotaining wildcards are expanded into several arguments (note that this is a
  64340. +different from the Unix behaviour). ' must be used to escape wildcards (this is the
  64341. +standard AmigaDOS convention).
  64342. +
  64343. +- Within unquoted arguments, \ acts as an escape character for wildcards, spaces, 
  64344. +etc. Arguments containing wildcards are expanded into several arguments.
  64345. +
  64346. +As an example, assume that uecho is an unix-like echo command compiled with the
  64347. +unix library, and that the current directory contains one file, echo.c. Then
  64348. +
  64349. +  uecho 'f*un\' "#?.c" "*.c" "\mad" \*.c \\ \n
  64350. +
  64351. +displays
  64352. +
  64353. +  f*un\ echo.c .c \mad *.c \ n
  64354. +
  64355. +c) Timezones. If you install the timezone information (provided with the
  64356. +unix library), you must set your system clock to GMT. Otherwise the times
  64357. +displayed or set by the unix library will be incorrect. To compensate, you
  64358. +won't have to adjust your system clock for daylight savings time (the local
  64359. +time calculated from GMT will always be correct).
  64360. diff -ru --new-file baseline/fsf/emacs/unixlib/mkmkf amiga/fsf/emacs/unixlib/mkmkf
  64361. --- baseline/fsf/emacs/unixlib/mkmkf    Wed Dec 31 17:00:00 1969
  64362. +++ amiga/fsf/emacs/unixlib/mkmkf    Sun Oct 15 17:14:23 1995
  64363. @@ -0,0 +1,2 @@
  64364. +copy smakefile smakefile!
  64365. +perl src:unix/mkmkf.perl `glob *.c` >smakefile
  64366. diff -ru --new-file baseline/fsf/emacs/unixlib/mkmkf.perl amiga/fsf/emacs/unixlib/mkmkf.perl
  64367. --- baseline/fsf/emacs/unixlib/mkmkf.perl    Wed Dec 31 17:00:00 1969
  64368. +++ amiga/fsf/emacs/unixlib/mkmkf.perl    Sun Oct 15 17:14:24 1995
  64369. @@ -0,0 +1,72 @@
  64370. +print "OBJS= ";
  64371. +for ($i = $#ARGV; $i >= 0; $i--)
  64372. +{
  64373. +    ($objs[$i] = $ARGV[$i]) =~ s/\.\w*$/\.o/;
  64374. +}
  64375. +&colprint(6, " ", @objs);
  64376. +print "\n\n";
  64377. +
  64378. +if (-f "smakefile.base")
  64379. +{
  64380. +    open(BASE, "smakefile.base");
  64381. +    print while (<BASE>);
  64382. +    close(BASE);
  64383. +}
  64384. +
  64385. +foreach $file (@ARGV)
  64386. +{
  64387. +    $dest = $file;
  64388. +    $dest =~ s/\.\w*$/\.o/;
  64389. +    if ($file =~ /\.c$/)
  64390. +    {
  64391. +    printf("%s: %s", $dest, $file);
  64392. +    $colto = length($dest) + length($file) + 2;
  64393. +    # Search for included files
  64394. +    %seen = ();
  64395. +    &included($file, 0);
  64396. +    &colprint($colto, " ", keys(%seen));
  64397. +    print "\n";
  64398. +    }
  64399. +    else
  64400. +    {
  64401. +    printf("%s: %s\n\n", $dest, $file);
  64402. +    }
  64403. +}
  64404. +
  64405. +sub colprint
  64406. +{
  64407. +    local($colto, $sep, @names) = @_;
  64408. +    $col = $colto;
  64409. +    $sl = length($sep);
  64410. +    foreach $name (@names)
  64411. +    {
  64412. +    $nl = length($name);
  64413. +    if ($col + $nl + $sl > 78)
  64414. +    {
  64415. +        print " \\\n", " " x $colto;
  64416. +        $col = $colto;
  64417. +    }
  64418. +    print $sep, $name;
  64419. +    $col += $sl + $nl;
  64420. +    }
  64421. +}
  64422. +
  64423. +sub included
  64424. +{
  64425. +    local($file, $input) = @_;
  64426. +    $input++;
  64427. +    if (!open($input, $file))
  64428. +    {
  64429. +    print STDERR "Can't open $file: $!\n";
  64430. +    return;
  64431. +    }
  64432. +    while (<$input>)
  64433. +    {
  64434. +    if (/^#\s*include\s*"([^"]*)"/ && !$seen{$1} && -e $1)
  64435. +        {
  64436. +        $seen{$1} = 1;
  64437. +        &included($1, $input);
  64438. +    }
  64439. +    }
  64440. +    close($input);
  64441. +}
  64442. diff -ru --new-file baseline/fsf/emacs/unixlib/src/SCOPTIONS amiga/fsf/emacs/unixlib/src/SCOPTIONS
  64443. --- baseline/fsf/emacs/unixlib/src/SCOPTIONS    Wed Dec 31 17:00:00 1969
  64444. +++ amiga/fsf/emacs/unixlib/src/SCOPTIONS    Sun Oct 15 17:15:48 1995
  64445. @@ -0,0 +1,9 @@
  64446. +PARAMETERS=BOTH
  64447. +NOSTACKCHECK
  64448. +STRUCTUREEQUIVALENCE
  64449. +NOVERSION
  64450. +NOICONS
  64451. +INCLUDEDIR=/include/internal/
  64452. +INCLUDEDIR=/include/
  64453. +IGNORE=104
  64454. +IGNORE=74
  64455. diff -ru --new-file baseline/fsf/emacs/unixlib/src/_exit.c amiga/fsf/emacs/unixlib/src/_exit.c
  64456. --- baseline/fsf/emacs/unixlib/src/_exit.c    Wed Dec 31 17:00:00 1969
  64457. +++ amiga/fsf/emacs/unixlib/src/_exit.c    Sun Oct 15 17:15:50 1995
  64458. @@ -0,0 +1,30 @@
  64459. +#include "amiga.h"
  64460. +#include "files.h"
  64461. +#include "fifofd.h"
  64462. +#include "signals.h"
  64463. +#include "timers.h"
  64464. +#include <fcntl.h>
  64465. +
  64466. +void _close_all(void)
  64467. +{
  64468. +  int fd, lfd = _last_fd();
  64469. +
  64470. +  for (fd = 0; fd < lfd; fd++) close(fd);
  64471. +}
  64472. +
  64473. +#undef _exit
  64474. +
  64475. +void __exit(int rc)
  64476. +{
  64477. +  _close_all();
  64478. +  _cleanup_fifo();
  64479. +  _cleanup_signals();
  64480. +  _free_timer(_odd_timer);
  64481. +  XCEXIT(rc);
  64482. +}
  64483. +
  64484. +void _exit(int rc)
  64485. +{
  64486. +  return __exit(rc);
  64487. +}
  64488. +
  64489. diff -ru --new-file baseline/fsf/emacs/unixlib/src/_main.c amiga/fsf/emacs/unixlib/src/_main.c
  64490. --- baseline/fsf/emacs/unixlib/src/_main.c    Wed Dec 31 17:00:00 1969
  64491. +++ amiga/fsf/emacs/unixlib/src/_main.c    Sun Oct 15 17:15:51 1995
  64492. @@ -0,0 +1,471 @@
  64493. +#include "amiga.h"
  64494. +#include "signals.h"
  64495. +#include "fifofd.h"
  64496. +#include "timers.h"
  64497. +#include "amigados.h"
  64498. +#include <exec/execbase.h>
  64499. +#include <dos/var.h>
  64500. +#include <workbench/startup.h>
  64501. +#include <proto/timer.h>
  64502. +#include <stdlib.h>
  64503. +#include <string.h>
  64504. +#include <ctype.h>
  64505. +#include <sys/time.h>
  64506. +#include <pwd.h>
  64507. +
  64508. +struct Process *_us;
  64509. +struct timeinfo *_odd_timer;
  64510. +ULONG _odd_sig;
  64511. +long _startup_time;
  64512. +long _stack_size;
  64513. +struct Library *TimerBase;
  64514. +
  64515. +static char *empty_env = 0;    /* A default empty environment */
  64516. +char **environ;            /* Unix style environment variable list */
  64517. +char *_system_name;
  64518. +
  64519. +extern struct ExecBase *SysBase;
  64520. +extern struct passwd _amiga_user;
  64521. +extern main(int argc, char **argv, char **envp);
  64522. +
  64523. +static void nomem(void)
  64524. +{
  64525. +  _fail("No memory");
  64526. +}
  64527. +
  64528. +static void *_xmalloc(unsigned n)
  64529. +{
  64530. +    void *p = malloc(n);
  64531. +
  64532. +    if (!p) nomem();
  64533. +
  64534. +    return p;
  64535. +}
  64536. +
  64537. +static void *_xrealloc(void *p, unsigned n)
  64538. +{
  64539. +    void *p2 = realloc(p, n);
  64540. +
  64541. +    if (!p2) nomem();
  64542. +
  64543. +    return p2;
  64544. +}
  64545. +
  64546. +static char *safe_copystr(char *str)
  64547. +{
  64548. +    char *new;
  64549. +
  64550. +    if (!str) str = "";
  64551. +    new = malloc(strlen(str) + 1);
  64552. +    if (!new) return 0;
  64553. +    return strcpy(new, str);
  64554. +}
  64555. +
  64556. +static char *copystr(char *str)
  64557. +{
  64558. +    char *new = safe_copystr(str);
  64559. +
  64560. +    if (!new) nomem();
  64561. +
  64562. +    return new;
  64563. +}
  64564. +
  64565. +void make_environ(void)
  64566. +/* Effect: Builds a UNIX style environ variable from the AmigaDOS environment.
  64567. +*/
  64568. +{
  64569. +    int env_count = 0;
  64570. +    long env_len = 0;
  64571. +    struct LocalVar *scan_env;
  64572. +    char **new_environ, *env_text;
  64573. +
  64574. +    for (scan_env = (struct LocalVar *)_us->pr_LocalVars.mlh_Head;
  64575. +     scan_env->lv_Node.ln_Succ;
  64576. +     scan_env = (struct LocalVar *)scan_env->lv_Node.ln_Succ)
  64577. +    if (scan_env->lv_Node.ln_Type == LV_VAR &&
  64578. +        !(scan_env->lv_Flags & (GVF_GLOBAL_ONLY | GVF_BINARY_VAR)))
  64579. +    {
  64580. +        /* We only handle local text variables */
  64581. +        env_count++;
  64582. +        env_len += 2 + strlen(scan_env->lv_Node.ln_Name) + scan_env->lv_Len;
  64583. +    }
  64584. +
  64585. +    new_environ = environ = (char **)_xmalloc(sizeof(char *) * (1 + env_count) +
  64586. +                          env_len);
  64587. +    env_text = (char *)(environ + (1 + env_count));
  64588. +    if (!environ) environ = &empty_env;
  64589. +    else
  64590. +    {
  64591. +    for (scan_env = (struct LocalVar *)_us->pr_LocalVars.mlh_Head;
  64592. +         scan_env->lv_Node.ln_Succ;
  64593. +         scan_env = (struct LocalVar *)scan_env->lv_Node.ln_Succ)
  64594. +        if (scan_env->lv_Node.ln_Type == LV_VAR &&
  64595. +        !(scan_env->lv_Flags & (GVF_GLOBAL_ONLY | GVF_BINARY_VAR)))
  64596. +        {
  64597. +        /* We only handle local text variables */
  64598. +        char *env_name = scan_env->lv_Node.ln_Name;
  64599. +        int env_len = scan_env->lv_Len;
  64600. +
  64601. +        *new_environ++ = env_text;
  64602. +        while (*env_name) *env_text++ = *env_name++;
  64603. +        *env_text++ = '=';
  64604. +        env_name = scan_env->lv_Value;
  64605. +        while (env_len--) *env_text++ = *env_name++;
  64606. +        *env_text++ = '\0';
  64607. +        }
  64608. +    *new_environ = 0;
  64609. +    }
  64610. +}
  64611. +
  64612. +/* _main routine.
  64613. +   Hides the differences between wb & cli.
  64614. +   Provides a unix-like environment (including coomand-line parsing &
  64615. +   wildcard expansion)
  64616. +*/
  64617. +
  64618. +#define DEFPATLEN 256
  64619. +#define NAMELEN 1024
  64620. +
  64621. +struct args
  64622. +{
  64623. +    int size;
  64624. +    int argc;
  64625. +    char **argv;
  64626. +};
  64627. +
  64628. +static void make_argv(struct args *args, int argc)
  64629. +{
  64630. +    args->size = argc;
  64631. +    args->argc = 0;
  64632. +    args->argv = _xmalloc(sizeof(char *) * argc);
  64633. +}
  64634. +
  64635. +static int safe_add_arg(struct args *args, char *argument, int copy)
  64636. +{
  64637. +    char *arg_copy;
  64638. +
  64639. +    if (copy) arg_copy = safe_copystr(argument);
  64640. +    else arg_copy = argument;
  64641. +    if (!arg_copy) return 0;
  64642. +
  64643. +    if (args->argc >= args->size)
  64644. +    {
  64645. +    /* Make argv bigger */
  64646. +    if (args->size * 2 < args->size + 16) args->size += 16;
  64647. +    else args->size *= 2;
  64648. +    args->argv = realloc(args->argv, sizeof(char *) * args->size);
  64649. +    if (!args->argv) return 0;
  64650. +    }
  64651. +    args->argv[args->argc++] = arg_copy;
  64652. +    return 1;
  64653. +}
  64654. +
  64655. +static void add_arg(struct args *args, char *argument, int copy)
  64656. +{
  64657. +    if (!safe_add_arg(args, argument, copy)) nomem();
  64658. +}
  64659. +
  64660. +static void concat_args(struct args *args, struct args *add)
  64661. +{
  64662. +    if (args->argc + add->argc > args->size)
  64663. +    {
  64664. +    args->size = (args->argc + add->argc) * 2;
  64665. +    args->argv = _xrealloc(args->argv, sizeof(char *) * args->size);
  64666. +    }
  64667. +    memcpy(args->argv + args->argc, add->argv, add->argc * sizeof(char *));
  64668. +    args->argc += add->argc;
  64669. +    free(add->argv);
  64670. +}
  64671. +
  64672. +typedef enum { quote_none, quote_single, quote_double } quote_type;
  64673. +typedef enum { extract_normal, extract_test, extract_pattern } extract_type;
  64674. +
  64675. +static void extract(char *buf, char *start, char *end,
  64676. +            quote_type type, extract_type extract)
  64677. +{
  64678. +  char *res = buf;
  64679. +
  64680. +  switch (type)
  64681. +    {
  64682. +    case quote_single:
  64683. +      if (extract != extract_test)
  64684. +    {
  64685. +      buf[end - start] = '\0';
  64686. +      memcpy(buf, start, end - start);
  64687. +    }
  64688. +      else strcpy(buf, "a");    /* Things in quotes are never patterns */
  64689. +      break;
  64690. +
  64691. +    case quote_none:
  64692. +      while (start < end)
  64693. +    {
  64694. +      if (start[0] == '\\' && start[1])
  64695. +        {
  64696. +          start += 2;
  64697. +          /* Wildcard are escaped */
  64698. +          if (extract == extract_test) *res++ = 'a';
  64699. +          else if (extract == extract_pattern)
  64700. +        switch (start[-1])
  64701. +          {
  64702. +          case '?': case '#': case '(': case ')': case '|': case '[':
  64703. +          case ']': case '~': case '%': case '*': case '\'':
  64704. +            *res++ = '\'';
  64705. +          default:
  64706. +            *res++ = start[-1];
  64707. +            break;
  64708. +          }
  64709. +          else *res++ = start[-1];
  64710. +        }
  64711. +      else *res++ = *start++;
  64712. +    }
  64713. +      *res++ = '\0';
  64714. +      break;
  64715. +
  64716. +    case quote_double:
  64717. +      while (start < end)
  64718. +    {
  64719. +      if (start[0] == '*' && start[1])
  64720. +        {
  64721. +          start += 2;
  64722. +          switch (start[-1])
  64723. +        {
  64724. +        case 'n': *res++ = '\n'; break;
  64725. +        case 'e': *res++ = '\x1b'; break;
  64726. +        default: *res++ = start[-1]; break;
  64727. +        }
  64728. +        }
  64729. +      else *res++ = *start++;
  64730. +    }
  64731. +      *res++ = '\0';
  64732. +      break;
  64733. +    }
  64734. +}
  64735. +
  64736. +void __stdargs _main(char *line)
  64737. +/* Effect: Call unix_main with wildcards in argc & argv expanded (like unix)
  64738. +     Also, do some early amiga initialisation for emacs.
  64739. +*/
  64740. +{
  64741. +  struct args args, wildargs;
  64742. +  char *pattern, *arg_start, *arg_end, *arg;
  64743. +  quote_type arg_quoted;
  64744. +  long patlen = DEFPATLEN;
  64745. +  struct AnchorPath *anchor;
  64746. +  struct timeval now;
  64747. +
  64748. +  if (SysBase->LibNode.lib_Version < 37) XCEXIT(20);
  64749. +
  64750. +  stdin->_file = 0;
  64751. +  stdin->_flag = _IOREAD;
  64752. +  stdout->_file = 1;
  64753. +  stdout->_flag = _IOWRT;
  64754. +  stderr->_file = 2;
  64755. +  stderr->_flag = _IORW | _IONBF;
  64756. +
  64757. +  _us = (struct Process *)FindTask(0);
  64758. +  _odd_timer = _alloc_timer();
  64759. +  if (!_odd_timer) _fail("Failed to create timer");
  64760. +  _odd_sig = _timer_sig(_odd_timer);
  64761. +  TimerBase = _odd_timer->io->tr_node.io_Device;
  64762. +  GetSysTime(&now);
  64763. +  _startup_time = now.tv_secs;
  64764. +
  64765. +  /* These use _startup_time, so must be here */
  64766. +  _init_fifo();
  64767. +  _init_signals();
  64768. +
  64769. +  if (_us->pr_CLI) _stack_size = ((struct CommandLineInterface *)BADDR(_us->pr_CLI))->cli_DefaultStack << 2;
  64770. +  else _stack_size = _us->pr_StackSize;
  64771. +
  64772. +  /* Make unix-like argc, argv (expand wildcards) */
  64773. +  if (!line[0])            /* Workbench, create argc & argv from files passed */
  64774. +    {
  64775. +      extern struct WBStartup *_WBenchMsg;
  64776. +      int i;
  64777. +      BPTR nilin = Open("NIL:",MODE_NEWFILE);
  64778. +      BPTR nilout = Open("NIL:",MODE_NEWFILE);
  64779. +      BPTR nilerr = Open("NIL:",MODE_NEWFILE);
  64780. +
  64781. +      /* Initialise I/O. Nothing is available */
  64782. +      if (!nilin || !nilout || !nilerr)
  64783. +    {
  64784. +      if (nilin) Close(nilin);
  64785. +      if (nilout) Close(nilout);
  64786. +      if (nilerr) Close(nilerr);
  64787. +      nomem();
  64788. +    }
  64789. +      _init_unixio(nilin, TRUE, nilout, TRUE, nilerr, TRUE);
  64790. +
  64791. +      /* Make argc, argv from Workbench parameters */
  64792. +      make_argv(&args, _WBenchMsg->sm_NumArgs);
  64793. +
  64794. +      for (i = 0; i < _WBenchMsg->sm_NumArgs; i++)
  64795. +    {
  64796. +      char filename[256];
  64797. +
  64798. +      if (_WBenchMsg->sm_ArgList[i].wa_Lock &&
  64799. +          NameFromLock(_WBenchMsg->sm_ArgList[i].wa_Lock, filename, 256))
  64800. +        {
  64801. +          if (_WBenchMsg->sm_ArgList[i].wa_Name)
  64802. +        AddPart(filename, _WBenchMsg->sm_ArgList[i].wa_Name, 256);
  64803. +          add_arg(&args, filename, TRUE);
  64804. +        }
  64805. +      /* else A parameter was lost, cry, cry, cry */
  64806. +    }
  64807. +    }
  64808. +  else                /* From CLI expand wildcards (with unix-like command line parsing) */
  64809. +    {
  64810. +      int close_error;
  64811. +      BPTR in, out, error;
  64812. +
  64813. +      /* Initialise I/O. Copy CLI info */
  64814. +      in = Input();
  64815. +      out = Output();
  64816. +      close_error = FALSE;
  64817. +      if ((error = _us->pr_CES) == 0)
  64818. +    {
  64819. +      close_error = TRUE;
  64820. +      if ((error = Open("*", MODE_OLDFILE)) == 0)
  64821. +        if ((error = Open("NIL:", MODE_OLDFILE)) == 0) nomem();
  64822. +    }
  64823. +      _init_unixio(in, FALSE, out, FALSE, error, close_error);
  64824. +
  64825. +      make_argv(&args, 1);
  64826. +
  64827. +      anchor = _xmalloc(sizeof(struct AnchorPath) + NAMELEN);
  64828. +      anchor->ap_Strlen = NAMELEN;
  64829. +      pattern = _xmalloc(DEFPATLEN);
  64830. +      while (1)
  64831. +    {
  64832. +      long new_patlen;
  64833. +      int wild;
  64834. +
  64835. +      /* Skip white space */
  64836. +      while (isspace(*line)) line++;
  64837. +      if (!*line) break;    /* End of command line */
  64838. +
  64839. +      /* Extract next word */
  64840. +      /* Words in double quotes are handled AmigaDOS style
  64841. +         (+ filename expansion) */
  64842. +      if (*line == '"')
  64843. +        {
  64844. +          line++;
  64845. +          arg_start = line;
  64846. +          /* Find end of word */
  64847. +          while (*line && *line != '"')
  64848. +        {
  64849. +          /* * is an escape character inside double quotes
  64850. +             (AmigaDOS compatibility) */
  64851. +          if ((*line == '*') && line[1]) line++;
  64852. +          line++;
  64853. +        }
  64854. +          arg_end = line;
  64855. +          if (*line == '"') line++;
  64856. +          arg_quoted = quote_double;
  64857. +        }
  64858. +      /* Words in single quotes are handled unix style */
  64859. +      else if (*line == '\'')
  64860. +        {
  64861. +          line++;
  64862. +          arg_start = line;
  64863. +          /* Find end of word */
  64864. +          while (*line && *line != '\'') line++;
  64865. +          arg_end = line;
  64866. +          if (*line == '\'') line++;
  64867. +          arg_quoted = quote_single;
  64868. +        }
  64869. +      /* Unquoted words are handled unix style */
  64870. +      else            /* Plain word */
  64871. +        {
  64872. +          arg_start = line;
  64873. +          /* Find end of word */
  64874. +          while (*line && *line != ' ' && *line != '\n' && *line != '\t')
  64875. +        {
  64876. +          if (*line == '\\' && line[1]) line++;
  64877. +          line++;
  64878. +        }
  64879. +          arg_end = line;
  64880. +          arg_quoted = quote_none;
  64881. +        }
  64882. +      arg = _xmalloc(arg_end - arg_start + 1);
  64883. +      if (args.argc == 0)    /* Command name is left untouched */
  64884. +        {
  64885. +          strncpy(arg, arg_start, arg_end - arg_start);
  64886. +          arg[arg_end - arg_start] = 0;
  64887. +          add_arg(&args, arg, FALSE);
  64888. +        }
  64889. +      else
  64890. +        {
  64891. +          new_patlen = (arg_end - arg_start) * 2 + 16;
  64892. +          if (new_patlen > patlen)
  64893. +        {
  64894. +          free(pattern);
  64895. +          pattern = _xmalloc(new_patlen);
  64896. +          patlen = new_patlen;
  64897. +        }
  64898. +          extract(arg, arg_start, arg_end, arg_quoted, extract_test);
  64899. +          wild = ParsePattern(arg, pattern, patlen);
  64900. +          if (wild < 0)
  64901. +        {
  64902. +          *arg_end = 0;
  64903. +          _fail("Invalid wildcard %s", arg_start);
  64904. +        }
  64905. +          if (!wild)
  64906. +        {
  64907. +          extract(arg, arg_start, arg_end, arg_quoted, extract_normal);
  64908. +          add_arg(&args, arg, FALSE);
  64909. +        }
  64910. +          else
  64911. +        {
  64912. +          int none = TRUE;
  64913. +          long error;
  64914. +
  64915. +          anchor->ap_Flags = anchor->ap_Reserved = anchor->ap_BreakBits = 0;
  64916. +          extract(arg, arg_start, arg_end, arg_quoted, extract_pattern);
  64917. +          make_argv(&wildargs, 16);
  64918. +          if (!(error = MatchFirst(arg, anchor)))
  64919. +            {
  64920. +              while (!error)
  64921. +            {
  64922. +              none = FALSE;
  64923. +              if (!safe_add_arg(&wildargs, anchor->ap_Buf, TRUE))
  64924. +                {
  64925. +                  error = ERROR_NO_FREE_STORE;
  64926. +                  break;
  64927. +                }
  64928. +              error = MatchNext(anchor);
  64929. +            }
  64930. +              MatchEnd(anchor);
  64931. +            }
  64932. +          if (error != ERROR_NO_MORE_ENTRIES)
  64933. +              _fail("Error expanding arguments");
  64934. +          if (none)
  64935. +            {
  64936. +              extract(arg, arg_start, arg_end, arg_quoted, extract_normal);
  64937. +              add_arg(&args, arg, FALSE);
  64938. +            }
  64939. +          else
  64940. +            {
  64941. +              tqsort(wildargs.argv, wildargs.argc);
  64942. +              concat_args(&args, &wildargs);
  64943. +              free(arg);
  64944. +            }
  64945. +        }
  64946. +        }
  64947. +    }
  64948. +      free(pattern);
  64949. +      free(anchor);
  64950. +    }
  64951. +
  64952. +  make_environ();
  64953. +
  64954. +  if (!(_amiga_user.pw_name = getenv("USER"))) _amiga_user.pw_name = "user";
  64955. +  if (!(_amiga_user.pw_gecos = getenv("USERNAME")))
  64956. +    _amiga_user.pw_gecos = _amiga_user.pw_name;
  64957. +  if (!(_amiga_user.pw_dir = getenv("HOME"))) _amiga_user.pw_dir = "s:";
  64958. +  if (!(_amiga_user.pw_shell = getenv("SHELL"))) _amiga_user.pw_shell = "bin:sh";
  64959. +  if (!(_system_name = getenv("HOSTNAME"))) _system_name = "amiga";
  64960. +    
  64961. +  main(args.argc, args.argv, environ);
  64962. +  exit(0);
  64963. +}
  64964. diff -ru --new-file baseline/fsf/emacs/unixlib/src/_setjmp.asm amiga/fsf/emacs/unixlib/src/_setjmp.asm
  64965. --- baseline/fsf/emacs/unixlib/src/_setjmp.asm    Wed Dec 31 17:00:00 1969
  64966. +++ amiga/fsf/emacs/unixlib/src/_setjmp.asm    Sun Oct 15 17:15:53 1995
  64967. @@ -0,0 +1,27 @@
  64968. +    XDEF    __setjmp
  64969. +    XDEF    __longjmp
  64970. +    XDEF    @_setjmp
  64971. +    XDEF    @_longjmp
  64972. +    
  64973. +    csect    text,0,,2,2
  64974. +
  64975. +__setjmp:
  64976. +    move.l    4(a7),a0        ; Get jmp_buf
  64977. +@_setjmp
  64978. +    move.l    (a7),(a0)+        ; Save return address
  64979. +    movem.l    a2-a7/d2-d7,(a0)    ; Save registers
  64980. +    moveq    #0,d0
  64981. +    rts
  64982. +
  64983. +__longjmp:
  64984. +    move.l    4(a7),a0        ; Get jmp_buf
  64985. +    move.l    8(a7),d0        ; Get result
  64986. +@_longjmp
  64987. +    bne.s    ok
  64988. +    moveq    #1,d0            ; Return must be != 0
  64989. +ok    move.l    (a0)+,a1        ; Get return address
  64990. +    movem.l    (a0),a2-a7/d2-d7    ; Get registers
  64991. +    addq.l    #4,a7            ; Pop return address
  64992. +    jmp    (a1)            ; And return to setjmp call
  64993. +
  64994. +    end
  64995. diff -ru --new-file baseline/fsf/emacs/unixlib/src/abort.c amiga/fsf/emacs/unixlib/src/abort.c
  64996. --- baseline/fsf/emacs/unixlib/src/abort.c    Wed Dec 31 17:00:00 1969
  64997. +++ amiga/fsf/emacs/unixlib/src/abort.c    Sun Oct 15 17:15:55 1995
  64998. @@ -0,0 +1,11 @@
  64999. +#include "amiga.h"
  65000. +#include <signal.h>
  65001. +
  65002. +extern void _close_all(void);
  65003. +
  65004. +void abort(void)
  65005. +{
  65006. +  chkabort();
  65007. +  _close_all();
  65008. +  kill(getpid(), SIGIOT);
  65009. +}
  65010. diff -ru --new-file baseline/fsf/emacs/unixlib/src/access.c amiga/fsf/emacs/unixlib/src/access.c
  65011. --- baseline/fsf/emacs/unixlib/src/access.c    Wed Dec 31 17:00:00 1969
  65012. +++ amiga/fsf/emacs/unixlib/src/access.c    Sun Oct 15 17:15:58 1995
  65013. @@ -0,0 +1,29 @@
  65014. +#include "amiga.h"
  65015. +#include "fibstat.h"
  65016. +#include <sys/types.h>
  65017. +#include <sys/stat.h>
  65018. +
  65019. +#undef access
  65020. +
  65021. +int __access(const char *name, int mode)
  65022. +{
  65023. +  int ret = -1;
  65024. +  struct stat sbuf;
  65025. +
  65026. +  chkabort();
  65027. +  if (_fibstat(name, &sbuf) == 0)
  65028. +    {
  65029. +      int fmode = (sbuf.st_mode & (S_IREAD | S_IEXEC)) >> 6 |
  65030. +    (sbuf.st_mode & (S_IWRITE >> 3)) >> 3;
  65031. +
  65032. +      if ((fmode & mode) == mode) ret = 0;
  65033. +      else errno = EACCES;
  65034. +    }
  65035. +  return ret;
  65036. +}
  65037. +
  65038. +int access(const char *name, int mode)
  65039. +{
  65040. +  return __access(name, mode);
  65041. +}
  65042. +
  65043. diff -ru --new-file baseline/fsf/emacs/unixlib/src/alloca.c amiga/fsf/emacs/unixlib/src/alloca.c
  65044. --- baseline/fsf/emacs/unixlib/src/alloca.c    Wed Dec 31 17:00:00 1969
  65045. +++ amiga/fsf/emacs/unixlib/src/alloca.c    Sun Oct 15 17:15:59 1995
  65046. @@ -0,0 +1,194 @@
  65047. +/*
  65048. +    alloca -- (mostly) portable public-domain implementation -- D A Gwyn
  65049. +
  65050. +    last edit:    86/05/30    rms
  65051. +       include config.h, since on VMS it renames some symbols.
  65052. +       Use xmalloc instead of malloc.
  65053. +
  65054. +    This implementation of the PWB library alloca() function,
  65055. +    which is used to allocate space off the run-time stack so
  65056. +    that it is automatically reclaimed upon procedure exit, 
  65057. +    was inspired by discussions with J. Q. Johnson of Cornell.
  65058. +
  65059. +    It should work under any C implementation that uses an
  65060. +    actual procedure stack (as opposed to a linked list of
  65061. +    frames).  There are some preprocessor constants that can
  65062. +    be defined when compiling for your specific system, for
  65063. +    improved efficiency; however, the defaults should be okay.
  65064. +
  65065. +    The general concept of this implementation is to keep
  65066. +    track of all alloca()-allocated blocks, and reclaim any
  65067. +    that are found to be deeper in the stack than the current
  65068. +    invocation.  This heuristic does not reclaim storage as
  65069. +    soon as it becomes invalid, but it will do so eventually.
  65070. +
  65071. +    As a special case, alloca(0) reclaims storage without
  65072. +    allocating any.  It is a good idea to use alloca(0) in
  65073. +    your main control loop, etc. to force garbage collection.
  65074. +*/
  65075. +#ifndef lint
  65076. +static char    SCCSid[] = "@(#)alloca.c    1.1";    /* for the "what" utility */
  65077. +#endif
  65078. +
  65079. +#ifdef emacs
  65080. +#include "config.h"
  65081. +#ifdef static
  65082. +/* actually, only want this if static is defined as ""
  65083. +   -- this is for usg, in which emacs must undefine static
  65084. +   in order to make unexec workable
  65085. +   */
  65086. +#ifndef STACK_DIRECTION
  65087. +you
  65088. +lose
  65089. +-- must know STACK_DIRECTION at compile-time
  65090. +#endif /* STACK_DIRECTION undefined */
  65091. +#endif static
  65092. +#endif emacs
  65093. +
  65094. +#ifndef alloca  /* If compiling with GCC, this file's not needed.  */
  65095. +
  65096. +#ifdef __STDC__
  65097. +typedef void    *pointer;        /* generic pointer type */
  65098. +#else
  65099. +typedef char    *pointer;        /* generic pointer type */
  65100. +#endif
  65101. +
  65102. +#define    NULL    0            /* null pointer constant */
  65103. +
  65104. +extern void    free();
  65105. +extern pointer    malloc();
  65106. +
  65107. +/*
  65108. +    Define STACK_DIRECTION if you know the direction of stack
  65109. +    growth for your system; otherwise it will be automatically
  65110. +    deduced at run-time.
  65111. +
  65112. +    STACK_DIRECTION > 0 => grows toward higher addresses
  65113. +    STACK_DIRECTION < 0 => grows toward lower addresses
  65114. +    STACK_DIRECTION = 0 => direction of growth unknown
  65115. +*/
  65116. +
  65117. +#ifndef STACK_DIRECTION
  65118. +#define    STACK_DIRECTION    0        /* direction unknown */
  65119. +#endif
  65120. +
  65121. +#if (STACK_DIRECTION) != 0
  65122. +
  65123. +#define    STACK_DIR    STACK_DIRECTION    /* known at compile-time */
  65124. +
  65125. +#else    /* STACK_DIRECTION == 0; need run-time code */
  65126. +
  65127. +static int    stack_dir;        /* 1 or -1 once known */
  65128. +#define    STACK_DIR    stack_dir
  65129. +
  65130. +static void
  65131. +find_stack_direction (/* void */)
  65132. +{
  65133. +  static char    *addr = NULL;    /* address of first
  65134. +                   `dummy', once known */
  65135. +  auto char    dummy;        /* to get stack address */
  65136. +
  65137. +  if (addr == NULL)
  65138. +    {                /* initial entry */
  65139. +      addr = &dummy;
  65140. +
  65141. +      find_stack_direction ();    /* recurse once */
  65142. +    }
  65143. +  else                /* second entry */
  65144. +    if (&dummy > addr)
  65145. +      stack_dir = 1;        /* stack grew upward */
  65146. +    else
  65147. +      stack_dir = -1;        /* stack grew downward */
  65148. +}
  65149. +
  65150. +#endif    /* STACK_DIRECTION == 0 */
  65151. +
  65152. +/*
  65153. +    An "alloca header" is used to:
  65154. +    (a) chain together all alloca()ed blocks;
  65155. +    (b) keep track of stack depth.
  65156. +
  65157. +    It is very important that sizeof(header) agree with malloc()
  65158. +    alignment chunk size.  The following default should work okay.
  65159. +*/
  65160. +
  65161. +#ifndef    ALIGN_SIZE
  65162. +#define    ALIGN_SIZE    sizeof(double)
  65163. +#endif
  65164. +
  65165. +typedef union hdr
  65166. +{
  65167. +  char    align[ALIGN_SIZE];    /* to force sizeof(header) */
  65168. +  struct
  65169. +    {
  65170. +      union hdr *next;        /* for chaining headers */
  65171. +      char *deep;        /* for stack depth measure */
  65172. +    } h;
  65173. +} header;
  65174. +
  65175. +/*
  65176. +    alloca( size ) returns a pointer to at least `size' bytes of
  65177. +    storage which will be automatically reclaimed upon exit from
  65178. +    the procedure that called alloca().  Originally, this space
  65179. +    was supposed to be taken from the current stack frame of the
  65180. +    caller, but that method cannot be made to work for some
  65181. +    implementations of C, for example under Gould's UTX/32.
  65182. +*/
  65183. +
  65184. +static header *last_alloca_header = NULL; /* -> last alloca header */
  65185. +
  65186. +pointer
  65187. +alloca (size)            /* returns pointer to storage */
  65188. +     unsigned    size;        /* # bytes to allocate */
  65189. +{
  65190. +  auto char    probe;        /* probes stack depth: */
  65191. +  register char    *depth = &probe;
  65192. +
  65193. +#if STACK_DIRECTION == 0
  65194. +  if (STACK_DIR == 0)        /* unknown growth direction */
  65195. +    find_stack_direction ();
  65196. +#endif
  65197. +
  65198. +                /* Reclaim garbage, defined as all alloca()ed storage that
  65199. +                   was allocated from deeper in the stack than currently. */
  65200. +
  65201. +  {
  65202. +    register header    *hp;    /* traverses linked list */
  65203. +
  65204. +    for (hp = last_alloca_header; hp != NULL;)
  65205. +      if (STACK_DIR > 0 && hp->h.deep > depth
  65206. +      || STACK_DIR < 0 && hp->h.deep < depth)
  65207. +    {
  65208. +      register header    *np = hp->h.next;
  65209. +
  65210. +      free ((pointer) hp);    /* collect garbage */
  65211. +
  65212. +      hp = np;        /* -> next header */
  65213. +    }
  65214. +      else
  65215. +    break;            /* rest are not deeper */
  65216. +
  65217. +    last_alloca_header = hp;    /* -> last valid storage */
  65218. +  }
  65219. +
  65220. +  if (size == 0)
  65221. +    return NULL;        /* no allocation required */
  65222. +
  65223. +  /* Allocate combined header + user data storage. */
  65224. +
  65225. +  {
  65226. +    register pointer    new = malloc (sizeof (header) + size);
  65227. +    /* address of header */
  65228. +
  65229. +    ((header *)new)->h.next = last_alloca_header;
  65230. +    ((header *)new)->h.deep = depth;
  65231. +
  65232. +    last_alloca_header = (header *)new;
  65233. +
  65234. +    /* User storage begins just after header. */
  65235. +
  65236. +    return (pointer)((char *)new + sizeof(header));
  65237. +  }
  65238. +}
  65239. +
  65240. +#endif /* no alloca */
  65241. diff -ru --new-file baseline/fsf/emacs/unixlib/src/allocdos.c amiga/fsf/emacs/unixlib/src/allocdos.c
  65242. --- baseline/fsf/emacs/unixlib/src/allocdos.c    Wed Dec 31 17:00:00 1969
  65243. +++ amiga/fsf/emacs/unixlib/src/allocdos.c    Sun Oct 15 17:16:01 1995
  65244. @@ -0,0 +1,6 @@
  65245. +#include <proto/dos.h>
  65246. +
  65247. +void *AllocDosObjectTags(ULONG type, ULONG tag1, ...)
  65248. +{
  65249. +  return AllocDosObject(type, &tag1);
  65250. +}
  65251. diff -ru --new-file baseline/fsf/emacs/unixlib/src/amiga.h amiga/fsf/emacs/unixlib/src/amiga.h
  65252. --- baseline/fsf/emacs/unixlib/src/amiga.h    Wed Dec 31 17:00:00 1969
  65253. +++ amiga/fsf/emacs/unixlib/src/amiga.h    Sun Oct 15 17:16:03 1995
  65254. @@ -0,0 +1,39 @@
  65255. +#include <exec/types.h>
  65256. +#include <dos/dos.h>
  65257. +#include <proto/dos.h>
  65258. +#include <proto/exec.h>
  65259. +
  65260. +#include <errno.h>
  65261. +#include <stddef.h>
  65262. +#include <stdlib.h>
  65263. +#include <stdio.h>
  65264. +#include <sys/types.h>
  65265. +#include <internal/vars.h>
  65266. +
  65267. +extern struct timeinfo *_odd_timer;
  65268. +extern ULONG _odd_sig;
  65269. +extern struct Library *TimerBase;
  65270. +
  65271. +int convert_oserr(int ioerr);
  65272. +void _seterr(void);
  65273. +void chkabort(void);
  65274. +
  65275. +#define ERROR do { _seterr(); return -1; } while(0)
  65276. +#define AMIGA_UID 1
  65277. +#define AMIGA_GID 0
  65278. +
  65279. +int _make_protection(int mode);
  65280. +int _make_mode(int protection);
  65281. +
  65282. +void _message(char *format, ...);
  65283. +/* Display a message which is as visible as possible (either to the console
  65284. +   or to as a requester).
  65285. +   Assume very little about library state */
  65286. +
  65287. +void _fail(char *format, ...);
  65288. +/* Display a message which is as visible as possible (either to the console
  65289. +   or to as a requester).
  65290. +   Assume very little about library state.
  65291. +   Exit with error code RETURN_FAIL after that. */
  65292. +
  65293. +void _sprintf(char *dest, char *format, ...);
  65294. diff -ru --new-file baseline/fsf/emacs/unixlib/src/amigados.c amiga/fsf/emacs/unixlib/src/amigados.c
  65295. --- baseline/fsf/emacs/unixlib/src/amigados.c    Wed Dec 31 17:00:00 1969
  65296. +++ amiga/fsf/emacs/unixlib/src/amigados.c    Sun Oct 15 17:16:04 1995
  65297. @@ -0,0 +1,299 @@
  65298. +#include "amiga.h"
  65299. +#include "files.h"
  65300. +#include "signals.h"
  65301. +#include <exec/memory.h>
  65302. +#include <fcntl.h>
  65303. +#include <sys/termios.h>
  65304. +#include <amiga/ioctl.h>
  65305. +#include <string.h>
  65306. +
  65307. +/* Code for fd's describing AmigaDOS files */
  65308. +
  65309. +struct amigainfo
  65310. +{
  65311. +    BPTR fh;
  65312. +    BPTR lock;            /* A lock on the file (may be null) */
  65313. +    long protection;        /* To be set when file is closed, -1 for none */
  65314. +    char interactive;        /* True if file was interactive */
  65315. +    char deleted;        /* True if file has been deleted but not closed */
  65316. +};
  65317. +
  65318. +static ULONG __regargs file_select_start(void *userinfo, int rd, int wr)
  65319. +{
  65320. +  /* Input always immediately available, gniark */
  65321. +  return (ULONG)-1;
  65322. +}
  65323. +
  65324. +static void __regargs file_select_poll(void *userinfo, int *rd, int *wr)
  65325. +{
  65326. +  /* Input always immediately available, gniark */
  65327. +}
  65328. +
  65329. +static int __regargs file_read(void *userinfo, void *buffer, unsigned int length)
  65330. +{
  65331. +  struct amigainfo *info = userinfo;
  65332. +  BPTR fh = info->fh;
  65333. +  LONG cnt;
  65334. +
  65335. +  if (info->deleted) return 0;
  65336. +  if ((cnt = Read(fh, buffer, length)) == -1) ERROR;
  65337. +  return (int)cnt;
  65338. +}
  65339. +
  65340. +static int __regargs file_write(void *userinfo, void *buffer, unsigned int length)
  65341. +{
  65342. +  struct amigainfo *info = userinfo;
  65343. +  BPTR fh = info->fh;
  65344. +  int cnt;
  65345. +
  65346. +  if (info->deleted) return 0;
  65347. +  if (info->interactive)
  65348. +    {
  65349. +      char *bufend = (char *)buffer + length;
  65350. +
  65351. +      /* Write by lines, more pleasant for user */
  65352. +      cnt = 0;
  65353. +      while (length)
  65354. +    {
  65355. +      char *end = buffer;
  65356. +      long nb;
  65357. +      unsigned len;
  65358. +
  65359. +      while (end < bufend && *end != '\n') end++;
  65360. +      if (end == bufend) len = end - (char *)buffer;
  65361. +      else len = end + 1 - (char *)buffer;
  65362. +
  65363. +      if ((nb = Write(fh, buffer, len)) == -1) ERROR;
  65364. +      cnt += nb;
  65365. +      if (nb != len) break;
  65366. +
  65367. +      buffer = end + 1;
  65368. +      length -= nb;
  65369. +      /* Interrupt write ? */
  65370. +      if (_handle_signals(_check_signals(0))) break;
  65371. +    }
  65372. +    }
  65373. +  else if ((cnt = Write(fh, buffer, length)) == -1) ERROR;
  65374. +  return cnt;
  65375. +}
  65376. +
  65377. +static int __regargs file_lseek(void *userinfo, long rpos, int mode)
  65378. +{
  65379. +  struct amigainfo *info = userinfo;
  65380. +  BPTR fh = info->fh;
  65381. +  LONG pos, err;
  65382. +
  65383. +  if (info->deleted) return 0;
  65384. +  pos = Seek(fh, rpos, mode - 1);
  65385. +  err = IoErr();
  65386. +  if (pos == -1 || err)
  65387. +    {
  65388. +      errno = convert_oserr(err);
  65389. +      return -1;
  65390. +    }
  65391. +  pos = Seek(fh, 0, OFFSET_CURRENT);
  65392. +  if (pos == -1 || err)
  65393. +    {
  65394. +      errno = convert_oserr(err);
  65395. +      return -1;
  65396. +    }
  65397. +  return pos;
  65398. +}
  65399. +
  65400. +static int __regargs file_close(void *userinfo, int internal)
  65401. +{
  65402. +  struct amigainfo *info = userinfo;
  65403. +  BPTR fh = info->fh;
  65404. +  long protection = info->protection;
  65405. +  char name[256];
  65406. +  int ok, deleted;
  65407. +
  65408. +  if (info->lock) UnLock(info->lock);
  65409. +  deleted = info->deleted;
  65410. +  free(info);
  65411. +  if (deleted) return 0;
  65412. +
  65413. +  ok = NameFromFH(fh, name, 256);
  65414. +  if (internal || Close(fh))
  65415. +    if (!ok || protection == -1 || SetProtection(name, protection)) return 0;
  65416. +  ERROR;
  65417. +}
  65418. +
  65419. +static int isfifo(BPTR fh)
  65420. +/* Requires: IsInteractive(fh) */
  65421. +/* Try & find out if fh is a fifo: file */
  65422. +{
  65423. +    WaitForChar(fh, 0);
  65424. +
  65425. +    return IoErr() == ERROR_ACTION_NOT_KNOWN;
  65426. +}
  65427. +
  65428. +static int GetWinBounds (BPTR fh, long *width, long *height)
  65429. +{
  65430. +  char buffer[16];
  65431. +  int ok = 0;
  65432. +
  65433. +  if (!isfifo(fh) && SetMode (fh, 1))
  65434. +    {
  65435. +      if ((Write (fh, "\x9b" "0 q", 4) == 4) &&
  65436. +      WaitForChar (fh, 10000L) &&
  65437. +      (Read (fh, buffer, sizeof (buffer)) > 9) &&
  65438. +      (buffer[0] == '\x9b'))
  65439. +    {
  65440. +      int y = StrToLong (buffer+5, height);
  65441. +      int x = StrToLong (buffer+5+y+1, width);
  65442. +      if ((x != -1) && (y != -1)) ok = 1;
  65443. +    }
  65444. +      SetMode (fh, 0);
  65445. +    }
  65446. +  return ok;
  65447. +}
  65448. +
  65449. +int _do_truncate(BPTR fh, off_t length)
  65450. +{
  65451. +  int err, ret = -1;
  65452. +  long oldsize, oldpos;
  65453. +
  65454. +  oldpos = Seek(fh, 0, OFFSET_END);
  65455. +  oldsize = Seek(fh, 0, OFFSET_END);
  65456. +
  65457. +  if (!(err = IoErr()) &&
  65458. +      SetFileSize(fh, length, OFFSET_BEGINNING) == length)
  65459. +    {
  65460. +      if (oldsize < length)
  65461. +    {
  65462. +      /* Zero extra bytes */
  65463. +      off_t bufsize = length - oldsize, left = bufsize;
  65464. +      char *buf;
  65465. +      char reserve[512];
  65466. +
  65467. +      if (!(buf = AllocMem(bufsize, MEMF_CLEAR)))
  65468. +        {
  65469. +          bufsize = AvailMem(MEMF_LARGEST) / 2;
  65470. +
  65471. +          if (bufsize < 512 || !(buf = AllocMem(bufsize, MEMF_CLEAR)))
  65472. +        {
  65473. +          bufsize = 512;
  65474. +          buf = reserve;
  65475. +          memset(reserve, 0, 512);
  65476. +        }
  65477. +        }
  65478. +      while (left > 0)
  65479. +        {
  65480. +          long count = left > bufsize ? bufsize : left;
  65481. +
  65482. +          chkabort();
  65483. +          if (Write(fh, buf, count) != count)
  65484. +        {
  65485. +          err = IoErr();
  65486. +          break;
  65487. +        }
  65488. +          left -= count;
  65489. +        }
  65490. +      if (buf != reserve) FreeMem(buf, bufsize);
  65491. +    }
  65492. +      if (!err) ret = 0;
  65493. +    }
  65494. +  if (oldpos < length) Seek(fh, oldpos, OFFSET_BEGINNING);
  65495. +
  65496. +  if (ret) errno = convert_oserr(err);
  65497. +  return ret;
  65498. +}
  65499. +
  65500. +static int __regargs file_ioctl(void *userinfo, int request, void *data)
  65501. +{
  65502. +  struct amigainfo *info = userinfo;
  65503. +  BPTR fh = info->fh;
  65504. +
  65505. +  if (!info->deleted)
  65506. +    switch (request)
  65507. +      {
  65508. +      case TIOCGWINSZ: {
  65509. +    struct winsize *ws = data;
  65510. +    long col, row;
  65511. +
  65512. +    if (info->interactive && GetWinBounds(fh, &col, &row))
  65513. +      {
  65514. +        ws->ws_col = col; ws->ws_row = row;
  65515. +        return 0;
  65516. +      }
  65517. +    errno = ENOTTY;
  65518. +    return -1;
  65519. +      }
  65520. +      case _AMIGA_INTERACTIVE: {
  65521. +    int *inter = data;
  65522. +
  65523. +    *inter = IsInteractive(fh);
  65524. +    return 0;
  65525. +      }
  65526. +      case _AMIGA_GET_FH: {
  65527. +    BPTR *gotfh = data;
  65528. +
  65529. +    *gotfh = fh;
  65530. +    return 0;
  65531. +      }
  65532. +      case _AMIGA_FREE_FH: return 0;
  65533. +      case _AMIGA_TRUNCATE: {
  65534. +    off_t length = *(off_t *)data;
  65535. +
  65536. +    return _do_truncate(fh, length);
  65537. +      }
  65538. +      case _AMIGA_SETPROTECTION:
  65539. +    info->protection = *(long *)data;
  65540. +    return 0;
  65541. +      case _AMIGA_DELETE_IF_ME: {
  65542. +    BPTR nlock = *(BPTR *)data;
  65543. +
  65544. +    if (!info->lock) info->lock = DupLockFromFH(info->fh);
  65545. +    if (info->lock && SameLock(nlock, info->lock) == LOCK_SAME)
  65546. +      {
  65547. +        char name[256];
  65548. +
  65549. +        if (NameFromFH(fh, name, 256))
  65550. +          {
  65551. +        UnLock(nlock);
  65552. +        UnLock(info->lock);
  65553. +        Close(fh);
  65554. +        SetProtection(name, 0);
  65555. +        info->deleted = TRUE;
  65556. +        info->lock = info->fh = 0;
  65557. +        if (DeleteFile(name)) return 0;
  65558. +          }
  65559. +      }
  65560. +    ERROR;
  65561. +      }
  65562. +      }
  65563. +  errno = EINVAL;
  65564. +  return -1;
  65565. +}
  65566. +
  65567. +int _alloc_amigafd(BPTR fh, long protection, long flags)
  65568. +{
  65569. +  struct amigainfo *new = (struct amigainfo *)malloc(sizeof(struct amigainfo));
  65570. +  int fd;
  65571. +
  65572. +  if (!new) { errno = ENOMEM; return -1; }
  65573. +  new->fh = fh;
  65574. +  new->lock = NULL;
  65575. +  new->protection = protection;
  65576. +  new->deleted = FALSE;
  65577. +  new->interactive = IsInteractive(fh);
  65578. +
  65579. +  fd = _alloc_fd(new, flags,
  65580. +         file_select_start, file_select_poll, file_read, file_write,
  65581. +         file_lseek, file_close, file_ioctl);
  65582. +  if (fd < 0) free(new);
  65583. +
  65584. +  return fd;
  65585. +}
  65586. +
  65587. +void _init_unixio(BPTR in, int close_in, BPTR out, int close_out,
  65588. +          BPTR error, int close_error)
  65589. +{
  65590. +  if (_alloc_amigafd(in, -1, FI_READ | (close_in ? 0 : O_NO_CLOSE)) == 0 &&
  65591. +      _alloc_amigafd(out, -1, FI_WRITE | (close_out ? 0 : O_NO_CLOSE)) == 1 &&
  65592. +      _alloc_amigafd(error, -1, FI_WRITE | (close_error ? 0 : O_NO_CLOSE)) == 2)
  65593. +      return;
  65594. +
  65595. +  _fail("Failed to initialise I/O");
  65596. +}
  65597. diff -ru --new-file baseline/fsf/emacs/unixlib/src/amigados.h amiga/fsf/emacs/unixlib/src/amigados.h
  65598. --- baseline/fsf/emacs/unixlib/src/amigados.h    Wed Dec 31 17:00:00 1969
  65599. +++ amiga/fsf/emacs/unixlib/src/amigados.h    Sun Oct 15 17:16:06 1995
  65600. @@ -0,0 +1,10 @@
  65601. +#ifndef AMIGADOS_H
  65602. +#define AMIGADOS_H
  65603. +
  65604. +int _alloc_amigafd(BPTR fh, long protection, long flags);
  65605. +
  65606. +void _init_unixio(BPTR in, int close_in, BPTR out, int close_out,
  65607. +          BPTR error, int close_error);
  65608. +int _do_truncate(BPTR fh, off_t length);
  65609. +
  65610. +#endif
  65611. diff -ru --new-file baseline/fsf/emacs/unixlib/src/amigatime.c amiga/fsf/emacs/unixlib/src/amigatime.c
  65612. --- baseline/fsf/emacs/unixlib/src/amigatime.c    Wed Dec 31 17:00:00 1969
  65613. +++ amiga/fsf/emacs/unixlib/src/amigatime.c    Sun Oct 15 17:16:08 1995
  65614. @@ -0,0 +1,55 @@
  65615. +#include "amiga.h"
  65616. +#include "timeconvert.h"
  65617. +#include <sys/time.h>
  65618. +#include <sys/timeb.h>
  65619. +#include <string.h>
  65620. +
  65621. +extern char *tzname[2];
  65622. +extern int daylight;
  65623. +
  65624. +int gettimeofday(struct timeval *tp, struct timezone *tzp)
  65625. +{
  65626. +  struct timeval now;
  65627. +
  65628. +  chkabort();
  65629. +
  65630. +  _gettime(&now);
  65631. +  if (tp) *tp = now;
  65632. +
  65633. +  if (tzp)
  65634. +    {
  65635. +      int dst;
  65636. +      struct tm *local;
  65637. +
  65638. +      local = localtime(&now.tv_secs);
  65639. +      
  65640. +      tzp->tz_minuteswest = -local->tm_gmtoff / 60;
  65641. +      /* Guess a value for tz_dsttime, based on tzname[1] */
  65642. +      /* These guesses are not very good. */
  65643. +      dst = DST_NONE;
  65644. +      if (!strcmp(tzname[1], "MET DST")) dst = DST_MET;
  65645. +      else if (!strcmp(tzname[1], "WET DST")) dst = DST_WET;
  65646. +      else if (!strcmp(tzname[1], "EET DST")) dst = DST_EET;
  65647. +      else if (!strcmp(tzname[1], "EDT")) dst = DST_USA;
  65648. +      else if (!strcmp(tzname[1], "CDT")) dst = DST_USA;
  65649. +      else if (!strcmp(tzname[1], "MDT")) dst = DST_USA;
  65650. +      else if (!strcmp(tzname[1], "PDT")) dst = DST_USA;
  65651. +      else if (!strcmp(tzname[1], "AKDT")) dst = DST_USA;
  65652. +      tzp->tz_dsttime = dst;
  65653. +    }
  65654. +  return 0;
  65655. +}
  65656. +
  65657. +int ftime(struct timeb *ft)
  65658. +{
  65659. +  struct timeval now;
  65660. +  struct timezone zone;
  65661. +
  65662. +  gettimeofday(&now, &zone);
  65663. +  ft->time = now.tv_sec;
  65664. +  ft->millitm = now.tv_usec;
  65665. +  ft->timezone = zone.tz_minuteswest;
  65666. +  ft->dstflag = daylight;
  65667. +
  65668. +  return 0;
  65669. +}
  65670. diff -ru --new-file baseline/fsf/emacs/unixlib/src/bcmp.c amiga/fsf/emacs/unixlib/src/bcmp.c
  65671. --- baseline/fsf/emacs/unixlib/src/bcmp.c    Wed Dec 31 17:00:00 1969
  65672. +++ amiga/fsf/emacs/unixlib/src/bcmp.c    Sun Oct 15 17:16:10 1995
  65673. @@ -0,0 +1,9 @@
  65674. +#include "amiga.h"
  65675. +#include <string.h>
  65676. +
  65677. +#undef bcmp
  65678. +
  65679. +int bcmp(char *b1, char *b2, int length)
  65680. +{
  65681. +  return length == 0 ? 0 : memcmp(b2, b1, length);
  65682. +}
  65683. diff -ru --new-file baseline/fsf/emacs/unixlib/src/bcopy.c amiga/fsf/emacs/unixlib/src/bcopy.c
  65684. --- baseline/fsf/emacs/unixlib/src/bcopy.c    Wed Dec 31 17:00:00 1969
  65685. +++ amiga/fsf/emacs/unixlib/src/bcopy.c    Sun Oct 15 17:16:11 1995
  65686. @@ -0,0 +1,10 @@
  65687. +#include "amiga.h"
  65688. +#include <string.h>
  65689. +
  65690. +#undef bcopy
  65691. +
  65692. +void bcopy(char *b1, char *b2, int length)
  65693. +{
  65694. +  /* Unoptimised version */
  65695. +  memmove(b2, b1, length);
  65696. +}
  65697. diff -ru --new-file baseline/fsf/emacs/unixlib/src/bzero.c amiga/fsf/emacs/unixlib/src/bzero.c
  65698. --- baseline/fsf/emacs/unixlib/src/bzero.c    Wed Dec 31 17:00:00 1969
  65699. +++ amiga/fsf/emacs/unixlib/src/bzero.c    Sun Oct 15 17:16:13 1995
  65700. @@ -0,0 +1,9 @@
  65701. +#include "amiga.h"
  65702. +#include <string.h>
  65703. +
  65704. +#undef bzero
  65705. +
  65706. +void bzero(char *b, int length)
  65707. +{
  65708. +  memset(b, 0, length);
  65709. +}
  65710. diff -ru --new-file baseline/fsf/emacs/unixlib/src/chmod.c amiga/fsf/emacs/unixlib/src/chmod.c
  65711. --- baseline/fsf/emacs/unixlib/src/chmod.c    Wed Dec 31 17:00:00 1969
  65712. +++ amiga/fsf/emacs/unixlib/src/chmod.c    Sun Oct 15 17:16:15 1995
  65713. @@ -0,0 +1,8 @@
  65714. +#include "amiga.h"
  65715. +
  65716. +int chmod(const char *name, int mode)
  65717. +{
  65718. +  chkabort();
  65719. +  if (SetProtection(name, _make_protection(mode))) return 0;
  65720. +  ERROR;
  65721. +}
  65722. diff -ru --new-file baseline/fsf/emacs/unixlib/src/chown.c amiga/fsf/emacs/unixlib/src/chown.c
  65723. --- baseline/fsf/emacs/unixlib/src/chown.c    Wed Dec 31 17:00:00 1969
  65724. +++ amiga/fsf/emacs/unixlib/src/chown.c    Sun Oct 15 17:16:17 1995
  65725. @@ -0,0 +1,4 @@
  65726. +#include "amiga.h"
  65727. +
  65728. +int chown(char *path, int owner, int group) { return 0; }
  65729. +int fchown(int fd, int owner, int group) { return 0; }
  65730. diff -ru --new-file baseline/fsf/emacs/unixlib/src/close.c amiga/fsf/emacs/unixlib/src/close.c
  65731. --- baseline/fsf/emacs/unixlib/src/close.c    Wed Dec 31 17:00:00 1969
  65732. +++ amiga/fsf/emacs/unixlib/src/close.c    Sun Oct 15 17:16:19 1995
  65733. @@ -0,0 +1,26 @@
  65734. +#include "amiga.h"
  65735. +#include "files.h"
  65736. +#include <fcntl.h>
  65737. +
  65738. +#undef close
  65739. +
  65740. +int __close(int fd)
  65741. +{
  65742. +  struct fileinfo *fi;
  65743. +
  65744. +  chkabort();
  65745. +  if (fi = _find_fd(fd))
  65746. +    {
  65747. +      int err = fi->close(fi->userinfo, fi->flags & O_NO_CLOSE);
  65748. +
  65749. +      _free_fd(fd);
  65750. +      return err;
  65751. +    }
  65752. +  return -1;
  65753. +}
  65754. +
  65755. +int close(int fd)
  65756. +{
  65757. +  return __close(fd);
  65758. +}
  65759. +
  65760. diff -ru --new-file baseline/fsf/emacs/unixlib/src/creat.c amiga/fsf/emacs/unixlib/src/creat.c
  65761. --- baseline/fsf/emacs/unixlib/src/creat.c    Wed Dec 31 17:00:00 1969
  65762. +++ amiga/fsf/emacs/unixlib/src/creat.c    Sun Oct 15 17:16:21 1995
  65763. @@ -0,0 +1,17 @@
  65764. +#include "amiga.h"
  65765. +#include "files.h"
  65766. +#include <fcntl.h>
  65767. +
  65768. +#undef creat
  65769. +
  65770. +int __creat(const char *file, int prot)
  65771. +{
  65772. +  chkabort();
  65773. +  return open(file, O_WRONLY | O_CREAT | O_TRUNC, prot);
  65774. +}
  65775. +
  65776. +int creat(const char *file, int prot)
  65777. +{
  65778. +  return __creat(file, prot);
  65779. +}
  65780. +
  65781. diff -ru --new-file baseline/fsf/emacs/unixlib/src/ctime.c amiga/fsf/emacs/unixlib/src/ctime.c
  65782. --- baseline/fsf/emacs/unixlib/src/ctime.c    Wed Dec 31 17:00:00 1969
  65783. +++ amiga/fsf/emacs/unixlib/src/ctime.c    Sun Oct 15 17:16:23 1995
  65784. @@ -0,0 +1,1381 @@
  65785. +/*
  65786. + * Copyright (c) 1987, 1989 Regents of the University of California.
  65787. + * All rights reserved.
  65788. + *
  65789. + * This code is derived from software contributed to Berkeley by
  65790. + * Arthur David Olson of the National Cancer Institute.
  65791. + *
  65792. + * Redistribution and use in source and binary forms, with or without
  65793. + * modification, are permitted provided that the following conditions
  65794. + * are met:
  65795. + * 1. Redistributions of source code must retain the above copyright
  65796. + *    notice, this list of conditions and the following disclaimer.
  65797. + * 2. Redistributions in binary form must reproduce the above copyright
  65798. + *    notice, this list of conditions and the following disclaimer in the
  65799. + *    documentation and/or other materials provided with the distribution.
  65800. + * 3. All advertising materials mentioning features or use of this software
  65801. + *    must display the following acknowledgement:
  65802. + *    This product includes software developed by the University of
  65803. + *    California, Berkeley and its contributors.
  65804. + * 4. Neither the name of the University nor the names of its contributors
  65805. + *    may be used to endorse or promote products derived from this software
  65806. + *    without specific prior written permission.
  65807. + *
  65808. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  65809. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  65810. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  65811. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  65812. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  65813. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  65814. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  65815. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  65816. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  65817. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  65818. + * SUCH DAMAGE.
  65819. + */
  65820. +
  65821. +#if defined(LIBC_SCCS) && !defined(lint)
  65822. +static char sccsid[] = "@(#)ctime.c    5.26 (Berkeley) 2/23/91";
  65823. +#endif /* LIBC_SCCS and not lint */
  65824. +
  65825. +/*
  65826. +** Leap second handling from Bradley White (bww@k.gp.cs.cmu.edu).
  65827. +** POSIX-style TZ environment variable handling from Guy Harris
  65828. +** (guy@auspex.com).
  65829. +*/
  65830. +
  65831. +/*LINTLIBRARY*/
  65832. +
  65833. +#include <sys/param.h>
  65834. +#include <fcntl.h>
  65835. +#include <time.h>
  65836. +#include <tzfile.h>
  65837. +#include <string.h>
  65838. +#include <ctype.h>
  65839. +#include <stdio.h>
  65840. +#include <unistd.h>
  65841. +
  65842. +#ifdef __STDC__
  65843. +#include <stdlib.h>
  65844. +
  65845. +#define P(s)        s
  65846. +#define alloc_size_t    size_t
  65847. +#define qsort_size_t    size_t
  65848. +#define fread_size_t    size_t
  65849. +#define fwrite_size_t    size_t
  65850. +
  65851. +#else /* !defined __STDC__ */
  65852. +
  65853. +#define P(s)        ()
  65854. +
  65855. +typedef char *        genericptr_t;
  65856. +typedef unsigned    alloc_size_t;
  65857. +typedef int        qsort_size_t;
  65858. +typedef int        fread_size_t;
  65859. +typedef int        fwrite_size_t;
  65860. +
  65861. +extern char *    calloc();
  65862. +extern char *    malloc();
  65863. +extern char *    realloc();
  65864. +extern char *    getenv();
  65865. +
  65866. +#endif /* !defined __STDC__ */
  65867. +
  65868. +extern time_t    time();
  65869. +
  65870. +#define ACCESS_MODE    O_RDONLY
  65871. +#define OPEN_MODE    O_RDONLY
  65872. +
  65873. +#ifndef WILDABBR
  65874. +/*
  65875. +** Someone might make incorrect use of a time zone abbreviation:
  65876. +**    1.    They might reference tzname[0] before calling tzset (explicitly
  65877. +**         or implicitly).
  65878. +**    2.    They might reference tzname[1] before calling tzset (explicitly
  65879. +**         or implicitly).
  65880. +**    3.    They might reference tzname[1] after setting to a time zone
  65881. +**        in which Daylight Saving Time is never observed.
  65882. +**    4.    They might reference tzname[0] after setting to a time zone
  65883. +**        in which Standard Time is never observed.
  65884. +**    5.    They might reference tm.TM_ZONE after calling offtime.
  65885. +** What's best to do in the above cases is open to debate;
  65886. +** for now, we just set things up so that in any of the five cases
  65887. +** WILDABBR is used.  Another possibility:  initialize tzname[0] to the
  65888. +** string "tzname[0] used before set", and similarly for the other cases.
  65889. +** And another:  initialize tzname[0] to "ERA", with an explanation in the
  65890. +** manual page of what this "time zone abbreviation" means (doing this so
  65891. +** that tzname[0] has the "normal" length of three characters).
  65892. +*/
  65893. +#define WILDABBR    "   "
  65894. +#endif /* !defined WILDABBR */
  65895. +
  65896. +#ifndef TRUE
  65897. +#define TRUE        1
  65898. +#define FALSE        0
  65899. +#endif /* !defined TRUE */
  65900. +
  65901. +static const char GMT[] = "GMT";
  65902. +
  65903. +struct ttinfo {                /* time type information */
  65904. +    long        tt_gmtoff;    /* GMT offset in seconds */
  65905. +    int        tt_isdst;    /* used to set tm_isdst */
  65906. +    int        tt_abbrind;    /* abbreviation list index */
  65907. +    int        tt_ttisstd;    /* TRUE if transition is std time */
  65908. +};
  65909. +
  65910. +struct lsinfo {                /* leap second information */
  65911. +    time_t        ls_trans;    /* transition time */
  65912. +    long        ls_corr;    /* correction to apply */
  65913. +};
  65914. +
  65915. +struct state {
  65916. +    int        leapcnt;
  65917. +    int        timecnt;
  65918. +    int        typecnt;
  65919. +    int        charcnt;
  65920. +    time_t        ats[TZ_MAX_TIMES];
  65921. +    unsigned char    types[TZ_MAX_TIMES];
  65922. +    struct ttinfo    ttis[TZ_MAX_TYPES];
  65923. +    char        chars[(TZ_MAX_CHARS + 1 > sizeof GMT) ?
  65924. +                TZ_MAX_CHARS + 1 : sizeof GMT];
  65925. +    struct lsinfo    lsis[TZ_MAX_LEAPS];
  65926. +};
  65927. +
  65928. +struct rule {
  65929. +    int        r_type;        /* type of rule--see below */
  65930. +    int        r_day;        /* day number of rule */
  65931. +    int        r_week;        /* week number of rule */
  65932. +    int        r_mon;        /* month number of rule */
  65933. +    long        r_time;        /* transition time of rule */
  65934. +};
  65935. +
  65936. +#define    JULIAN_DAY        0    /* Jn - Julian day */
  65937. +#define    DAY_OF_YEAR        1    /* n - day of year */
  65938. +#define    MONTH_NTH_DAY_OF_WEEK    2    /* Mm.n.d - month, week, day of week */
  65939. +
  65940. +/*
  65941. +** Prototypes for static functions.
  65942. +*/
  65943. +
  65944. +static long        detzcode P((const char * codep));
  65945. +static const char *    getzname P((const char * strp));
  65946. +static const char *    getnum P((const char * strp, int * nump, int min,
  65947. +                int max));
  65948. +static const char *    getsecs P((const char * strp, long * secsp));
  65949. +static const char *    getoffset P((const char * strp, long * offsetp));
  65950. +static const char *    getrule P((const char * strp, struct rule * rulep));
  65951. +static void        gmtload P((struct state * sp));
  65952. +static void        gmtsub P((const time_t * timep, long offset,
  65953. +                struct tm * tmp));
  65954. +static void        localsub P((const time_t * timep, long offset,
  65955. +                struct tm * tmp));
  65956. +static void        normalize P((int * tensptr, int * unitsptr, int base));
  65957. +static void        settzname P((void));
  65958. +static time_t        time1 P((struct tm * tmp, void (* funcp)(),
  65959. +                long offset));
  65960. +static time_t        time2 P((struct tm *tmp, void (* funcp)(),
  65961. +                long offset, int * okayp));
  65962. +static void        timesub P((const time_t * timep, long offset,
  65963. +                const struct state * sp, struct tm * tmp));
  65964. +static int        tmcomp P((const struct tm * atmp,
  65965. +                const struct tm * btmp));
  65966. +static time_t        transtime P((time_t janfirst, int year,
  65967. +                const struct rule * rulep, long offset));
  65968. +static int        tzload P((const char * name, struct state * sp));
  65969. +static int        tzparse P((const char * name, struct state * sp,
  65970. +                int lastditch));
  65971. +
  65972. +#ifdef ALL_STATE
  65973. +static struct state *    lclptr;
  65974. +static struct state *    gmtptr;
  65975. +#endif /* defined ALL_STATE */
  65976. +
  65977. +#ifndef ALL_STATE
  65978. +static struct state    lclmem;
  65979. +static struct state    gmtmem;
  65980. +#define lclptr        (&lclmem)
  65981. +#define gmtptr        (&gmtmem)
  65982. +#endif /* State Farm */
  65983. +
  65984. +static int        lcl_is_set;
  65985. +static int        gmt_is_set;
  65986. +
  65987. +char *            tzname[2] = {
  65988. +    WILDABBR,
  65989. +    WILDABBR
  65990. +};
  65991. +
  65992. +time_t            timezone = 0;
  65993. +int            daylight = 0;
  65994. +
  65995. +#ifdef ALTZONE
  65996. +time_t            altzone = 0;
  65997. +#endif /* defined ALTZONE */
  65998. +
  65999. +static long
  66000. +detzcode(codep)
  66001. +const char * const    codep;
  66002. +{
  66003. +    register long    result;
  66004. +    register int    i;
  66005. +
  66006. +    result = 0;
  66007. +    for (i = 0; i < 4; ++i)
  66008. +        result = (result << 8) | (codep[i] & 0xff);
  66009. +    return result;
  66010. +}
  66011. +
  66012. +static void
  66013. +settzname()
  66014. +{
  66015. +    register const struct state * const    sp = lclptr;
  66016. +    register int                i;
  66017. +
  66018. +    tzname[0] = WILDABBR;
  66019. +    tzname[1] = WILDABBR;
  66020. +    daylight = 0;
  66021. +    timezone = 0;
  66022. +#ifdef ALTZONE
  66023. +    altzone = 0;
  66024. +#endif /* defined ALTZONE */
  66025. +#ifdef ALL_STATE
  66026. +    if (sp == NULL) {
  66027. +        tzname[0] = tzname[1] = GMT;
  66028. +        return;
  66029. +    }
  66030. +#endif /* defined ALL_STATE */
  66031. +    for (i = 0; i < sp->typecnt; ++i) {
  66032. +        register const struct ttinfo * const    ttisp = &sp->ttis[i];
  66033. +
  66034. +        tzname[ttisp->tt_isdst] =
  66035. +            (char *) &sp->chars[ttisp->tt_abbrind];
  66036. +        if (ttisp->tt_isdst)
  66037. +            daylight = 1;
  66038. +        if (i == 0 || !ttisp->tt_isdst)
  66039. +            timezone = -(ttisp->tt_gmtoff);
  66040. +#ifdef ALTZONE
  66041. +        if (i == 0 || ttisp->tt_isdst)
  66042. +            altzone = -(ttisp->tt_gmtoff);
  66043. +#endif /* defined ALTZONE */
  66044. +    }
  66045. +    /*
  66046. +    ** And to get the latest zone names into tzname. . .
  66047. +    */
  66048. +    for (i = 0; i < sp->timecnt; ++i) {
  66049. +        register const struct ttinfo * const    ttisp =
  66050. +                            &sp->ttis[sp->types[i]];
  66051. +
  66052. +        tzname[ttisp->tt_isdst] =
  66053. +            (char *) &sp->chars[ttisp->tt_abbrind];
  66054. +    }
  66055. +}
  66056. +
  66057. +static int
  66058. +tzload(name, sp)
  66059. +register const char *        name;
  66060. +register struct state * const    sp;
  66061. +{
  66062. +    register const char *    p;
  66063. +    register int        i;
  66064. +    register int        fid;
  66065. +
  66066. +    if (name == NULL && (name = TZDEFAULT) == NULL)
  66067. +        return -1;
  66068. +    {
  66069. +        char        fullname[FILENAME_MAX + 1];
  66070. +
  66071. +        if (name[0] == ':')
  66072. +            ++name;
  66073. +        if (!strchr(name, ':')) {
  66074. +            if ((p = TZDIR) == NULL)
  66075. +                return -1;
  66076. +            if ((strlen(p) + strlen(name) + 1) >= sizeof fullname)
  66077. +                return -1;
  66078. +            (void) strcpy(fullname, p);
  66079. +            (void) strcat(fullname, "/");
  66080. +            (void) strcat(fullname, name);
  66081. +            name = fullname;
  66082. +        }
  66083. +        if ((fid = open(name, OPEN_MODE)) == -1)
  66084. +            return -1;
  66085. +    }
  66086. +    {
  66087. +        register const struct tzhead *    tzhp;
  66088. +        char                buf[sizeof *sp + sizeof *tzhp];
  66089. +        int                ttisstdcnt;
  66090. +
  66091. +        i = read(fid, buf, sizeof buf);
  66092. +        if (close(fid) != 0 || i < sizeof *tzhp)
  66093. +            return -1;
  66094. +        tzhp = (struct tzhead *) buf;
  66095. +        ttisstdcnt = (int) detzcode(tzhp->tzh_ttisstdcnt);
  66096. +        sp->leapcnt = (int) detzcode(tzhp->tzh_leapcnt);
  66097. +        sp->timecnt = (int) detzcode(tzhp->tzh_timecnt);
  66098. +        sp->typecnt = (int) detzcode(tzhp->tzh_typecnt);
  66099. +        sp->charcnt = (int) detzcode(tzhp->tzh_charcnt);
  66100. +        if (sp->leapcnt < 0 || sp->leapcnt > TZ_MAX_LEAPS ||
  66101. +            sp->typecnt <= 0 || sp->typecnt > TZ_MAX_TYPES ||
  66102. +            sp->timecnt < 0 || sp->timecnt > TZ_MAX_TIMES ||
  66103. +            sp->charcnt < 0 || sp->charcnt > TZ_MAX_CHARS ||
  66104. +            (ttisstdcnt != sp->typecnt && ttisstdcnt != 0))
  66105. +                return -1;
  66106. +        if (i < sizeof *tzhp +
  66107. +            sp->timecnt * (4 + sizeof (char)) +
  66108. +            sp->typecnt * (4 + 2 * sizeof (char)) +
  66109. +            sp->charcnt * sizeof (char) +
  66110. +            sp->leapcnt * 2 * 4 +
  66111. +            ttisstdcnt * sizeof (char))
  66112. +                return -1;
  66113. +        p = buf + sizeof *tzhp;
  66114. +        for (i = 0; i < sp->timecnt; ++i) {
  66115. +            sp->ats[i] = detzcode(p);
  66116. +            p += 4;
  66117. +        }
  66118. +        for (i = 0; i < sp->timecnt; ++i) {
  66119. +            sp->types[i] = (unsigned char) *p++;
  66120. +            if (sp->types[i] >= sp->typecnt)
  66121. +                return -1;
  66122. +        }
  66123. +        for (i = 0; i < sp->typecnt; ++i) {
  66124. +            register struct ttinfo *    ttisp;
  66125. +
  66126. +            ttisp = &sp->ttis[i];
  66127. +            ttisp->tt_gmtoff = detzcode(p);
  66128. +            p += 4;
  66129. +            ttisp->tt_isdst = (unsigned char) *p++;
  66130. +            if (ttisp->tt_isdst != 0 && ttisp->tt_isdst != 1)
  66131. +                return -1;
  66132. +            ttisp->tt_abbrind = (unsigned char) *p++;
  66133. +            if (ttisp->tt_abbrind < 0 ||
  66134. +                ttisp->tt_abbrind > sp->charcnt)
  66135. +                    return -1;
  66136. +        }
  66137. +        for (i = 0; i < sp->charcnt; ++i)
  66138. +            sp->chars[i] = *p++;
  66139. +        sp->chars[i] = '\0';    /* ensure '\0' at end */
  66140. +        for (i = 0; i < sp->leapcnt; ++i) {
  66141. +            register struct lsinfo *    lsisp;
  66142. +
  66143. +            lsisp = &sp->lsis[i];
  66144. +            lsisp->ls_trans = detzcode(p);
  66145. +            p += 4;
  66146. +            lsisp->ls_corr = detzcode(p);
  66147. +            p += 4;
  66148. +        }
  66149. +        for (i = 0; i < sp->typecnt; ++i) {
  66150. +            register struct ttinfo *    ttisp;
  66151. +
  66152. +            ttisp = &sp->ttis[i];
  66153. +            if (ttisstdcnt == 0)
  66154. +                ttisp->tt_ttisstd = FALSE;
  66155. +            else {
  66156. +                ttisp->tt_ttisstd = *p++;
  66157. +                if (ttisp->tt_ttisstd != TRUE &&
  66158. +                    ttisp->tt_ttisstd != FALSE)
  66159. +                        return -1;
  66160. +            }
  66161. +        }
  66162. +    }
  66163. +    return 0;
  66164. +}
  66165. +
  66166. +static const int    mon_lengths[2][MONSPERYEAR] = {
  66167. +    31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,
  66168. +    31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
  66169. +};
  66170. +
  66171. +static const int    year_lengths[2] = {
  66172. +    DAYSPERNYEAR, DAYSPERLYEAR
  66173. +};
  66174. +
  66175. +/*
  66176. +** Given a pointer into a time zone string, scan until a character that is not
  66177. +** a valid character in a zone name is found.  Return a pointer to that
  66178. +** character.
  66179. +*/
  66180. +
  66181. +static const char *
  66182. +getzname(strp)
  66183. +register const char *    strp;
  66184. +{
  66185. +    register char    c;
  66186. +
  66187. +    while ((c = *strp) != '\0' && !isdigit(c) && c != ',' && c != '-' &&
  66188. +        c != '+')
  66189. +            ++strp;
  66190. +    return strp;
  66191. +}
  66192. +
  66193. +/*
  66194. +** Given a pointer into a time zone string, extract a number from that string.
  66195. +** Check that the number is within a specified range; if it is not, return
  66196. +** NULL.
  66197. +** Otherwise, return a pointer to the first character not part of the number.
  66198. +*/
  66199. +
  66200. +static const char *
  66201. +getnum(strp, nump, min, max)
  66202. +register const char *    strp;
  66203. +int * const        nump;
  66204. +const int        min;
  66205. +const int        max;
  66206. +{
  66207. +    register char    c;
  66208. +    register int    num;
  66209. +
  66210. +    if (strp == NULL || !isdigit(*strp))
  66211. +        return NULL;
  66212. +    num = 0;
  66213. +    while ((c = *strp) != '\0' && isdigit(c)) {
  66214. +        num = num * 10 + (c - '0');
  66215. +        if (num > max)
  66216. +            return NULL;    /* illegal value */
  66217. +        ++strp;
  66218. +    }
  66219. +    if (num < min)
  66220. +        return NULL;        /* illegal value */
  66221. +    *nump = num;
  66222. +    return strp;
  66223. +}
  66224. +
  66225. +/*
  66226. +** Given a pointer into a time zone string, extract a number of seconds,
  66227. +** in hh[:mm[:ss]] form, from the string.
  66228. +** If any error occurs, return NULL.
  66229. +** Otherwise, return a pointer to the first character not part of the number
  66230. +** of seconds.
  66231. +*/
  66232. +
  66233. +static const char *
  66234. +getsecs(strp, secsp)
  66235. +register const char *    strp;
  66236. +long * const        secsp;
  66237. +{
  66238. +    int    num;
  66239. +
  66240. +    strp = getnum(strp, &num, 0, HOURSPERDAY);
  66241. +    if (strp == NULL)
  66242. +        return NULL;
  66243. +    *secsp = num * SECSPERHOUR;
  66244. +    if (*strp == ':') {
  66245. +        ++strp;
  66246. +        strp = getnum(strp, &num, 0, MINSPERHOUR - 1);
  66247. +        if (strp == NULL)
  66248. +            return NULL;
  66249. +        *secsp += num * SECSPERMIN;
  66250. +        if (*strp == ':') {
  66251. +            ++strp;
  66252. +            strp = getnum(strp, &num, 0, SECSPERMIN - 1);
  66253. +            if (strp == NULL)
  66254. +                return NULL;
  66255. +            *secsp += num;
  66256. +        }
  66257. +    }
  66258. +    return strp;
  66259. +}
  66260. +
  66261. +/*
  66262. +** Given a pointer into a time zone string, extract an offset, in
  66263. +** [+-]hh[:mm[:ss]] form, from the string.
  66264. +** If any error occurs, return NULL.
  66265. +** Otherwise, return a pointer to the first character not part of the time.
  66266. +*/
  66267. +
  66268. +static const char *
  66269. +getoffset(strp, offsetp)
  66270. +register const char *    strp;
  66271. +long * const        offsetp;
  66272. +{
  66273. +    register int    neg;
  66274. +
  66275. +    if (*strp == '-') {
  66276. +        neg = 1;
  66277. +        ++strp;
  66278. +    } else if (isdigit(*strp) || *strp++ == '+')
  66279. +        neg = 0;
  66280. +    else    return NULL;        /* illegal offset */
  66281. +    strp = getsecs(strp, offsetp);
  66282. +    if (strp == NULL)
  66283. +        return NULL;        /* illegal time */
  66284. +    if (neg)
  66285. +        *offsetp = -*offsetp;
  66286. +    return strp;
  66287. +}
  66288. +
  66289. +/*
  66290. +** Given a pointer into a time zone string, extract a rule in the form
  66291. +** date[/time].  See POSIX section 8 for the format of "date" and "time".
  66292. +** If a valid rule is not found, return NULL.
  66293. +** Otherwise, return a pointer to the first character not part of the rule.
  66294. +*/
  66295. +
  66296. +static const char *
  66297. +getrule(strp, rulep)
  66298. +const char *            strp;
  66299. +register struct rule * const    rulep;
  66300. +{
  66301. +    if (*strp == 'J') {
  66302. +        /*
  66303. +        ** Julian day.
  66304. +        */
  66305. +        rulep->r_type = JULIAN_DAY;
  66306. +        ++strp;
  66307. +        strp = getnum(strp, &rulep->r_day, 1, DAYSPERNYEAR);
  66308. +    } else if (*strp == 'M') {
  66309. +        /*
  66310. +        ** Month, week, day.
  66311. +        */
  66312. +        rulep->r_type = MONTH_NTH_DAY_OF_WEEK;
  66313. +        ++strp;
  66314. +        strp = getnum(strp, &rulep->r_mon, 1, MONSPERYEAR);
  66315. +        if (strp == NULL)
  66316. +            return NULL;
  66317. +        if (*strp++ != '.')
  66318. +            return NULL;
  66319. +        strp = getnum(strp, &rulep->r_week, 1, 5);
  66320. +        if (strp == NULL)
  66321. +            return NULL;
  66322. +        if (*strp++ != '.')
  66323. +            return NULL;
  66324. +        strp = getnum(strp, &rulep->r_day, 0, DAYSPERWEEK - 1);
  66325. +    } else if (isdigit(*strp)) {
  66326. +        /*
  66327. +        ** Day of year.
  66328. +        */
  66329. +        rulep->r_type = DAY_OF_YEAR;
  66330. +        strp = getnum(strp, &rulep->r_day, 0, DAYSPERLYEAR - 1);
  66331. +    } else    return NULL;        /* invalid format */
  66332. +    if (strp == NULL)
  66333. +        return NULL;
  66334. +    if (*strp == '/') {
  66335. +        /*
  66336. +        ** Time specified.
  66337. +        */
  66338. +        ++strp;
  66339. +        strp = getsecs(strp, &rulep->r_time);
  66340. +    } else    rulep->r_time = 2 * SECSPERHOUR;    /* default = 2:00:00 */
  66341. +    return strp;
  66342. +}
  66343. +
  66344. +/*
  66345. +** Given the Epoch-relative time of January 1, 00:00:00 GMT, in a year, the
  66346. +** year, a rule, and the offset from GMT at the time that rule takes effect,
  66347. +** calculate the Epoch-relative time that rule takes effect.
  66348. +*/
  66349. +
  66350. +static time_t
  66351. +transtime(janfirst, year, rulep, offset)
  66352. +const time_t                janfirst;
  66353. +const int                year;
  66354. +register const struct rule * const    rulep;
  66355. +const long                offset;
  66356. +{
  66357. +    register int    leapyear;
  66358. +    register time_t    value;
  66359. +    register int    i;
  66360. +    int        d, m1, yy0, yy1, yy2, dow;
  66361. +
  66362. +    leapyear = isleap(year);
  66363. +    switch (rulep->r_type) {
  66364. +
  66365. +    case JULIAN_DAY:
  66366. +        /*
  66367. +        ** Jn - Julian day, 1 == January 1, 60 == March 1 even in leap
  66368. +        ** years.
  66369. +        ** In non-leap years, or if the day number is 59 or less, just
  66370. +        ** add SECSPERDAY times the day number-1 to the time of
  66371. +        ** January 1, midnight, to get the day.
  66372. +        */
  66373. +        value = janfirst + (rulep->r_day - 1) * SECSPERDAY;
  66374. +        if (leapyear && rulep->r_day >= 60)
  66375. +            value += SECSPERDAY;
  66376. +        break;
  66377. +
  66378. +    case DAY_OF_YEAR:
  66379. +        /*
  66380. +        ** n - day of year.
  66381. +        ** Just add SECSPERDAY times the day number to the time of
  66382. +        ** January 1, midnight, to get the day.
  66383. +        */
  66384. +        value = janfirst + rulep->r_day * SECSPERDAY;
  66385. +        break;
  66386. +
  66387. +    case MONTH_NTH_DAY_OF_WEEK:
  66388. +        /*
  66389. +        ** Mm.n.d - nth "dth day" of month m.
  66390. +        */
  66391. +        value = janfirst;
  66392. +        for (i = 0; i < rulep->r_mon - 1; ++i)
  66393. +            value += mon_lengths[leapyear][i] * SECSPERDAY;
  66394. +
  66395. +        /*
  66396. +        ** Use Zeller's Congruence to get day-of-week of first day of
  66397. +        ** month.
  66398. +        */
  66399. +        m1 = (rulep->r_mon + 9) % 12 + 1;
  66400. +        yy0 = (rulep->r_mon <= 2) ? (year - 1) : year;
  66401. +        yy1 = yy0 / 100;
  66402. +        yy2 = yy0 % 100;
  66403. +        dow = ((26 * m1 - 2) / 10 +
  66404. +            1 + yy2 + yy2 / 4 + yy1 / 4 - 2 * yy1) % 7;
  66405. +        if (dow < 0)
  66406. +            dow += DAYSPERWEEK;
  66407. +
  66408. +        /*
  66409. +        ** "dow" is the day-of-week of the first day of the month.  Get
  66410. +        ** the day-of-month (zero-origin) of the first "dow" day of the
  66411. +        ** month.
  66412. +        */
  66413. +        d = rulep->r_day - dow;
  66414. +        if (d < 0)
  66415. +            d += DAYSPERWEEK;
  66416. +        for (i = 1; i < rulep->r_week; ++i) {
  66417. +            if (d + DAYSPERWEEK >=
  66418. +                mon_lengths[leapyear][rulep->r_mon - 1])
  66419. +                    break;
  66420. +            d += DAYSPERWEEK;
  66421. +        }
  66422. +
  66423. +        /*
  66424. +        ** "d" is the day-of-month (zero-origin) of the day we want.
  66425. +        */
  66426. +        value += d * SECSPERDAY;
  66427. +        break;
  66428. +    }
  66429. +
  66430. +    /*
  66431. +    ** "value" is the Epoch-relative time of 00:00:00 GMT on the day in
  66432. +    ** question.  To get the Epoch-relative time of the specified local
  66433. +    ** time on that day, add the transition time and the current offset
  66434. +    ** from GMT.
  66435. +    */
  66436. +    return value + rulep->r_time + offset;
  66437. +}
  66438. +
  66439. +/*
  66440. +** Given a POSIX section 8-style TZ string, fill in the rule tables as
  66441. +** appropriate.
  66442. +*/
  66443. +
  66444. +static int
  66445. +tzparse(name, sp, lastditch)
  66446. +const char *            name;
  66447. +register struct state * const    sp;
  66448. +const int            lastditch;
  66449. +{
  66450. +    const char *            stdname;
  66451. +    const char *            dstname;
  66452. +    int                stdlen;
  66453. +    int                dstlen;
  66454. +    long                stdoffset;
  66455. +    long                dstoffset;
  66456. +    register time_t *        atp;
  66457. +    register unsigned char *    typep;
  66458. +    register char *            cp;
  66459. +    register int            load_result;
  66460. +
  66461. +    stdname = name;
  66462. +    if (lastditch) {
  66463. +        stdlen = strlen(name);    /* length of standard zone name */
  66464. +        name += stdlen;
  66465. +        if (stdlen >= sizeof sp->chars)
  66466. +            stdlen = (sizeof sp->chars) - 1;
  66467. +    } else {
  66468. +        name = getzname(name);
  66469. +        stdlen = name - stdname;
  66470. +        if (stdlen < 3)
  66471. +            return -1;
  66472. +    }
  66473. +    if (*name == '\0')
  66474. +        return -1;
  66475. +    else {
  66476. +        name = getoffset(name, &stdoffset);
  66477. +        if (name == NULL)
  66478. +            return -1;
  66479. +    }
  66480. +    load_result = tzload(TZDEFRULES, sp);
  66481. +    if (load_result != 0)
  66482. +        sp->leapcnt = 0;        /* so, we're off a little */
  66483. +    if (*name != '\0') {
  66484. +        dstname = name;
  66485. +        name = getzname(name);
  66486. +        dstlen = name - dstname;    /* length of DST zone name */
  66487. +        if (dstlen < 3)
  66488. +            return -1;
  66489. +        if (*name != '\0' && *name != ',' && *name != ';') {
  66490. +            name = getoffset(name, &dstoffset);
  66491. +            if (name == NULL)
  66492. +                return -1;
  66493. +        } else    dstoffset = stdoffset - SECSPERHOUR;
  66494. +        if (*name == ',' || *name == ';') {
  66495. +            struct rule    start;
  66496. +            struct rule    end;
  66497. +            register int    year;
  66498. +            register time_t    janfirst;
  66499. +            time_t        starttime;
  66500. +            time_t        endtime;
  66501. +
  66502. +            ++name;
  66503. +            if ((name = getrule(name, &start)) == NULL)
  66504. +                return -1;
  66505. +            if (*name++ != ',')
  66506. +                return -1;
  66507. +            if ((name = getrule(name, &end)) == NULL)
  66508. +                return -1;
  66509. +            if (*name != '\0')
  66510. +                return -1;
  66511. +            sp->typecnt = 2;    /* standard time and DST */
  66512. +            /*
  66513. +            ** Two transitions per year, from EPOCH_YEAR to 2037.
  66514. +            */
  66515. +            sp->timecnt = 2 * (2037 - EPOCH_YEAR + 1);
  66516. +            if (sp->timecnt > TZ_MAX_TIMES)
  66517. +                return -1;
  66518. +            sp->ttis[0].tt_gmtoff = -dstoffset;
  66519. +            sp->ttis[0].tt_isdst = 1;
  66520. +            sp->ttis[0].tt_abbrind = stdlen + 1;
  66521. +            sp->ttis[1].tt_gmtoff = -stdoffset;
  66522. +            sp->ttis[1].tt_isdst = 0;
  66523. +            sp->ttis[1].tt_abbrind = 0;
  66524. +            atp = sp->ats;
  66525. +            typep = sp->types;
  66526. +            janfirst = 0;
  66527. +            for (year = EPOCH_YEAR; year <= 2037; ++year) {
  66528. +                starttime = transtime(janfirst, year, &start,
  66529. +                    stdoffset);
  66530. +                endtime = transtime(janfirst, year, &end,
  66531. +                    dstoffset);
  66532. +                if (starttime > endtime) {
  66533. +                    *atp++ = endtime;
  66534. +                    *typep++ = 1;    /* DST ends */
  66535. +                    *atp++ = starttime;
  66536. +                    *typep++ = 0;    /* DST begins */
  66537. +                } else {
  66538. +                    *atp++ = starttime;
  66539. +                    *typep++ = 0;    /* DST begins */
  66540. +                    *atp++ = endtime;
  66541. +                    *typep++ = 1;    /* DST ends */
  66542. +                }
  66543. +                janfirst +=
  66544. +                    year_lengths[isleap(year)] * SECSPERDAY;
  66545. +            }
  66546. +        } else {
  66547. +            int        sawstd;
  66548. +            int        sawdst;
  66549. +            long        stdfix;
  66550. +            long        dstfix;
  66551. +            long        oldfix;
  66552. +            int        isdst;
  66553. +            register int    i;
  66554. +
  66555. +            if (*name != '\0')
  66556. +                return -1;
  66557. +            if (load_result != 0)
  66558. +                return -1;
  66559. +            /*
  66560. +            ** Compute the difference between the real and
  66561. +            ** prototype standard and summer time offsets
  66562. +            ** from GMT, and put the real standard and summer
  66563. +            ** time offsets into the rules in place of the
  66564. +            ** prototype offsets.
  66565. +            */
  66566. +            sawstd = FALSE;
  66567. +            sawdst = FALSE;
  66568. +            stdfix = 0;
  66569. +            dstfix = 0;
  66570. +            for (i = 0; i < sp->typecnt; ++i) {
  66571. +                if (sp->ttis[i].tt_isdst) {
  66572. +                    oldfix = dstfix;
  66573. +                    dstfix =
  66574. +                        sp->ttis[i].tt_gmtoff + dstoffset;
  66575. +                    if (sawdst && (oldfix != dstfix))
  66576. +                        return -1;
  66577. +                    sp->ttis[i].tt_gmtoff = -dstoffset;
  66578. +                    sp->ttis[i].tt_abbrind = stdlen + 1;
  66579. +                    sawdst = TRUE;
  66580. +                } else {
  66581. +                    oldfix = stdfix;
  66582. +                    stdfix =
  66583. +                        sp->ttis[i].tt_gmtoff + stdoffset;
  66584. +                    if (sawstd && (oldfix != stdfix))
  66585. +                        return -1;
  66586. +                    sp->ttis[i].tt_gmtoff = -stdoffset;
  66587. +                    sp->ttis[i].tt_abbrind = 0;
  66588. +                    sawstd = TRUE;
  66589. +                }
  66590. +            }
  66591. +            /*
  66592. +            ** Make sure we have both standard and summer time.
  66593. +            */
  66594. +            if (!sawdst || !sawstd)
  66595. +                return -1;
  66596. +            /*
  66597. +            ** Now correct the transition times by shifting
  66598. +            ** them by the difference between the real and
  66599. +            ** prototype offsets.  Note that this difference
  66600. +            ** can be different in standard and summer time;
  66601. +            ** the prototype probably has a 1-hour difference
  66602. +            ** between standard and summer time, but a different
  66603. +            ** difference can be specified in TZ.
  66604. +            */
  66605. +            isdst = FALSE;    /* we start in standard time */
  66606. +            for (i = 0; i < sp->timecnt; ++i) {
  66607. +                register const struct ttinfo *    ttisp;
  66608. +
  66609. +                /*
  66610. +                ** If summer time is in effect, and the
  66611. +                ** transition time was not specified as
  66612. +                ** standard time, add the summer time
  66613. +                ** offset to the transition time;
  66614. +                ** otherwise, add the standard time offset
  66615. +                ** to the transition time.
  66616. +                */
  66617. +                ttisp = &sp->ttis[sp->types[i]];
  66618. +                sp->ats[i] +=
  66619. +                    (isdst && !ttisp->tt_ttisstd) ?
  66620. +                        dstfix : stdfix;
  66621. +                isdst = ttisp->tt_isdst;
  66622. +            }
  66623. +        }
  66624. +    } else {
  66625. +        dstlen = 0;
  66626. +        sp->typecnt = 1;        /* only standard time */
  66627. +        sp->timecnt = 0;
  66628. +        sp->ttis[0].tt_gmtoff = -stdoffset;
  66629. +        sp->ttis[0].tt_isdst = 0;
  66630. +        sp->ttis[0].tt_abbrind = 0;
  66631. +    }
  66632. +    sp->charcnt = stdlen + 1;
  66633. +    if (dstlen != 0)
  66634. +        sp->charcnt += dstlen + 1;
  66635. +    if (sp->charcnt > sizeof sp->chars)
  66636. +        return -1;
  66637. +    cp = sp->chars;
  66638. +    (void) strncpy(cp, stdname, stdlen);
  66639. +    cp += stdlen;
  66640. +    *cp++ = '\0';
  66641. +    if (dstlen != 0) {
  66642. +        (void) strncpy(cp, dstname, dstlen);
  66643. +        *(cp + dstlen) = '\0';
  66644. +    }
  66645. +    return 0;
  66646. +}
  66647. +
  66648. +static void
  66649. +gmtload(sp)
  66650. +struct state * const    sp;
  66651. +{
  66652. +    if (tzload(GMT, sp) != 0)
  66653. +        (void) tzparse(GMT, sp, TRUE);
  66654. +}
  66655. +
  66656. +void
  66657. +tzset()
  66658. +{
  66659. +    register const char *    name;
  66660. +    void tzsetwall();
  66661. +
  66662. +    name = getenv("UNIXTZ");
  66663. +    if (name == NULL) {
  66664. +        tzsetwall();
  66665. +        return;
  66666. +    }
  66667. +    lcl_is_set = TRUE;
  66668. +#ifdef ALL_STATE
  66669. +    if (lclptr == NULL) {
  66670. +        lclptr = (struct state *) malloc(sizeof *lclptr);
  66671. +        if (lclptr == NULL) {
  66672. +            settzname();    /* all we can do */
  66673. +            return;
  66674. +        }
  66675. +    }
  66676. +#endif /* defined ALL_STATE */
  66677. +    if (*name == '\0') {
  66678. +        /*
  66679. +        ** User wants it fast rather than right.
  66680. +        */
  66681. +        lclptr->leapcnt = 0;        /* so, we're off a little */
  66682. +        lclptr->timecnt = 0;
  66683. +        lclptr->ttis[0].tt_gmtoff = 0;
  66684. +        lclptr->ttis[0].tt_abbrind = 0;
  66685. +        (void) strcpy(lclptr->chars, GMT);
  66686. +    } else if (tzload(name, lclptr) != 0)
  66687. +        if (name[0] == ':' || tzparse(name, lclptr, FALSE) != 0)
  66688. +            (void) gmtload(lclptr);
  66689. +    settzname();
  66690. +}
  66691. +
  66692. +void
  66693. +tzsetwall()
  66694. +{
  66695. +    lcl_is_set = TRUE;
  66696. +#ifdef ALL_STATE
  66697. +    if (lclptr == NULL) {
  66698. +        lclptr = (struct state *) malloc(sizeof *lclptr);
  66699. +        if (lclptr == NULL) {
  66700. +            settzname();    /* all we can do */
  66701. +            return;
  66702. +        }
  66703. +    }
  66704. +#endif /* defined ALL_STATE */
  66705. +    if (tzload((char *) NULL, lclptr) != 0)
  66706. +        gmtload(lclptr);
  66707. +    settzname();
  66708. +}
  66709. +
  66710. +/*
  66711. +** The easy way to behave "as if no library function calls" localtime
  66712. +** is to not call it--so we drop its guts into "localsub", which can be
  66713. +** freely called.  (And no, the PANS doesn't require the above behavior--
  66714. +** but it *is* desirable.)
  66715. +**
  66716. +** The unused offset argument is for the benefit of mktime variants.
  66717. +*/
  66718. +
  66719. +/*ARGSUSED*/
  66720. +static void
  66721. +localsub(timep, offset, tmp)
  66722. +const time_t * const    timep;
  66723. +const long        offset;
  66724. +struct tm * const    tmp;
  66725. +{
  66726. +    register struct state *    sp;
  66727. +    register const struct ttinfo *    ttisp;
  66728. +    register int            i;
  66729. +    const time_t            t = *timep;
  66730. +
  66731. +    if (!lcl_is_set)
  66732. +        tzset();
  66733. +    sp = lclptr;
  66734. +#ifdef ALL_STATE
  66735. +    if (sp == NULL) {
  66736. +        gmtsub(timep, offset, tmp);
  66737. +        return;
  66738. +    }
  66739. +#endif /* defined ALL_STATE */
  66740. +    if (sp->timecnt == 0 || t < sp->ats[0]) {
  66741. +        i = 0;
  66742. +        while (sp->ttis[i].tt_isdst)
  66743. +            if (++i >= sp->typecnt) {
  66744. +                i = 0;
  66745. +                break;
  66746. +            }
  66747. +    } else {
  66748. +        for (i = 1; i < sp->timecnt; ++i)
  66749. +            if (t < sp->ats[i])
  66750. +                break;
  66751. +        i = sp->types[i - 1];
  66752. +    }
  66753. +    ttisp = &sp->ttis[i];
  66754. +    /*
  66755. +    ** To get (wrong) behavior that's compatible with System V Release 2.0
  66756. +    ** you'd replace the statement below with
  66757. +    **    t += ttisp->tt_gmtoff;
  66758. +    **    timesub(&t, 0L, sp, tmp);
  66759. +    */
  66760. +    timesub(&t, ttisp->tt_gmtoff, sp, tmp);
  66761. +    tmp->tm_isdst = ttisp->tt_isdst;
  66762. +    tzname[tmp->tm_isdst] = (char *) &sp->chars[ttisp->tt_abbrind];
  66763. +    tmp->tm_zone = &sp->chars[ttisp->tt_abbrind];
  66764. +}
  66765. +
  66766. +struct tm *
  66767. +localtime(timep)
  66768. +const time_t * const    timep;
  66769. +{
  66770. +    static struct tm    tm;
  66771. +
  66772. +    localsub(timep, 0L, &tm);
  66773. +    return &tm;
  66774. +}
  66775. +
  66776. +/*
  66777. +** gmtsub is to gmtime as localsub is to localtime.
  66778. +*/
  66779. +
  66780. +static void
  66781. +gmtsub(timep, offset, tmp)
  66782. +const time_t * const    timep;
  66783. +const long        offset;
  66784. +struct tm * const    tmp;
  66785. +{
  66786. +    if (!gmt_is_set) {
  66787. +        gmt_is_set = TRUE;
  66788. +#ifdef ALL_STATE
  66789. +        gmtptr = (struct state *) malloc(sizeof *gmtptr);
  66790. +        if (gmtptr != NULL)
  66791. +#endif /* defined ALL_STATE */
  66792. +            gmtload(gmtptr);
  66793. +    }
  66794. +    timesub(timep, offset, gmtptr, tmp);
  66795. +    /*
  66796. +    ** Could get fancy here and deliver something such as
  66797. +    ** "GMT+xxxx" or "GMT-xxxx" if offset is non-zero,
  66798. +    ** but this is no time for a treasure hunt.
  66799. +    */
  66800. +    if (offset != 0)
  66801. +        tmp->tm_zone = WILDABBR;
  66802. +    else {
  66803. +#ifdef ALL_STATE
  66804. +        if (gmtptr == NULL)
  66805. +            tmp->TM_ZONE = GMT;
  66806. +        else    tmp->TM_ZONE = gmtptr->chars;
  66807. +#endif /* defined ALL_STATE */
  66808. +#ifndef ALL_STATE
  66809. +        tmp->tm_zone = gmtptr->chars;
  66810. +#endif /* State Farm */
  66811. +    }
  66812. +}
  66813. +
  66814. +struct tm *
  66815. +gmtime(timep)
  66816. +const time_t * const    timep;
  66817. +{
  66818. +    static struct tm    tm;
  66819. +
  66820. +    gmtsub(timep, 0L, &tm);
  66821. +    return &tm;
  66822. +}
  66823. +
  66824. +static void
  66825. +timesub(timep, offset, sp, tmp)
  66826. +const time_t * const            timep;
  66827. +const long                offset;
  66828. +register const struct state * const    sp;
  66829. +register struct tm * const        tmp;
  66830. +{
  66831. +    register const struct lsinfo *    lp;
  66832. +    register long            days;
  66833. +    register long            rem;
  66834. +    register int            y;
  66835. +    register int            yleap;
  66836. +    register const int *        ip;
  66837. +    register long            corr;
  66838. +    register int            hit;
  66839. +    register int            i;
  66840. +
  66841. +    corr = 0;
  66842. +    hit = FALSE;
  66843. +#ifdef ALL_STATE
  66844. +    i = (sp == NULL) ? 0 : sp->leapcnt;
  66845. +#endif /* defined ALL_STATE */
  66846. +#ifndef ALL_STATE
  66847. +    i = sp->leapcnt;
  66848. +#endif /* State Farm */
  66849. +    while (--i >= 0) {
  66850. +        lp = &sp->lsis[i];
  66851. +        if (*timep >= lp->ls_trans) {
  66852. +            if (*timep == lp->ls_trans)
  66853. +                hit = ((i == 0 && lp->ls_corr > 0) ||
  66854. +                    lp->ls_corr > sp->lsis[i - 1].ls_corr);
  66855. +            corr = lp->ls_corr;
  66856. +            break;
  66857. +        }
  66858. +    }
  66859. +    days = *timep / SECSPERDAY;
  66860. +    rem = *timep % SECSPERDAY;
  66861. +#ifdef mc68k
  66862. +    if (*timep == 0x80000000) {
  66863. +        /*
  66864. +        ** A 3B1 muffs the division on the most negative number.
  66865. +        */
  66866. +        days = -24855;
  66867. +        rem = -11648;
  66868. +    }
  66869. +#endif /* mc68k */
  66870. +    rem += (offset - corr);
  66871. +    while (rem < 0) {
  66872. +        rem += SECSPERDAY;
  66873. +        --days;
  66874. +    }
  66875. +    while (rem >= SECSPERDAY) {
  66876. +        rem -= SECSPERDAY;
  66877. +        ++days;
  66878. +    }
  66879. +    tmp->tm_hour = (int) (rem / SECSPERHOUR);
  66880. +    rem = rem % SECSPERHOUR;
  66881. +    tmp->tm_min = (int) (rem / SECSPERMIN);
  66882. +    tmp->tm_sec = (int) (rem % SECSPERMIN);
  66883. +    if (hit)
  66884. +        /*
  66885. +        ** A positive leap second requires a special
  66886. +        ** representation.  This uses "... ??:59:60".
  66887. +        */
  66888. +        ++(tmp->tm_sec);
  66889. +    tmp->tm_wday = (int) ((EPOCH_WDAY + days) % DAYSPERWEEK);
  66890. +    if (tmp->tm_wday < 0)
  66891. +        tmp->tm_wday += DAYSPERWEEK;
  66892. +    y = EPOCH_YEAR;
  66893. +    if (days >= 0)
  66894. +        for ( ; ; ) {
  66895. +            yleap = isleap(y);
  66896. +            if (days < (long) year_lengths[yleap])
  66897. +                break;
  66898. +            ++y;
  66899. +            days = days - (long) year_lengths[yleap];
  66900. +        }
  66901. +    else do {
  66902. +        --y;
  66903. +        yleap = isleap(y);
  66904. +        days = days + (long) year_lengths[yleap];
  66905. +    } while (days < 0);
  66906. +    tmp->tm_year = y - TM_YEAR_BASE;
  66907. +    tmp->tm_yday = (int) days;
  66908. +    ip = mon_lengths[yleap];
  66909. +    for (tmp->tm_mon = 0; days >= (long) ip[tmp->tm_mon]; ++(tmp->tm_mon))
  66910. +        days = days - (long) ip[tmp->tm_mon];
  66911. +    tmp->tm_mday = (int) (days + 1);
  66912. +    tmp->tm_isdst = 0;
  66913. +    tmp->tm_gmtoff = offset;
  66914. +}
  66915. +
  66916. +/*
  66917. +** A la X3J11
  66918. +*/
  66919. +
  66920. +char *
  66921. +asctime(timeptr)
  66922. +register const struct tm *    timeptr;
  66923. +{
  66924. +    static const char    wday_name[DAYSPERWEEK][3] = {
  66925. +        "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
  66926. +    };
  66927. +    static const char    mon_name[MONSPERYEAR][3] = {
  66928. +        "Jan", "Feb", "Mar", "Apr", "May", "Jun",
  66929. +        "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
  66930. +    };
  66931. +    static char    result[26];
  66932. +
  66933. +    (void) sprintf(result, "%.3s %.3s%3d %02.2d:%02.2d:%02.2d %d\n",
  66934. +        wday_name[timeptr->tm_wday],
  66935. +        mon_name[timeptr->tm_mon],
  66936. +        timeptr->tm_mday, timeptr->tm_hour,
  66937. +        timeptr->tm_min, timeptr->tm_sec,
  66938. +        TM_YEAR_BASE + timeptr->tm_year);
  66939. +    return result;
  66940. +}
  66941. +
  66942. +char *
  66943. +ctime(timep)
  66944. +const time_t * const    timep;
  66945. +{
  66946. +    return asctime(localtime(timep));
  66947. +}
  66948. +
  66949. +/*
  66950. +** Adapted from code provided by Robert Elz, who writes:
  66951. +**    The "best" way to do mktime I think is based on an idea of Bob
  66952. +**    Kridle's (so its said...) from a long time ago. (mtxinu!kridle now).
  66953. +**    It does a binary search of the time_t space.  Since time_t's are
  66954. +**    just 32 bits, its a max of 32 iterations (even at 64 bits it
  66955. +**    would still be very reasonable).
  66956. +*/
  66957. +
  66958. +#ifndef WRONG
  66959. +#define WRONG    (-1)
  66960. +#endif /* !defined WRONG */
  66961. +
  66962. +static void
  66963. +normalize(tensptr, unitsptr, base)
  66964. +int * const    tensptr;
  66965. +int * const    unitsptr;
  66966. +const int    base;
  66967. +{
  66968. +    if (*unitsptr >= base) {
  66969. +        *tensptr += *unitsptr / base;
  66970. +        *unitsptr %= base;
  66971. +    } else if (*unitsptr < 0) {
  66972. +        --*tensptr;
  66973. +        *unitsptr += base;
  66974. +        if (*unitsptr < 0) {
  66975. +            *tensptr -= 1 + (-*unitsptr) / base;
  66976. +            *unitsptr = base - (-*unitsptr) % base;
  66977. +        }
  66978. +    }
  66979. +}
  66980. +
  66981. +static int
  66982. +tmcomp(atmp, btmp)
  66983. +register const struct tm * const atmp;
  66984. +register const struct tm * const btmp;
  66985. +{
  66986. +    register int    result;
  66987. +
  66988. +    if ((result = (atmp->tm_year - btmp->tm_year)) == 0 &&
  66989. +        (result = (atmp->tm_mon - btmp->tm_mon)) == 0 &&
  66990. +        (result = (atmp->tm_mday - btmp->tm_mday)) == 0 &&
  66991. +        (result = (atmp->tm_hour - btmp->tm_hour)) == 0 &&
  66992. +        (result = (atmp->tm_min - btmp->tm_min)) == 0)
  66993. +            result = atmp->tm_sec - btmp->tm_sec;
  66994. +    return result;
  66995. +}
  66996. +
  66997. +static time_t
  66998. +time2(tmp, funcp, offset, okayp)
  66999. +struct tm * const    tmp;
  67000. +void (* const        funcp)();
  67001. +const long        offset;
  67002. +int * const        okayp;
  67003. +{
  67004. +    register const struct state *    sp;
  67005. +    register int            dir;
  67006. +    register int            bits;
  67007. +    register int            i, j ;
  67008. +    register int            saved_seconds;
  67009. +    time_t                newt;
  67010. +    time_t                t;
  67011. +    struct tm            yourtm, mytm;
  67012. +
  67013. +    *okayp = FALSE;
  67014. +    yourtm = *tmp;
  67015. +    if (yourtm.tm_sec >= SECSPERMIN + 2 || yourtm.tm_sec < 0)
  67016. +        normalize(&yourtm.tm_min, &yourtm.tm_sec, SECSPERMIN);
  67017. +    normalize(&yourtm.tm_hour, &yourtm.tm_min, MINSPERHOUR);
  67018. +    normalize(&yourtm.tm_mday, &yourtm.tm_hour, HOURSPERDAY);
  67019. +    normalize(&yourtm.tm_year, &yourtm.tm_mon, MONSPERYEAR);
  67020. +    while (yourtm.tm_mday <= 0) {
  67021. +        --yourtm.tm_year;
  67022. +        yourtm.tm_mday +=
  67023. +            year_lengths[isleap(yourtm.tm_year + TM_YEAR_BASE)];
  67024. +    }
  67025. +    for ( ; ; ) {
  67026. +        i = mon_lengths[isleap(yourtm.tm_year +
  67027. +            TM_YEAR_BASE)][yourtm.tm_mon];
  67028. +        if (yourtm.tm_mday <= i)
  67029. +            break;
  67030. +        yourtm.tm_mday -= i;
  67031. +        if (++yourtm.tm_mon >= MONSPERYEAR) {
  67032. +            yourtm.tm_mon = 0;
  67033. +            ++yourtm.tm_year;
  67034. +        }
  67035. +    }
  67036. +    saved_seconds = yourtm.tm_sec;
  67037. +    yourtm.tm_sec = 0;
  67038. +    /*
  67039. +    ** Calculate the number of magnitude bits in a time_t
  67040. +    ** (this works regardless of whether time_t is
  67041. +    ** signed or unsigned, though lint complains if unsigned).
  67042. +    */
  67043. +    for (bits = 0, t = 1; t > 0; ++bits, t <<= 1)
  67044. +        ;
  67045. +    /*
  67046. +    ** If time_t is signed, then 0 is the median value,
  67047. +    ** if time_t is unsigned, then 1 << bits is median.
  67048. +    */
  67049. +    t = (t < 0) ? 0 : ((time_t) 1 << bits);
  67050. +    for ( ; ; ) {
  67051. +        (*funcp)(&t, offset, &mytm);
  67052. +        dir = tmcomp(&mytm, &yourtm);
  67053. +        if (dir != 0) {
  67054. +            if (bits-- < 0)
  67055. +                return WRONG;
  67056. +            if (bits < 0)
  67057. +                --t;
  67058. +            else if (dir > 0)
  67059. +                t -= (time_t) 1 << bits;
  67060. +            else    t += (time_t) 1 << bits;
  67061. +            continue;
  67062. +        }
  67063. +        if (yourtm.tm_isdst < 0 || mytm.tm_isdst == yourtm.tm_isdst)
  67064. +            break;
  67065. +        /*
  67066. +        ** Right time, wrong type.
  67067. +        ** Hunt for right time, right type.
  67068. +        ** It's okay to guess wrong since the guess
  67069. +        ** gets checked.
  67070. +        */
  67071. +        sp = (const struct state *)
  67072. +            ((funcp == localsub) ? lclptr : gmtptr);
  67073. +#ifdef ALL_STATE
  67074. +        if (sp == NULL)
  67075. +            return WRONG;
  67076. +#endif /* defined ALL_STATE */
  67077. +        for (i = 0; i < sp->typecnt; ++i) {
  67078. +            if (sp->ttis[i].tt_isdst != yourtm.tm_isdst)
  67079. +                continue;
  67080. +            for (j = 0; j < sp->typecnt; ++j) {
  67081. +                if (sp->ttis[j].tt_isdst == yourtm.tm_isdst)
  67082. +                    continue;
  67083. +                newt = t + sp->ttis[j].tt_gmtoff -
  67084. +                    sp->ttis[i].tt_gmtoff;
  67085. +                (*funcp)(&newt, offset, &mytm);
  67086. +                if (tmcomp(&mytm, &yourtm) != 0)
  67087. +                    continue;
  67088. +                if (mytm.tm_isdst != yourtm.tm_isdst)
  67089. +                    continue;
  67090. +                /*
  67091. +                ** We have a match.
  67092. +                */
  67093. +                t = newt;
  67094. +                goto label;
  67095. +            }
  67096. +        }
  67097. +        return WRONG;
  67098. +    }
  67099. +label:
  67100. +    t += saved_seconds;
  67101. +    (*funcp)(&t, offset, tmp);
  67102. +    *okayp = TRUE;
  67103. +    return t;
  67104. +}
  67105. +
  67106. +static time_t
  67107. +time1(tmp, funcp, offset)
  67108. +struct tm * const    tmp;
  67109. +void (* const        funcp)();
  67110. +const long        offset;
  67111. +{
  67112. +    register time_t            t;
  67113. +    register const struct state *    sp;
  67114. +    register int            samei, otheri;
  67115. +    int                okay;
  67116. +
  67117. +    if (tmp->tm_isdst > 1)
  67118. +        tmp->tm_isdst = 1;
  67119. +    t = time2(tmp, funcp, offset, &okay);
  67120. +    if (okay || tmp->tm_isdst < 0)
  67121. +        return t;
  67122. +    /*
  67123. +    ** We're supposed to assume that somebody took a time of one type
  67124. +    ** and did some math on it that yielded a "struct tm" that's bad.
  67125. +    ** We try to divine the type they started from and adjust to the
  67126. +    ** type they need.
  67127. +    */
  67128. +    sp = (const struct state *) ((funcp == localsub) ? lclptr : gmtptr);
  67129. +#ifdef ALL_STATE
  67130. +    if (sp == NULL)
  67131. +        return WRONG;
  67132. +#endif /* defined ALL_STATE */
  67133. +    for (samei = 0; samei < sp->typecnt; ++samei) {
  67134. +        if (sp->ttis[samei].tt_isdst != tmp->tm_isdst)
  67135. +            continue;
  67136. +        for (otheri = 0; otheri < sp->typecnt; ++otheri) {
  67137. +            if (sp->ttis[otheri].tt_isdst == tmp->tm_isdst)
  67138. +                continue;
  67139. +            tmp->tm_sec += sp->ttis[otheri].tt_gmtoff -
  67140. +                    sp->ttis[samei].tt_gmtoff;
  67141. +            tmp->tm_isdst = !tmp->tm_isdst;
  67142. +            t = time2(tmp, funcp, offset, &okay);
  67143. +            if (okay)
  67144. +                return t;
  67145. +            tmp->tm_sec -= sp->ttis[otheri].tt_gmtoff -
  67146. +                    sp->ttis[samei].tt_gmtoff;
  67147. +            tmp->tm_isdst = !tmp->tm_isdst;
  67148. +        }
  67149. +    }
  67150. +    return WRONG;
  67151. +}
  67152. +
  67153. +time_t
  67154. +mktime(tmp)
  67155. +struct tm * const    tmp;
  67156. +{
  67157. +    return time1(tmp, localsub, 0L);
  67158. +}
  67159. +
  67160. +/* Call tzset() if necessary */
  67161. +void _tzset(void)
  67162. +{
  67163. +  if (!lcl_is_set) tzset();
  67164. +}
  67165. +
  67166. diff -ru --new-file baseline/fsf/emacs/unixlib/src/devices.c amiga/fsf/emacs/unixlib/src/devices.c
  67167. --- baseline/fsf/emacs/unixlib/src/devices.c    Wed Dec 31 17:00:00 1969
  67168. +++ amiga/fsf/emacs/unixlib/src/devices.c    Sun Oct 15 17:16:25 1995
  67169. @@ -0,0 +1,33 @@
  67170. +#include "amiga.h"
  67171. +#include "devices.h"
  67172. +
  67173. +struct IORequest *_device_open(char *name, ULONG unit, ULONG flags,
  67174. +                   APTR data, ULONG data_len, int req_size)
  67175. +{
  67176. +    struct MsgPort *port;
  67177. +    struct IORequest *ioreq;
  67178. +
  67179. +    if ((port = CreateMsgPort()) && (ioreq = CreateIORequest(port, req_size)))
  67180. +    {
  67181. +    if (data)
  67182. +    {
  67183. +        struct IOStdReq *io2 = (struct IOStdReq *)ioreq;
  67184. +        io2->io_Data = data;
  67185. +        io2->io_Length = data_len;
  67186. +    }
  67187. +    if (OpenDevice(name, unit, ioreq, flags) == 0) return ioreq;
  67188. +    }
  67189. +    if (ioreq) DeleteIORequest(ioreq);
  67190. +    if (port) DeletePort(port);
  67191. +    return 0;
  67192. +}
  67193. +
  67194. +void _device_close(struct IORequest *ioreq)
  67195. +{
  67196. +    if (ioreq)
  67197. +    {
  67198. +    CloseDevice(ioreq);
  67199. +    DeletePort(ioreq->io_Message.mn_ReplyPort);
  67200. +    DeleteIORequest(ioreq);
  67201. +    }
  67202. +}
  67203. diff -ru --new-file baseline/fsf/emacs/unixlib/src/dir.c amiga/fsf/emacs/unixlib/src/dir.c
  67204. --- baseline/fsf/emacs/unixlib/src/dir.c    Wed Dec 31 17:00:00 1969
  67205. +++ amiga/fsf/emacs/unixlib/src/dir.c    Sun Oct 15 17:16:27 1995
  67206. @@ -0,0 +1,177 @@
  67207. +#include "amiga.h"
  67208. +#include "dir_data.h"
  67209. +#include <string.h>
  67210. +
  67211. +/* opendir/readdir/etc ... emulation w/ stat support hack */
  67212. +
  67213. +static void free_entries(iDIR *info)
  67214. +{
  67215. +  struct idirent *scan = info->files;
  67216. +  
  67217. +  while (scan)
  67218. +    {
  67219. +      struct idirent *next = scan->next;
  67220. +      
  67221. +      free(scan);
  67222. +      scan = next;
  67223. +    }
  67224. +}
  67225. +
  67226. +static int gobble_dir(DIR *dir)
  67227. +{
  67228. +  iDIR *info = (iDIR *)dir->dd_buf;
  67229. +  long ioerr;
  67230. +  struct idirent **last = &info->files;
  67231. +  struct FileLock *dirlock;
  67232. +  
  67233. +  free_entries(info);
  67234. +  last_dir = 0;
  67235. +  info->files = 0;
  67236. +  dir->dd_loc = 0;
  67237. +  /* Find a value for st_dev of stat() calls */
  67238. +  dirlock = BADDR(dir->dd_fd);
  67239. +  info->task = dirlock->fl_Task;
  67240. +  while (ExNext(dir->dd_fd, &info->fib))
  67241. +    {
  67242. +      u_short namlen = strlen(info->fib.fib_FileName);
  67243. +      u_short reclen = namlen + 1 + offsetof(struct idirent, entry.d_name);
  67244. +      struct idirent *newentry = (struct idirent *)malloc(reclen);
  67245. +      struct dirent *entry;
  67246. +      
  67247. +      if (!newentry)
  67248. +    {
  67249. +      errno = ENOMEM;
  67250. +      return 0;
  67251. +    }
  67252. +      newentry->next = 0;
  67253. +      *last = newentry;
  67254. +      last = &newentry->next;
  67255. +      
  67256. +      newentry->numblocks = info->fib.fib_NumBlocks;
  67257. +      newentry->size = info->fib.fib_Size;
  67258. +      newentry->date = info->fib.fib_Date;
  67259. +      newentry->type = info->fib.fib_DirEntryType;
  67260. +      newentry->protection = info->fib.fib_Protection;
  67261. +      
  67262. +      entry = &newentry->entry;
  67263. +      entry->d_reclen = reclen;
  67264. +      entry->d_namlen = namlen;
  67265. +      entry->d_off = dir->dd_loc++;
  67266. +      strcpy(entry->d_name, info->fib.fib_FileName);
  67267. +      entry->d_ino = info->fib.fib_DiskKey;
  67268. +    }
  67269. +  info->pos = info->files;
  67270. +  dir->dd_loc = 0;
  67271. +  ioerr = IoErr();
  67272. +  if (ioerr == ERROR_NO_MORE_ENTRIES) return 1;
  67273. +  
  67274. +  errno = convert_oserr(ioerr);
  67275. +  return 0;
  67276. +}
  67277. +
  67278. +DIR *opendir(char *dirname)
  67279. +{
  67280. +  DIR *new = (DIR *)malloc(sizeof *new);
  67281. +  iDIR *info = (iDIR *)malloc(sizeof *info);
  67282. +  char *dircopy = malloc(strlen(dirname) + 1);
  67283. +
  67284. +  chkabort();
  67285. +  if (new && dircopy && info)
  67286. +    {
  67287. +      new->dd_buf = (char *)info;
  67288. +      new->dd_size = sizeof *info;
  67289. +      
  67290. +      info->files = info->pos = 0;
  67291. +      info->seeked = 0;
  67292. +      info->dirname = dircopy;
  67293. +      strcpy(dircopy, dirname);
  67294. +      info->cdir = _get_cd();
  67295. +      
  67296. +      if ((new->dd_fd = Lock(dirname, ACCESS_READ)) &&
  67297. +      Examine(new->dd_fd, &info->fib))
  67298. +    {
  67299. +      if (gobble_dir(new)) return new;
  67300. +    }
  67301. +      else errno = convert_oserr(IoErr());
  67302. +      closedir(new);
  67303. +      return 0;
  67304. +    }
  67305. +  
  67306. +  errno = ENOMEM;
  67307. +  if (new) free(new);
  67308. +  if (dircopy) free(dircopy);
  67309. +  if (info) free(info);
  67310. +  
  67311. +  return 0;
  67312. +}
  67313. +
  67314. +void closedir(DIR *dir)
  67315. +{
  67316. +  iDIR *info = (iDIR *)dir->dd_buf;
  67317. +  
  67318. +  chkabort();
  67319. +  last_dir = 0;
  67320. +  free_entries(info);
  67321. +  free(info->dirname);
  67322. +  if (dir->dd_fd) UnLock(dir->dd_fd);
  67323. +  free(dir->dd_buf);
  67324. +  free(dir);
  67325. +}
  67326. +
  67327. +struct dirent *readdir(DIR *dir)
  67328. +{
  67329. +  iDIR *info = (iDIR *)dir->dd_buf;
  67330. +  struct dirent *entry = 0;
  67331. +  
  67332. +  chkabort();
  67333. +  if (info->seeked)
  67334. +    {
  67335. +      long cloc = 0;
  67336. +      struct idirent *pos;
  67337. +      
  67338. +      pos = info->files;
  67339. +      
  67340. +      while (cloc < dir->dd_loc && pos)
  67341. +    {
  67342. +      cloc++; pos = pos->next;
  67343. +    }
  67344. +      /*if (cloc != dir->dd_loc) error ...
  67345. +    This doesn't seem to be defined very precisely */
  67346. +      info->pos = pos;
  67347. +      info->seeked = 0;
  67348. +    }
  67349. +  if (info->pos)
  67350. +    {
  67351. +      entry = &info->pos->entry;
  67352. +      
  67353. +      last_dir = dir;
  67354. +      last_entry = info->pos;
  67355. +      
  67356. +      info->pos = info->pos->next;
  67357. +      dir->dd_loc++;
  67358. +    }
  67359. +  return entry;
  67360. +}
  67361. +
  67362. +long telldir(DIR *dir)
  67363. +{
  67364. +  chkabort();
  67365. +  return dir->dd_loc;
  67366. +}
  67367. +
  67368. +void seekdir(DIR *dir, long loc)
  67369. +{
  67370. +  iDIR *info = (iDIR *)dir->dd_buf;
  67371. +  
  67372. +  chkabort();
  67373. +  info->seeked = 1;
  67374. +  dir->dd_loc = loc;
  67375. +}
  67376. +
  67377. +#if 0
  67378. +void rewwinddir(DIR *dir)
  67379. +{
  67380. +  chkabort();
  67381. +  gobble_dir(dir);
  67382. +}
  67383. +#endif
  67384. diff -ru --new-file baseline/fsf/emacs/unixlib/src/dir_data.c amiga/fsf/emacs/unixlib/src/dir_data.c
  67385. --- baseline/fsf/emacs/unixlib/src/dir_data.c    Wed Dec 31 17:00:00 1969
  67386. +++ amiga/fsf/emacs/unixlib/src/dir_data.c    Sun Oct 15 17:16:30 1995
  67387. @@ -0,0 +1,15 @@
  67388. +#include "amiga.h"
  67389. +#include "dir_data.h"
  67390. +
  67391. +DIR *last_dir;
  67392. +struct idirent *last_entry;
  67393. +
  67394. +BPTR _get_cd(void)
  67395. +{
  67396. +  BPTR dir = CurrentDir(0);
  67397. +  
  67398. +  CurrentDir(dir);
  67399. +  
  67400. +  return dir;
  67401. +}
  67402. +
  67403. diff -ru --new-file baseline/fsf/emacs/unixlib/src/dir_data.h amiga/fsf/emacs/unixlib/src/dir_data.h
  67404. --- baseline/fsf/emacs/unixlib/src/dir_data.h    Wed Dec 31 17:00:00 1969
  67405. +++ amiga/fsf/emacs/unixlib/src/dir_data.h    Sun Oct 15 17:16:32 1995
  67406. @@ -0,0 +1,33 @@
  67407. +#ifndef DIR_DATA_H
  67408. +#define DIR_DATA_H
  67409. +
  67410. +#include <sys/dir.h>
  67411. +
  67412. +typedef struct
  67413. +{
  67414. +  char *dirname;
  67415. +  BPTR cdir;
  67416. +  struct FileInfoBlock fib;
  67417. +  struct idirent *files, *pos;
  67418. +  int seeked;
  67419. +  struct MsgPort *task;        /* Used to fake a value for st_dev */
  67420. +} iDIR;
  67421. +
  67422. +struct idirent
  67423. +{
  67424. +  struct idirent *next;
  67425. +  /* Info needed for stat */
  67426. +  long numblocks;
  67427. +  long size;
  67428. +  struct DateStamp date;
  67429. +  long type;
  67430. +  long protection;
  67431. +  struct dirent entry;
  67432. +};
  67433. +
  67434. +extern DIR *last_dir;
  67435. +extern struct idirent *last_entry;
  67436. +
  67437. +BPTR _get_cd(void);
  67438. +
  67439. +#endif
  67440. diff -ru --new-file baseline/fsf/emacs/unixlib/src/error.c amiga/fsf/emacs/unixlib/src/error.c
  67441. --- baseline/fsf/emacs/unixlib/src/error.c    Wed Dec 31 17:00:00 1969
  67442. +++ amiga/fsf/emacs/unixlib/src/error.c    Sun Oct 15 17:16:33 1995
  67443. @@ -0,0 +1,47 @@
  67444. +#include "amiga.h"
  67445. +
  67446. +int errno;
  67447. +
  67448. +int convert_oserr(int ioerr)
  67449. +{
  67450. +  extern int _OSERR;
  67451. +
  67452. +  _OSERR = ioerr;
  67453. +  switch (ioerr)
  67454. +    {
  67455. +    case 0: return 0;
  67456. +    case ERROR_NO_FREE_STORE: return ENOMEM;
  67457. +    case ERROR_TASK_TABLE_FULL: return EAGAIN;
  67458. +    case ERROR_BAD_TEMPLATE: case ERROR_REQUIRED_ARG_MISSING: case ERROR_BAD_NUMBER:
  67459. +    case ERROR_KEY_NEEDS_ARG: case ERROR_TOO_MANY_ARGS:
  67460. +    case ERROR_UNMATCHED_QUOTES: return EINVAL;
  67461. +    case ERROR_LINE_TOO_LONG: return E2BIG;
  67462. +    case ERROR_FILE_NOT_OBJECT: return ENOEXEC;
  67463. +    case ERROR_OBJECT_IN_USE: return EBUSY;
  67464. +    case ERROR_OBJECT_EXISTS: return EEXIST;
  67465. +    case ERROR_DIR_NOT_FOUND: return ENOENT;
  67466. +    case ERROR_OBJECT_NOT_FOUND: return ENOENT;
  67467. +    case ERROR_BAD_STREAM_NAME: return EINVAL;
  67468. +    case ERROR_OBJECT_TOO_LARGE: return E2BIG;
  67469. +    case ERROR_ACTION_NOT_KNOWN: return EINVAL;
  67470. +    case ERROR_INVALID_COMPONENT_NAME: return ENAMETOOLONG;
  67471. +    case ERROR_INVALID_LOCK: return EINVAL;
  67472. +    case ERROR_OBJECT_WRONG_TYPE: return EINVAL;
  67473. +    case ERROR_DISK_WRITE_PROTECTED: return EROFS;
  67474. +    case ERROR_RENAME_ACROSS_DEVICES: return EXDEV;
  67475. +    case ERROR_DIRECTORY_NOT_EMPTY: return ENOTEMPTY;
  67476. +    case ERROR_TOO_MANY_LEVELS: return ELOOP;
  67477. +    case ERROR_DEVICE_NOT_MOUNTED: return ENODEV;
  67478. +    case ERROR_SEEK_ERROR: return EINVAL;
  67479. +    case ERROR_DISK_FULL: return ENOSPC;
  67480. +    case ERROR_DELETE_PROTECTED: return EACCES;
  67481. +    case ERROR_WRITE_PROTECTED: return EACCES;
  67482. +    case ERROR_READ_PROTECTED: return EACCES;
  67483. +    default: return EOSERR;
  67484. +    }
  67485. +}
  67486. +
  67487. +void _seterr(void)
  67488. +{
  67489. +    errno = convert_oserr(IoErr());
  67490. +}
  67491. diff -ru --new-file baseline/fsf/emacs/unixlib/src/error_msg.c amiga/fsf/emacs/unixlib/src/error_msg.c
  67492. --- baseline/fsf/emacs/unixlib/src/error_msg.c    Wed Dec 31 17:00:00 1969
  67493. +++ amiga/fsf/emacs/unixlib/src/error_msg.c    Sun Oct 15 17:16:35 1995
  67494. @@ -0,0 +1,48 @@
  67495. +#include "amiga.h"
  67496. +
  67497. +/* Gross hack because EOSERR is -1. */
  67498. +static char *sys_amiga_error = "amiga specific error";
  67499. +char *sys_errlist[] =
  67500. +  {
  67501. +    "Unknown error",
  67502. +    "not owner",
  67503. +    "no such file or directory",
  67504. +    "no such process",
  67505. +    "interrupted system call",
  67506. +    "i/o error",
  67507. +    "no such device or address",
  67508. +    "argument list too long",
  67509. +    "exec format error",
  67510. +    "bad file number",
  67511. +    "no child process",
  67512. +    "no more processes",
  67513. +    "not enough memory",
  67514. +    "permission denied",
  67515. +    "bad address",
  67516. +    "block device required",
  67517. +    "mount devices busy",
  67518. +    "file exists",
  67519. +    "cross-device link",
  67520. +    "no such device",
  67521. +    "not a directory",
  67522. +    "is a directory",
  67523. +    "invalid argument",
  67524. +    "file table overflow",
  67525. +    "too many open files",
  67526. +    "not a typewriter",
  67527. +    "text file busy",
  67528. +    "file too big",
  67529. +    "no space left on device",
  67530. +    "illegal seek",
  67531. +    "read-only file system",
  67532. +    "too many links",
  67533. +    "broken pipe",
  67534. +    "math argument",
  67535. +    "result too large",
  67536. +    "I/O stream empty",
  67537. +    "file name too long",
  67538. +    "directory not empty",
  67539. +    "too many soft links (loop?)"
  67540. +};
  67541. +
  67542. +int sys_nerr = ELOOP;
  67543. diff -ru --new-file baseline/fsf/emacs/unixlib/src/exec.c amiga/fsf/emacs/unixlib/src/exec.c
  67544. --- baseline/fsf/emacs/unixlib/src/exec.c    Wed Dec 31 17:00:00 1969
  67545. +++ amiga/fsf/emacs/unixlib/src/exec.c    Sun Oct 15 17:16:37 1995
  67546. @@ -0,0 +1,143 @@
  67547. +#include "amiga.h"
  67548. +#include "processes.h"
  67549. +#include <amiga/ioctl.h>
  67550. +#include <exec/memory.h>
  67551. +#include <dos/dosextens.h>
  67552. +#include <dos/dostags.h>
  67553. +#include <string.h>
  67554. +
  67555. +int eexec(char *program, char **argv, int input, int output, int error,
  67556. +      char *dir, int stacksize)
  67557. +/* input = -1 -> inherit Input()
  67558. +   output = -1 -> inherit Output()
  67559. +   error = -1 -> inherit pr_CES
  67560. +   error = -2 -> stderr = stdout */
  67561. +{
  67562. +  int index, comsize, close_input, close_output, close_error;
  67563. +  char *combuf, *bp;
  67564. +  BPTR in, out, err, dirlock;
  67565. +  int _pseudo_close(int fd);
  67566. +
  67567. +  comsize = 256;
  67568. +  combuf = malloc(comsize);
  67569. +
  67570. +  if (input == -1)
  67571. +    {
  67572. +      in = Input();
  67573. +      close_input = FALSE;
  67574. +    }
  67575. +  else
  67576. +    {
  67577. +      if (ioctl(input, _AMIGA_GET_FH, &in) == -1) in = 0;
  67578. +      close_input = TRUE;
  67579. +      _pseudo_close(input);
  67580. +    }
  67581. +
  67582. +  if (output == -1)
  67583. +    {
  67584. +      out = Output();
  67585. +      close_output = FALSE;
  67586. +    }
  67587. +  else if (input == output)
  67588. +    {
  67589. +      out = in;
  67590. +      close_output = FALSE;
  67591. +    }
  67592. +  else
  67593. +    {
  67594. +      if (ioctl(output, _AMIGA_GET_FH, &out) == -1) out = 0;
  67595. +      close_output = out != in;
  67596. +      _pseudo_close(output);
  67597. +    }
  67598. +
  67599. +  if (error == -1)
  67600. +    {
  67601. +      err = _us->pr_CES;
  67602. +      close_error = FALSE;
  67603. +    }
  67604. +  else if (error == -2)
  67605. +    {
  67606. +      err = out;
  67607. +      close_error = FALSE;
  67608. +    }
  67609. +  else
  67610. +    {
  67611. +      if (ioctl(error, _AMIGA_GET_FH, &err) == -1) err = 0;
  67612. +      close_error = err != out && err != in;
  67613. +      _pseudo_close(error);
  67614. +    }
  67615. +
  67616. +  /* pr_CES is not always defined */
  67617. +  if (in && out && (err || error == -1))
  67618. +    if (combuf)
  67619. +      {
  67620. +    bp = combuf;
  67621. +    for (index = 0; argv[index] != 0; index++)
  67622. +      {
  67623. +        /* Use program as argv[0]. This loses some information, but ... */
  67624. +        char *arg = index == 0 ? program : argv[index];
  67625. +        char *s;
  67626. +        int len;
  67627. +
  67628. +        len = 3;
  67629. +        s = arg;
  67630. +        while (*s)
  67631. +          {
  67632. +        len++;
  67633. +        if (*s == '*' || *s == '"' || *s == '\n') len++;
  67634. +        s++;
  67635. +          }
  67636. +        if (bp + len + 1 >= combuf + comsize)
  67637. +          {
  67638. +        char *newbuf;
  67639. +
  67640. +        comsize += comsize + len;
  67641. +        newbuf = realloc(combuf, comsize);
  67642. +        if (!newbuf) { errno = ENOMEM; goto error; }
  67643. +        bp = newbuf + (bp - combuf);
  67644. +        combuf = newbuf;
  67645. +          }
  67646. +        *bp++ = ' ';
  67647. +        *bp++ = '"';
  67648. +        s = arg;
  67649. +        while (*s)
  67650. +          {
  67651. +        if (*s == '"' || *s == '*') *bp++ = '*';
  67652. +        else if (*s == '\n') *bp++ = '+';
  67653. +        *bp++ = *s++;
  67654. +          }
  67655. +        *bp++ = '"';
  67656. +      }
  67657. +    *bp = '\0';
  67658. +    if (dir) dirlock = Lock(dir, SHARED_LOCK);
  67659. +    else dirlock = 0;
  67660. +
  67661. +    if (dirlock || !dir)
  67662. +      {
  67663. +        int pid = _start_process(combuf, in, close_input, out, close_output,
  67664. +                     err, close_error, dirlock, stacksize);
  67665. +
  67666. +        if (pid != -1)
  67667. +          {
  67668. +        free(combuf);
  67669. +        return pid;
  67670. +          }
  67671. +      }
  67672. +    else errno = convert_oserr(IoErr());
  67673. +    if (dirlock) UnLock(dirlock);
  67674. +      }
  67675. +    else errno = ENOMEM;
  67676. +
  67677. + error:
  67678. +  if (in && close_input) Close(in);
  67679. +  if (out && close_output) Close(out);
  67680. +  if (err && close_error) Close(err);
  67681. +  if (combuf) free(combuf);
  67682. +  return -1;
  67683. +}
  67684. +
  67685. +int exec(char *program, char **argv, int input, int output, 
  67686. +      char *dir, int stacksize)
  67687. +{
  67688. +  return eexec(program, argv, input, output, -1, dir, stacksize);
  67689. +}
  67690. diff -ru --new-file baseline/fsf/emacs/unixlib/src/fchmod.c amiga/fsf/emacs/unixlib/src/fchmod.c
  67691. --- baseline/fsf/emacs/unixlib/src/fchmod.c    Wed Dec 31 17:00:00 1969
  67692. +++ amiga/fsf/emacs/unixlib/src/fchmod.c    Sun Oct 15 17:16:38 1995
  67693. @@ -0,0 +1,10 @@
  67694. +#include "amiga.h"
  67695. +#include <amiga/ioctl.h>
  67696. +
  67697. +int fchmod(int fd, int mode)
  67698. +{
  67699. +  long amode = _make_protection(mode);
  67700. +
  67701. +  chkabort();
  67702. +  return ioctl(fd, _AMIGA_SETPROTECTION, &amode);
  67703. +}
  67704. diff -ru --new-file baseline/fsf/emacs/unixlib/src/fcntl.c amiga/fsf/emacs/unixlib/src/fcntl.c
  67705. --- baseline/fsf/emacs/unixlib/src/fcntl.c    Wed Dec 31 17:00:00 1969
  67706. +++ amiga/fsf/emacs/unixlib/src/fcntl.c    Sun Oct 15 17:16:40 1995
  67707. @@ -0,0 +1,43 @@
  67708. +#include "amiga.h"
  67709. +#include "files.h"
  67710. +#include <fcntl.h>
  67711. +#include <sys/filio.h>
  67712. +#include <stdarg.h>
  67713. +
  67714. +/* Flags that can be changed with fcntl */
  67715. +#define FCNTL_FLAGS (O_NDELAY | O_APPEND)
  67716. +
  67717. +int fcntl(int fd, int cmd, ...)
  67718. +{
  67719. +  struct fileinfo *fi;
  67720. +  va_list args;
  67721. +  int arg;
  67722. +
  67723. +  chkabort();
  67724. +  va_start(args, cmd);
  67725. +  arg = va_arg(args, int);
  67726. +  va_end(args);
  67727. +
  67728. +  if (fi = _find_fd(fd))
  67729. +    {
  67730. +      switch (cmd)
  67731. +    {
  67732. +    default: errno = EINVAL; break;
  67733. +    case F_GETFL: return fi->flags & FCNTL_FLAGS;
  67734. +    case F_SETFL:
  67735. +      {
  67736. +        int oldfl = fi->flags;
  67737. +
  67738. +        fi->flags = (fi->flags & ~FCNTL_FLAGS) | (arg & FCNTL_FLAGS);
  67739. +        if ((oldfl & O_NDELAY) != (fi->flags & O_NDELAY))
  67740. +          {
  67741. +        int ndelay = fi->flags & O_NDELAY;
  67742. +
  67743. +        return fi->ioctl(fi->userinfo, FIONBIO, &ndelay);
  67744. +          }
  67745. +        return 0;
  67746. +      }
  67747. +    }
  67748. +    }
  67749. +  return -1;
  67750. +}
  67751. diff -ru --new-file baseline/fsf/emacs/unixlib/src/fibstat.c amiga/fsf/emacs/unixlib/src/fibstat.c
  67752. --- baseline/fsf/emacs/unixlib/src/fibstat.c    Wed Dec 31 17:00:00 1969
  67753. +++ amiga/fsf/emacs/unixlib/src/fibstat.c    Sun Oct 15 17:16:41 1995
  67754. @@ -0,0 +1,90 @@
  67755. +#include "amiga.h"
  67756. +#include "fibstat.h"
  67757. +#include "timeconvert.h"
  67758. +#include <fcntl.h>
  67759. +#include <time.h>
  67760. +#include <sys/stat.h>
  67761. +#include <utility/tagitem.h>
  67762. +
  67763. +char _temp_fname[FNAMESIZE];
  67764. +
  67765. +void _lfibstat(char *name, struct FileInfoBlock *fib, struct MsgPort *task,
  67766. +           int isroot, struct stat *sbuf)
  67767. +{
  67768. +  long protection = fib->fib_Protection;
  67769. +  
  67770. +  sbuf->st_dev = (long)task;
  67771. +  sbuf->st_rdev = 0;
  67772. +  sbuf->st_uid = AMIGA_UID; sbuf->st_gid = AMIGA_GID;
  67773. +  sbuf->st_blksize = 512;
  67774. +#ifdef PRETEND_LINKED
  67775. +  /* This forces programs (tar) to consider potential hard links */
  67776. +  sbuf->st_nlink = 2;
  67777. +#else
  67778. +  sbuf->st_nlink = 1;
  67779. +#endif
  67780. +  sbuf->st_blocks = fib->fib_NumBlocks;
  67781. +  /* Give directories an arbitrary size */
  67782. +  if (fib->fib_Size == 0 && fib->fib_DirEntryType > 0) sbuf->st_size = 2048;
  67783. +  else sbuf->st_size = fib->fib_Size;
  67784. +  sbuf->st_ino = fib->fib_DiskKey;
  67785. +  sbuf->st_ctime = sbuf->st_atime = sbuf->st_mtime = _amiga2gmt(&fib->fib_Date);
  67786. +  
  67787. +  switch (fib->fib_DirEntryType)
  67788. +    {
  67789. +    case ST_SOFTLINK:
  67790. +      {
  67791. +    int len;
  67792. +
  67793. +    if (name && (len = readlink(name, _temp_fname, FNAMESIZE - 1)) > 0)
  67794. +      sbuf->st_size = len;
  67795. +    else sbuf->st_size = 256; /* A random safish value */
  67796. +    sbuf->st_mode = S_IFLNK;
  67797. +    break;
  67798. +      }
  67799. +    case ST_PIPEFILE: sbuf->st_mode = S_IFIFO; break;
  67800. +      /* If Examine wasn't braindead this would be the right test */
  67801. +    case ST_ROOT: sbuf->st_mode = S_IFDIR; protection = 0; break;
  67802. +    case ST_FILE: /* Try & detect special files (eg windows) */
  67803. +      if (fib->fib_DiskKey == 0 && !fib->fib_FileName[0])
  67804. +    sbuf->st_mode = S_IFCHR;
  67805. +      else sbuf->st_mode = S_IFREG;
  67806. +      break;
  67807. +    default: sbuf->st_mode = fib->fib_DirEntryType > 0 ? S_IFDIR : S_IFREG; break;
  67808. +    }
  67809. +  /* Examine is braindead. You can't tell if you've examined a root directory
  67810. +     (for which the protection flags are invalid) or not. */
  67811. +  if (isroot) protection = 0;
  67812. +
  67813. +  sbuf->st_mode |= _make_mode(protection);
  67814. +}
  67815. +
  67816. +int _fibstat(char *name, struct stat *sbuf)
  67817. +{
  67818. +  int ret;
  67819. +  struct FileInfoBlock *fib;
  67820. +  BPTR lock = 0;
  67821. +
  67822. +  if ((fib = AllocDosObjectTags(DOS_FIB, TAG_END)) &&
  67823. +      (lock = Lock(name, ACCESS_READ)) &&
  67824. +      Examine(lock, fib))
  67825. +    {
  67826. +      BPTR parent = ParentDir(lock);
  67827. +      int isroot = !parent;
  67828. +      struct FileLock *flock = BADDR(lock);
  67829. +      
  67830. +      if (parent) UnLock(parent);
  67831. +      _lfibstat(name, fib, flock->fl_Task, isroot, sbuf);
  67832. +      ret = 0;
  67833. +    }
  67834. +  else
  67835. +    {
  67836. +      ret = -1;
  67837. +      errno = convert_oserr(IoErr());
  67838. +    }
  67839. +  if (lock) UnLock(lock);
  67840. +  if (fib) FreeDosObject(DOS_FIB, fib);
  67841. +  return ret;
  67842. +}
  67843. +
  67844. +      
  67845. diff -ru --new-file baseline/fsf/emacs/unixlib/src/fibstat.h amiga/fsf/emacs/unixlib/src/fibstat.h
  67846. --- baseline/fsf/emacs/unixlib/src/fibstat.h    Wed Dec 31 17:00:00 1969
  67847. +++ amiga/fsf/emacs/unixlib/src/fibstat.h    Sun Oct 15 17:16:43 1995
  67848. @@ -0,0 +1,12 @@
  67849. +#ifndef FIBSTAT_H
  67850. +
  67851. +#define FNAMESIZE 256
  67852. +
  67853. +extern char _temp_fname[FNAMESIZE];
  67854. +
  67855. +void _lfibstat(char *name, struct FileInfoBlock *fib, struct MsgPort *task,
  67856. +           int isroot, struct stat *sbuf);
  67857. +
  67858. +int _fibstat(char *name, struct stat *sbuf);
  67859. +
  67860. +#endif
  67861. diff -ru --new-file baseline/fsf/emacs/unixlib/src/fifo.h amiga/fsf/emacs/unixlib/src/fifo.h
  67862. --- baseline/fsf/emacs/unixlib/src/fifo.h    Wed Dec 31 17:00:00 1969
  67863. +++ amiga/fsf/emacs/unixlib/src/fifo.h    Sun Oct 15 17:16:45 1995
  67864. @@ -0,0 +1,41 @@
  67865. +
  67866. +/*
  67867. + *  FIFO.H
  67868. + *
  67869. + *  PUBLIC FIFO STRUCTURES AND DEFINES
  67870. + */
  67871. +
  67872. +#ifndef LIBRARIES_FIFO_H
  67873. +#define LIBRARIES_FIFO_H
  67874. +
  67875. +#define FIFONAME    "fifo.library"
  67876. +
  67877. +#define FIFOF_READ      0x00000100L      /*  intend to read from fifo      */
  67878. +#define FIFOF_WRITE      0x00000200L      /*  intend to write to fifo      */
  67879. +#define FIFOF_RESERVED      0xFFFF0000L      /*  reserved for internal use   */
  67880. +#define FIFOF_NORMAL      0x00000400L      /*  request blocking/sig support*/
  67881. +#define FIFOF_NBIO      0x00000800L      /*  non-blocking IO          */
  67882. +
  67883. +#define FIFOF_KEEPIFD      0x00002000L      /*  keep fifo alive if data pending */
  67884. +#define FIFOF_EOF      0x00004000L      /*  EOF on close              */
  67885. +#define FIFOF_RREQUIRED   0x00008000L      /*  reader required to exist      */
  67886. +
  67887. +#define FREQ_RPEND    1
  67888. +#define FREQ_WAVAIL    2
  67889. +#define FREQ_ABORT    3
  67890. +
  67891. +typedef void *FifoHan;              /*  returned by OpenFifo()  */
  67892. +
  67893. +#ifndef IN_LIBRARY
  67894. +
  67895. +FifoHan OpenFifo(char *, long, long);
  67896. +void CloseFifo(FifoHan, long);
  67897. +long ReadFifo(FifoHan, char **, long);
  67898. +long WriteFifo(FifoHan, char *, long);
  67899. +void RequestFifo(FifoHan, struct Message *, long);
  67900. +long BufSizeFifo(FifoHan);
  67901. +
  67902. +#endif
  67903. +
  67904. +#endif
  67905. +
  67906. diff -ru --new-file baseline/fsf/emacs/unixlib/src/fifo_pragmas.h amiga/fsf/emacs/unixlib/src/fifo_pragmas.h
  67907. --- baseline/fsf/emacs/unixlib/src/fifo_pragmas.h    Wed Dec 31 17:00:00 1969
  67908. +++ amiga/fsf/emacs/unixlib/src/fifo_pragmas.h    Sun Oct 15 17:16:46 1995
  67909. @@ -0,0 +1,7 @@
  67910. +/* "fifo.library"*/
  67911. +#pragma libcall _FifoBase OpenFifo 1E 81003
  67912. +#pragma libcall _FifoBase CloseFifo 24 1002
  67913. +#pragma libcall _FifoBase ReadFifo 2A 81003
  67914. +#pragma libcall _FifoBase WriteFifo 30 81003
  67915. +#pragma libcall _FifoBase RequestFifo 36 81003
  67916. +#pragma libcall _FifoBase BufSizeFifo 3C 001
  67917. diff -ru --new-file baseline/fsf/emacs/unixlib/src/fifofd.c amiga/fsf/emacs/unixlib/src/fifofd.c
  67918. --- baseline/fsf/emacs/unixlib/src/fifofd.c    Wed Dec 31 17:00:00 1969
  67919. +++ amiga/fsf/emacs/unixlib/src/fifofd.c    Sun Oct 15 17:16:48 1995
  67920. @@ -0,0 +1,25 @@
  67921. +#include "amiga.h"
  67922. +#include "files.h"
  67923. +#include "fifofd.h"
  67924. +#include <time.h>
  67925. +
  67926. +struct Library *_FifoBase;
  67927. +int _fifo_sig = -1;
  67928. +long _fifo_base;
  67929. +long _fifo_offset;
  67930. +int _fifo_ok;
  67931. +
  67932. +void _init_fifo(void)
  67933. +{
  67934. +  _fifo_base = (int)_us ^ _startup_time * 65537;
  67935. +  _fifo_offset = 0;
  67936. +  _FifoBase = OpenLibrary("fifo.library", 0);
  67937. +  _fifo_sig = AllocSignal(-1);
  67938. +  _fifo_ok = _FifoBase != 0 && _fifo_sig >= 0;
  67939. +}
  67940. +
  67941. +void _cleanup_fifo(void)
  67942. +{
  67943. +  if (_fifo_sig >= 0) FreeSignal(_fifo_sig);
  67944. +  if (_FifoBase) CloseLibrary(_FifoBase);
  67945. +}
  67946. diff -ru --new-file baseline/fsf/emacs/unixlib/src/fifofd.h amiga/fsf/emacs/unixlib/src/fifofd.h
  67947. --- baseline/fsf/emacs/unixlib/src/fifofd.h    Wed Dec 31 17:00:00 1969
  67948. +++ amiga/fsf/emacs/unixlib/src/fifofd.h    Sun Oct 15 17:16:50 1995
  67949. @@ -0,0 +1,31 @@
  67950. +#ifndef FIFO_H
  67951. +#define FIFO_H
  67952. +
  67953. +#include "fifo.h"
  67954. +#include "fifo_pragmas.h"
  67955. +
  67956. +#define FIFO_BUFSIZE 1024
  67957. +#define FIFO_NAMELEN 32
  67958. +
  67959. +struct fifoinfo
  67960. +{
  67961. +  char name[FIFO_NAMELEN];
  67962. +  void *rfifo, *wfifo;
  67963. +  long maxsend, skip;
  67964. +  int flags;
  67965. +  struct Message *rmsg, *wmsg;
  67966. +  struct MsgPort *reply;
  67967. +};
  67968. +
  67969. +#define FIFO_MASTER 0x8000
  67970. +
  67971. +extern struct Library *_FifoBase;
  67972. +extern int _fifo_sig;
  67973. +extern long _fifo_base;
  67974. +extern long _fifo_offset;
  67975. +extern int _fifo_ok;
  67976. +
  67977. +void _init_fifo(void);
  67978. +void _cleanup_fifo(void);
  67979. +
  67980. +#endif
  67981. diff -ru --new-file baseline/fsf/emacs/unixlib/src/files.c amiga/fsf/emacs/unixlib/src/files.c
  67982. --- baseline/fsf/emacs/unixlib/src/files.c    Wed Dec 31 17:00:00 1969
  67983. +++ amiga/fsf/emacs/unixlib/src/files.c    Sun Oct 15 17:16:52 1995
  67984. @@ -0,0 +1,74 @@
  67985. +#include "amiga.h"
  67986. +#include "files.h"
  67987. +#include <string.h>
  67988. +
  67989. +/* Unix low-level IO emulation */
  67990. +/* --------------------------- */
  67991. +
  67992. +/* First, fd definition & allocation */
  67993. +
  67994. +static struct fileinfo *files;
  67995. +static int max_files;
  67996. +#define FILE_STEP 10        /* Nb of file descriptors to allocate at once */
  67997. +
  67998. +int _alloc_fd(void *userinfo, int flags,
  67999. +  ULONG (*__regargs select_start)(void *userinfo, int rd, int wr),
  68000. +  void (*__regargs select_poll)(void *userinfo, int *rd, int *wr),
  68001. +  int (*__regargs read)(void *userinfo, void *buffer, unsigned int length),
  68002. +  int (*__regargs write)(void *userinfo, void *buffer, unsigned int length),
  68003. +  int (*__regargs lseek)(void *userinfo, long rpos, int mode),
  68004. +  int (*__regargs close)(void *userinfo, int internal),
  68005. +  int (*__regargs ioctl)(void *userinfo, int request, void *data)
  68006. +)
  68007. +{
  68008. +  int fd;
  68009. +
  68010. +  for (fd = 0; fd < max_files; fd++)
  68011. +      if (!files[fd].userinfo)
  68012. +    {
  68013. +      files[fd].userinfo = (void *)1;
  68014. +      break;
  68015. +    }
  68016. +  if (fd == max_files)
  68017. +    {
  68018. +      struct fileinfo *newfiles;
  68019. +      int i;
  68020. +
  68021. +      /* Increase files array by FILE_STEP */
  68022. +      max_files += FILE_STEP;
  68023. +      newfiles = (struct fileinfo *)malloc(max_files * sizeof(struct fileinfo));
  68024. +      if (!newfiles)
  68025. +    {
  68026. +      errno = ENOMEM;
  68027. +      return -1;
  68028. +    }
  68029. +      memcpy(newfiles, files, (max_files - FILE_STEP) * sizeof(struct fileinfo));
  68030. +      if (files) free(files);
  68031. +      files = newfiles;
  68032. +      for (i = max_files - FILE_STEP; i < max_files; i++) files[i].userinfo = 0;
  68033. +    }
  68034. +  files[fd].userinfo = userinfo;
  68035. +  files[fd].flags = flags;
  68036. +  files[fd].select_start = select_start;
  68037. +  files[fd].select_poll = select_poll;
  68038. +  files[fd].read = read;
  68039. +  files[fd].write = write;
  68040. +  files[fd].lseek = lseek;
  68041. +  files[fd].close = close;
  68042. +  files[fd].ioctl = ioctl;
  68043. +  return fd;
  68044. +}
  68045. +
  68046. +void _free_fd(int fd)
  68047. +{
  68048. +  if (0 <= fd && fd < max_files) files[fd].userinfo = 0;
  68049. +}
  68050. +
  68051. +struct fileinfo *_find_fd(int fd)
  68052. +{
  68053. +  if (0 <= fd && fd < max_files && files[fd].userinfo) return &files[fd];
  68054. +  errno = EBADF;
  68055. +  return 0;
  68056. +}
  68057. +
  68058. +int _last_fd(void) { return max_files; }
  68059. diff -ru --new-file baseline/fsf/emacs/unixlib/src/fstat.c amiga/fsf/emacs/unixlib/src/fstat.c
  68060. --- baseline/fsf/emacs/unixlib/src/fstat.c    Wed Dec 31 17:00:00 1969
  68061. +++ amiga/fsf/emacs/unixlib/src/fstat.c    Sun Oct 15 17:16:54 1995
  68062. @@ -0,0 +1,52 @@
  68063. +#include "amiga.h"
  68064. +#include "fibstat.h"
  68065. +#include <dos/dosextens.h>
  68066. +#include <utility/tagitem.h>
  68067. +#include <sys/types.h>
  68068. +#include <sys/stat.h>
  68069. +#include <amiga/ioctl.h>
  68070. +
  68071. +int fstat(int fd, struct stat *sbuf)
  68072. +{
  68073. +  BPTR fh;
  68074. +  struct FileInfoBlock *fib;
  68075. +  int ret;
  68076. +
  68077. +  chkabort();
  68078. +  if (ioctl(fd, _AMIGA_GET_FH, &fh) == -1) return -1;
  68079. +  if ((fib = AllocDosObjectTags(DOS_FIB, TAG_END)) && ExamineFH(fh, fib))
  68080. +    {
  68081. +      struct FileHandle *handle = BADDR(fh);
  68082. +
  68083. +      _lfibstat(NULL, fib, handle->fh_Type, 0, sbuf);
  68084. +      ret = 0;
  68085. +    }
  68086. +  else
  68087. +    {
  68088. +      int err = IoErr();
  68089. +
  68090. +      if (err == ERROR_ACTION_NOT_KNOWN)
  68091. +    /* Fake a stat result */
  68092. +    {
  68093. +      ret = 0;
  68094. +      sbuf->st_dev = (long)(((struct FileHandle *)BADDR(fh))->fh_Type);
  68095. +      sbuf->st_ino = 0;
  68096. +      sbuf->st_mode = 0777 | S_IFCHR;
  68097. +      sbuf->st_nlink = 1;
  68098. +      sbuf->st_uid = AMIGA_UID; sbuf->st_gid = AMIGA_GID;
  68099. +      sbuf->st_blksize = 512;
  68100. +      sbuf->st_blocks = 0;
  68101. +      sbuf->st_size = 0;
  68102. +      /* 1-Jan-1978 */
  68103. +      sbuf->st_ctime = sbuf->st_atime = sbuf->st_mtime = 252460800;
  68104. +    }
  68105. +      else
  68106. +    {
  68107. +      ret = -1;
  68108. +      errno = convert_oserr(err);
  68109. +    }
  68110. +    }
  68111. +  if (fib) FreeDosObject(DOS_FIB, fib);
  68112. +  ioctl(fd, _AMIGA_FREE_FH, &fh);
  68113. +  return ret;
  68114. +}
  68115. diff -ru --new-file baseline/fsf/emacs/unixlib/src/ftruncate.c amiga/fsf/emacs/unixlib/src/ftruncate.c
  68116. --- baseline/fsf/emacs/unixlib/src/ftruncate.c    Wed Dec 31 17:00:00 1969
  68117. +++ amiga/fsf/emacs/unixlib/src/ftruncate.c    Sun Oct 15 17:16:56 1995
  68118. @@ -0,0 +1,8 @@
  68119. +#include "amiga.h"
  68120. +#include <amiga/ioctl.h>
  68121. +
  68122. +int ftruncate(int fd, off_t length)
  68123. +{
  68124. +  chkabort();
  68125. +  return ioctl(fd, _AMIGA_TRUNCATE, &length);
  68126. +}
  68127. diff -ru --new-file baseline/fsf/emacs/unixlib/src/getenv.c amiga/fsf/emacs/unixlib/src/getenv.c
  68128. --- baseline/fsf/emacs/unixlib/src/getenv.c    Wed Dec 31 17:00:00 1969
  68129. +++ amiga/fsf/emacs/unixlib/src/getenv.c    Sun Oct 15 17:16:58 1995
  68130. @@ -0,0 +1,31 @@
  68131. +#include "amiga.h"
  68132. +#include <string.h>
  68133. +
  68134. +/* This getenv removes trailing newlines & multiple calls don't
  68135. +   destroy results */
  68136. +char *getenv (const char *varname)
  68137. +{
  68138. +  char *return_string;
  68139. +  char buf[64];
  68140. +
  68141. +  chkabort();
  68142. +  if (varname && varname[0])
  68143. +    {
  68144. +      int len, size;
  68145. +
  68146. +      len = GetVar(varname, buf, 64, LV_VAR);
  68147. +      if (len >= 0)
  68148. +    {
  68149. +      size = IoErr();
  68150. +      return_string = malloc(size + 1);
  68151. +      if (!return_string) return 0;
  68152. +      if (size != len)
  68153. +        {
  68154. +          if (GetVar(varname, return_string, size + 1, LV_VAR) > 0)
  68155. +        return return_string;
  68156. +        }
  68157. +      else return strcpy(return_string, buf);
  68158. +    }
  68159. +    }
  68160. +  return 0;
  68161. +}
  68162. diff -ru --new-file baseline/fsf/emacs/unixlib/src/gethostname.c amiga/fsf/emacs/unixlib/src/gethostname.c
  68163. --- baseline/fsf/emacs/unixlib/src/gethostname.c    Wed Dec 31 17:00:00 1969
  68164. +++ amiga/fsf/emacs/unixlib/src/gethostname.c    Sun Oct 15 17:17:01 1995
  68165. @@ -0,0 +1,11 @@
  68166. +#include "amiga.h"
  68167. +#include <unistd.h>
  68168. +
  68169. +extern char *_system_name;
  68170. +
  68171. +int gethostname(char *buf, int len)
  68172. +{
  68173. +  strncpy(buf, _system_name, len);
  68174. +
  68175. +  return 0;
  68176. +}
  68177. diff -ru --new-file baseline/fsf/emacs/unixlib/src/getpid.c amiga/fsf/emacs/unixlib/src/getpid.c
  68178. --- baseline/fsf/emacs/unixlib/src/getpid.c    Wed Dec 31 17:00:00 1969
  68179. +++ amiga/fsf/emacs/unixlib/src/getpid.c    Sun Oct 15 17:17:03 1995
  68180. @@ -0,0 +1,8 @@
  68181. +#include "amiga.h"
  68182. +#include "processes.h"
  68183. +
  68184. +int getpid(void)
  68185. +{
  68186. +  chkabort();
  68187. +  return _our_pid;
  68188. +}
  68189. diff -ru --new-file baseline/fsf/emacs/unixlib/src/getwd.c amiga/fsf/emacs/unixlib/src/getwd.c
  68190. --- baseline/fsf/emacs/unixlib/src/getwd.c    Wed Dec 31 17:00:00 1969
  68191. +++ amiga/fsf/emacs/unixlib/src/getwd.c    Sun Oct 15 17:17:05 1995
  68192. @@ -0,0 +1,8 @@
  68193. +#include "amiga.h"
  68194. +#include <sys/param.h>
  68195. +
  68196. +char *getwd (char *pathname)
  68197. +{
  68198. +  chkabort();
  68199. +  return getcwd(pathname, MAXPATHLEN);
  68200. +}
  68201. diff -ru --new-file baseline/fsf/emacs/unixlib/src/gid.c amiga/fsf/emacs/unixlib/src/gid.c
  68202. --- baseline/fsf/emacs/unixlib/src/gid.c    Wed Dec 31 17:00:00 1969
  68203. +++ amiga/fsf/emacs/unixlib/src/gid.c    Sun Oct 15 17:17:07 1995
  68204. @@ -0,0 +1,4 @@
  68205. +#include "amiga.h"
  68206. +
  68207. +gid_t getgid(void) { return AMIGA_GID; }
  68208. +gid_t getegid(void) { return AMIGA_GID; }
  68209. diff -ru --new-file baseline/fsf/emacs/unixlib/src/grp.c amiga/fsf/emacs/unixlib/src/grp.c
  68210. --- baseline/fsf/emacs/unixlib/src/grp.c    Wed Dec 31 17:00:00 1969
  68211. +++ amiga/fsf/emacs/unixlib/src/grp.c    Sun Oct 15 17:17:09 1995
  68212. @@ -0,0 +1,14 @@
  68213. +#include "amiga.h"
  68214. +#include <grp.h>
  68215. +
  68216. +static char *wheel_members[] = { "user", 0 };
  68217. +
  68218. +static struct group wheel = {
  68219. +  "wheel",
  68220. +  "",
  68221. +  AMIGA_GID,
  68222. +  wheel_members
  68223. +};
  68224. +
  68225. +struct group *getgrgid(gid_t gid) { return &wheel; }
  68226. +struct group *getgrnam(char *name) { return &wheel; }
  68227. diff -ru --new-file baseline/fsf/emacs/unixlib/src/index.c amiga/fsf/emacs/unixlib/src/index.c
  68228. --- baseline/fsf/emacs/unixlib/src/index.c    Wed Dec 31 17:00:00 1969
  68229. +++ amiga/fsf/emacs/unixlib/src/index.c    Sun Oct 15 17:17:11 1995
  68230. @@ -0,0 +1,8 @@
  68231. +#include <string.h>
  68232. +
  68233. +#undef index
  68234. +
  68235. +char *index(char *str, int c)
  68236. +{
  68237. +  return strchr(str, c);
  68238. +}
  68239. diff -ru --new-file baseline/fsf/emacs/unixlib/src/ioctl.c amiga/fsf/emacs/unixlib/src/ioctl.c
  68240. --- baseline/fsf/emacs/unixlib/src/ioctl.c    Wed Dec 31 17:00:00 1969
  68241. +++ amiga/fsf/emacs/unixlib/src/ioctl.c    Sun Oct 15 17:17:12 1995
  68242. @@ -0,0 +1,14 @@
  68243. +#include "amiga.h"
  68244. +#include "files.h"
  68245. +
  68246. +int ioctl(int fd, int request, caddr_t arg)
  68247. +{
  68248. +  struct fileinfo *fi;
  68249. +
  68250. +  chkabort();
  68251. +  if (fi = _find_fd(fd))
  68252. +    {
  68253. +      return fi->ioctl(fi->userinfo, request, arg);
  68254. +    }
  68255. +  return -1;
  68256. +}
  68257. diff -ru --new-file baseline/fsf/emacs/unixlib/src/isatty.c amiga/fsf/emacs/unixlib/src/isatty.c
  68258. --- baseline/fsf/emacs/unixlib/src/isatty.c    Wed Dec 31 17:00:00 1969
  68259. +++ amiga/fsf/emacs/unixlib/src/isatty.c    Sun Oct 15 17:17:14 1995
  68260. @@ -0,0 +1,11 @@
  68261. +#include "amiga.h"
  68262. +#include <amiga/ioctl.h>
  68263. +
  68264. +int isatty(int fd)
  68265. +{
  68266. +  int istty;
  68267. +
  68268. +  chkabort();
  68269. +  if (ioctl(fd, _AMIGA_INTERACTIVE, &istty) != 0) return 0;
  68270. +  return istty;
  68271. +}
  68272. diff -ru --new-file baseline/fsf/emacs/unixlib/src/kill.c amiga/fsf/emacs/unixlib/src/kill.c
  68273. --- baseline/fsf/emacs/unixlib/src/kill.c    Wed Dec 31 17:00:00 1969
  68274. +++ amiga/fsf/emacs/unixlib/src/kill.c    Sun Oct 15 17:17:16 1995
  68275. @@ -0,0 +1,74 @@
  68276. +#include "amiga.h"
  68277. +#include "signals.h"
  68278. +#include "processes.h"
  68279. +#include <exec/execbase.h>
  68280. +
  68281. +extern struct ExecBase *SysBase;
  68282. +
  68283. +static void break_list(struct List *tasks, BPTR fh)
  68284. +{
  68285. +  struct Process *p;
  68286. +
  68287. +  for (p = (struct Process *)tasks->lh_Head; p->pr_Task.tc_Node.ln_Succ;
  68288. +       p = (struct Process *)p->pr_Task.tc_Node.ln_Succ)
  68289. +    {
  68290. +      if (p->pr_Task.tc_Node.ln_Type == NT_PROCESS)
  68291. +    {
  68292. +      struct CommandLineInterface *cli = p->pr_CLI ? BADDR(p->pr_CLI) : 0;
  68293. +
  68294. +      if (p->pr_CIS == fh || p->pr_COS == fh || p->pr_CES == fh ||
  68295. +          cli && (cli->cli_StandardInput == fh || cli->cli_CurrentInput == fh ||
  68296. +              cli->cli_StandardOutput == fh || cli->cli_CurrentOutput == fh))
  68297. +        Signal(p, SIGBREAKF_CTRL_C | SIGBREAKF_CTRL_D);
  68298. +    }
  68299. +    }
  68300. +}
  68301. +
  68302. +static int magickill(BPTR fh, int signo)
  68303. +{
  68304. +  switch (signo)
  68305. +    {
  68306. +    case SIGINT: case SIGQUIT: case SIGKILL: case SIGHUP:
  68307. +      Forbid();
  68308. +      break_list(&SysBase->TaskReady, fh);
  68309. +      break_list(&SysBase->TaskWait, fh);
  68310. +      Permit();
  68311. +      return 0;
  68312. +    default: errno = EINVAL; return -1;
  68313. +    }
  68314. +}
  68315. +
  68316. +int kill(int pid, int signal)
  68317. +{
  68318. +  chkabort();
  68319. +  /* Our process list is now reasonably upto date */
  68320. +  if (pid < 0) pid = -pid;    /* Consider that each process is a pg unto itself */
  68321. +  if (pid == _our_pid) 
  68322. +    {
  68323. +      if (signal) _sig_dispatch(signal);
  68324. +      return 0;
  68325. +    }
  68326. +  else 
  68327. +    {
  68328. +      struct process *entry;
  68329. +      int killrc;
  68330. +
  68331. +      entry = _find_pid(pid);
  68332. +      if (!entry || entry->status != alive)
  68333. +    {
  68334. +      errno = ESRCH;
  68335. +      return -1;
  68336. +    }
  68337. +      if (!signal) return 0;
  68338. +      killrc = magickill(entry->input, signal);
  68339. +      if (signal == SIGKILL)
  68340. +    {
  68341. +      /* Fake the kill from emacs point of view */
  68342. +      entry->status = exited;
  68343. +      entry->rc = SIGKILL;
  68344. +      _sig_dispatch(SIGCHLD);
  68345. +      return 0;
  68346. +    }
  68347. +      return killrc;
  68348. +    }
  68349. +}
  68350. diff -ru --new-file baseline/fsf/emacs/unixlib/src/link.c amiga/fsf/emacs/unixlib/src/link.c
  68351. --- baseline/fsf/emacs/unixlib/src/link.c    Wed Dec 31 17:00:00 1969
  68352. +++ amiga/fsf/emacs/unixlib/src/link.c    Sun Oct 15 17:17:18 1995
  68353. @@ -0,0 +1,16 @@
  68354. +#include "amiga.h"
  68355. +
  68356. +int link(char *from, char *to)
  68357. +{
  68358. +  BPTR from_lock = Lock(from, ACCESS_READ);
  68359. +
  68360. +  chkabort();
  68361. +  if (from_lock)
  68362. +    {
  68363. +      int ok = MakeLink(to, from_lock, 0);
  68364. +
  68365. +      UnLock(from_lock);
  68366. +      if (ok) return 0;
  68367. +    }
  68368. +  ERROR;
  68369. +}
  68370. diff -ru --new-file baseline/fsf/emacs/unixlib/src/lseek.c amiga/fsf/emacs/unixlib/src/lseek.c
  68371. --- baseline/fsf/emacs/unixlib/src/lseek.c    Wed Dec 31 17:00:00 1969
  68372. +++ amiga/fsf/emacs/unixlib/src/lseek.c    Sun Oct 15 17:17:19 1995
  68373. @@ -0,0 +1,23 @@
  68374. +#include "amiga.h"
  68375. +#include "files.h"
  68376. +#include <fcntl.h>
  68377. +
  68378. +#undef lseek
  68379. +
  68380. +int __lseek(int fd, long rpos, int mode)
  68381. +{
  68382. +  struct fileinfo *fi;
  68383. +
  68384. +  chkabort();
  68385. +  if (fi = _find_fd(fd))
  68386. +    {
  68387. +      return fi->lseek(fi->userinfo, rpos, mode);
  68388. +    }
  68389. +  return -1;
  68390. +}
  68391. +
  68392. +int lseek(int fd, long rpos, int mode)
  68393. +{
  68394. +  return __lseek(fd, rpos, mode);
  68395. +}
  68396. +
  68397. diff -ru --new-file baseline/fsf/emacs/unixlib/src/message.c amiga/fsf/emacs/unixlib/src/message.c
  68398. --- baseline/fsf/emacs/unixlib/src/message.c    Wed Dec 31 17:00:00 1969
  68399. +++ amiga/fsf/emacs/unixlib/src/message.c    Sun Oct 15 17:17:21 1995
  68400. @@ -0,0 +1,78 @@
  68401. +#include "amiga.h"
  68402. +#include <intuition/intuition.h>
  68403. +#include <stdarg.h>
  68404. +
  68405. +static struct EasyStruct msg = {
  68406. +    sizeof (struct EasyStruct),
  68407. +    0,
  68408. +    NULL,
  68409. +    NULL,
  68410. +    "Ok",
  68411. +};
  68412. +
  68413. +static void message(char *format, long *args)
  68414. +/* Display a message which is as visible as possible (either to the console
  68415. +   or to as a requester).
  68416. +   Assume very little about library state */
  68417. +{
  68418. +  LONG msg_EasyRequestArgs(struct Window *window, struct EasyStruct *easyStruct,
  68419. +               ULONG *idcmpPtr, APTR args );
  68420. +#pragma libcall msg_IntuitionBase msg_EasyRequestArgs 24C BA9804
  68421. +  BPTR fh;
  68422. +  int close = FALSE;
  68423. +  extern char *_ProgramName;
  68424. +  extern struct WBStartup *_WBenchMsg;
  68425. +
  68426. +  fh = _us->pr_CES;
  68427. +  if (!fh)
  68428. +    if (!_WBenchMsg && (fh = Open("console:", MODE_OLDFILE))) close = TRUE;
  68429. +
  68430. +  if (fh)
  68431. +    {
  68432. +      VFPrintf(fh, "%s: ", &_ProgramName);
  68433. +      VFPrintf(fh, format, (long *)args);
  68434. +      FPutC(fh, '\n');
  68435. +      if (close) Close(fh);
  68436. +    }
  68437. +  else
  68438. +    {
  68439. +      struct Window *win = (struct Window *)_us->pr_WindowPtr;
  68440. +      if (win != (struct Window *)-1)
  68441. +    {
  68442. +      struct Library *msg_IntuitionBase = OpenLibrary("intuition.library", 37);
  68443. +
  68444. +      if (msg_IntuitionBase)
  68445. +        {
  68446. +          msg.es_Title = _ProgramName;
  68447. +          msg.es_TextFormat = format;
  68448. +          msg_EasyRequestArgs(win, &msg, 0, args);
  68449. +          CloseLibrary(msg_IntuitionBase);
  68450. +        }
  68451. +    }
  68452. +    }
  68453. +}
  68454. +
  68455. +void _message(char *format, ...)
  68456. +/* Display a message which is as visible as possible (either to the console
  68457. +   or to as a requester).
  68458. +   Assume very little about library state */
  68459. +{
  68460. +  va_list args;
  68461. +
  68462. +  va_start(args, format);
  68463. +  message(format, (long *)args);
  68464. +}
  68465. +
  68466. +void _fail(char *format, ...)
  68467. +/* Display a message which is as visible as possible (either to the console
  68468. +   or to as a requester).
  68469. +   Assume very little about library state.
  68470. +   Exit with error code RETURN_FAIL after that. */
  68471. +{
  68472. +  va_list args;
  68473. +
  68474. +  va_start(args, format);
  68475. +  message(format, (long *)args);
  68476. +
  68477. +  exit(RETURN_FAIL);        /* The library should always be cleanup-able */
  68478. +}
  68479. diff -ru --new-file baseline/fsf/emacs/unixlib/src/mkdir.c amiga/fsf/emacs/unixlib/src/mkdir.c
  68480. --- baseline/fsf/emacs/unixlib/src/mkdir.c    Wed Dec 31 17:00:00 1969
  68481. +++ amiga/fsf/emacs/unixlib/src/mkdir.c    Sun Oct 15 17:17:23 1995
  68482. @@ -0,0 +1,20 @@
  68483. +#include "amiga.h"
  68484. +#include <stdarg.h>
  68485. +
  68486. +int mkdir(char *name, mode_t mode)
  68487. +{
  68488. +  BPTR lock;
  68489. +  long amode;
  68490. +
  68491. +  chkabort();
  68492. +
  68493. +  if (lock = CreateDir(name))
  68494. +    {
  68495. +      UnLock(lock);
  68496. +      /* We remove script because mode 777 contains it by def, but it is
  68497. +         meaningless for directories */
  68498. +      amode = _make_protection(mode) & ~(FIBF_SCRIPT);
  68499. +      if (SetProtection(name, _make_protection(mode))) return 0;
  68500. +    }
  68501. +  ERROR;
  68502. +}
  68503. diff -ru --new-file baseline/fsf/emacs/unixlib/src/mkfifo.c amiga/fsf/emacs/unixlib/src/mkfifo.c
  68504. --- baseline/fsf/emacs/unixlib/src/mkfifo.c    Wed Dec 31 17:00:00 1969
  68505. +++ amiga/fsf/emacs/unixlib/src/mkfifo.c    Sun Oct 15 17:17:25 1995
  68506. @@ -0,0 +1,4 @@
  68507. +#include "amiga.h"
  68508. +
  68509. +int mkfifo(char *path, int mode, int dev) { errno = EOSERR; return -1; }
  68510. +int mknod(char *path, int mode, int dev) { errno = EOSERR; return -1; }
  68511. diff -ru --new-file baseline/fsf/emacs/unixlib/src/mktemp.c amiga/fsf/emacs/unixlib/src/mktemp.c
  68512. --- baseline/fsf/emacs/unixlib/src/mktemp.c    Wed Dec 31 17:00:00 1969
  68513. +++ amiga/fsf/emacs/unixlib/src/mktemp.c    Sun Oct 15 17:17:27 1995
  68514. @@ -0,0 +1,26 @@
  68515. +#include "amiga.h"
  68516. +#include <string.h>
  68517. +#include <stdio.h>
  68518. +
  68519. +char *mktemp(char *name)
  68520. +{
  68521. +  int l;
  68522. +  char *change = name + strlen(name) - 6;
  68523. +  char letter = 'a';
  68524. +  char id[9], *end_id;
  68525. +
  68526. +  chkabort();
  68527. +  _sprintf(id, "%lx", _us);
  68528. +  l = strlen(id);
  68529. +  end_id = l > 5 ? id + l - 5 : id;
  68530. +  _sprintf(change, "a%s", end_id);
  68531. +
  68532. +  while (letter <= 'z')
  68533. +    {
  68534. +      *change = letter;
  68535. +      if (access(name, 0)) return name;
  68536. +      letter++;
  68537. +    }
  68538. +  name[0] = '\0';
  68539. +  return name;
  68540. +}
  68541. diff -ru --new-file baseline/fsf/emacs/unixlib/src/open.c amiga/fsf/emacs/unixlib/src/open.c
  68542. --- baseline/fsf/emacs/unixlib/src/open.c    Wed Dec 31 17:00:00 1969
  68543. +++ amiga/fsf/emacs/unixlib/src/open.c    Sun Oct 15 17:17:28 1995
  68544. @@ -0,0 +1,141 @@
  68545. +#include "amiga.h"
  68546. +#include "files.h"
  68547. +#include "amigados.h"
  68548. +#include <utility/tagitem.h>
  68549. +#include <stdarg.h>
  68550. +#include <fcntl.h>
  68551. +#include <string.h>
  68552. +
  68553. +
  68554. +#undef open
  68555. +
  68556. +int __open(const char *path, int flags, ...)
  68557. +{
  68558. +  int fd, acc = flags & 3, rd, wr, exists = TRUE, amode;
  68559. +  struct FileInfoBlock *fib;
  68560. +  BPTR plock, fh;
  68561. +  long fdflags, protection;
  68562. +  APTR pwindow = _us->pr_WindowPtr;
  68563. +  ULONG create = MODE_READWRITE; /* Mode to use when creating files. */
  68564. +
  68565. +  chkabort();
  68566. +
  68567. +  rd = acc == O_RDONLY || acc == O_RDWR;
  68568. +  wr = acc == O_WRONLY || acc == O_RDWR;
  68569. +
  68570. +  if (stricmp(path, "NIL:") == 0) amode = -1;
  68571. +  else
  68572. +    {
  68573. +      _us->pr_WindowPtr = (APTR)-1;
  68574. +      plock = Lock(path, ACCESS_READ);
  68575. +      _us->pr_WindowPtr = pwindow;
  68576. +      if (!plock)
  68577. +    {
  68578. +      int err = convert_oserr(IoErr()), ok;
  68579. +
  68580. +      /* Devices like pipe: don't like Lock ... */
  68581. +      if (_OSERR == ERROR_ACTION_NOT_KNOWN ||
  68582. +          _OSERR == 0) /* Some devices (tape:) don't set IoErr() ... */
  68583. +        {
  68584. +          ok = TRUE;
  68585. +          /* Most non-lockable devices don't like MODE_READWRITE.
  68586. +         So we have to throw shareable files out the window */
  68587. +          create = MODE_NEWFILE;
  68588. +        }
  68589. +      else /* Missing file ok if we are creating. */ 
  68590. +        ok = err == ENOENT && (flags & O_CREAT);
  68591. +
  68592. +      if (ok)
  68593. +        {
  68594. +          va_list vmode;
  68595. +
  68596. +          exists = FALSE;
  68597. +          if (flags & O_CREAT)
  68598. +        {
  68599. +          if (flags & 0x8000) /* SAS C runtime called us, no mode */
  68600. +            amode = FIBF_EXECUTE; /* Maybe 0 ? */
  68601. +          else
  68602. +            {
  68603. +              va_start(vmode, flags);
  68604. +              amode = _make_protection(va_arg(vmode, int));
  68605. +              va_end(vmode);
  68606. +            }
  68607. +        }
  68608. +          else amode = -1;    /* Assume complete access */
  68609. +        }
  68610. +      else
  68611. +        {
  68612. +          errno = err;
  68613. +          return -1;
  68614. +        }
  68615. +    }
  68616. +      else /* File already exists, play with it */
  68617. +    {
  68618. +      /* Get protection */
  68619. +      if (!((fib = AllocDosObjectTags(DOS_FIB, TAG_END)) &&
  68620. +        Examine(plock, fib)))
  68621. +        {
  68622. +          if (fib) FreeDosObject(DOS_FIB, fib);
  68623. +          ERROR;
  68624. +        }
  68625. +      amode = fib->fib_Protection;
  68626. +      FreeDosObject(DOS_FIB, fib);
  68627. +      UnLock(plock);
  68628. +
  68629. +      /* Check access */
  68630. +      if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
  68631. +        {
  68632. +          errno = EEXIST;
  68633. +          return -1;
  68634. +        }
  68635. +      if ((rd && (amode & FIBF_READ) || wr && (amode & FIBF_WRITE)))
  68636. +        {
  68637. +          errno = EACCES;
  68638. +          return -1;
  68639. +        }
  68640. +
  68641. +      /* Truncate files, by opening in MODE_NEWFILE, then closing it.
  68642. +         This allows the file to be opened in shared mode after that (READWRITE or
  68643. +         OLDFILE), which is consistent with the unix semantics. */
  68644. +      if (flags & O_TRUNC)
  68645. +        {
  68646. +          BPTR tfh;
  68647. +
  68648. +          if (tfh = Open(path, MODE_NEWFILE)) Close(tfh);
  68649. +          else ERROR;
  68650. +        }
  68651. +    }
  68652. +    }
  68653. +  if (!(fh = Open(path, flags & O_CREAT ? create : MODE_OLDFILE)))
  68654. +    ERROR;
  68655. +
  68656. +  
  68657. +  /* Protection is set when file is closed because OFS & FFS
  68658. +     don't appreciate it being done on MODE_NEWFILE files. */
  68659. +  if ((flags & O_TRUNC) || !exists) protection = amode;
  68660. +  else protection = -1;
  68661. +
  68662. +  fdflags = 0;
  68663. +  if (rd) fdflags |= FI_READ;
  68664. +  if (wr) fdflags |= FI_WRITE;
  68665. +  if (flags & O_APPEND) fdflags |= O_APPEND;
  68666. +
  68667. +  fd = _alloc_amigafd(fh, protection, fdflags);
  68668. +  if (fd < 0)
  68669. +    {
  68670. +      _us->pr_WindowPtr = (APTR)-1;
  68671. +      Close(fh);
  68672. +      _us->pr_WindowPtr = pwindow;
  68673. +    }
  68674. +  return fd;
  68675. +}
  68676. +
  68677. +int open(const char *path, int flags, ...)
  68678. +{
  68679. +  va_list vmode;
  68680. +
  68681. +  va_start(vmode, flags);
  68682. +  return __open(path, flags, va_arg(vmode, int));
  68683. +  va_end(vmode);
  68684. +}
  68685. +
  68686. diff -ru --new-file baseline/fsf/emacs/unixlib/src/perror.c amiga/fsf/emacs/unixlib/src/perror.c
  68687. --- baseline/fsf/emacs/unixlib/src/perror.c    Wed Dec 31 17:00:00 1969
  68688. +++ amiga/fsf/emacs/unixlib/src/perror.c    Sun Oct 15 17:17:31 1995
  68689. @@ -0,0 +1,26 @@
  68690. +#include "amiga.h"
  68691. +#include <errno.h>
  68692. +#include <string.h>
  68693. +#include <unistd.h>
  68694. +
  68695. +void perror(const char *s)
  68696. +{
  68697. +  char *err;
  68698. +  char amiga_err[81];
  68699. +
  68700. +  if (s && *s) 
  68701. +    {
  68702. +      write(2, s, strlen(s));
  68703. +      write(2, ": ", 2);
  68704. +    }
  68705. +  if (errno > 0 && errno <= sys_nerr) err = sys_errlist[errno];
  68706. +  else if (errno == -1) 
  68707. +    {
  68708. +      if (Fault(_OSERR, NULL, amiga_err, 81)) err = amiga_err;
  68709. +      else err = "42";        /* Shouldn't appear ... */
  68710. +    }
  68711. +  else err = "Unknown error code";
  68712. +
  68713. +  write(2, err, strlen(err));
  68714. +  write(2, "\n", 1);
  68715. +}
  68716. diff -ru --new-file baseline/fsf/emacs/unixlib/src/pipe.c amiga/fsf/emacs/unixlib/src/pipe.c
  68717. --- baseline/fsf/emacs/unixlib/src/pipe.c    Wed Dec 31 17:00:00 1969
  68718. +++ amiga/fsf/emacs/unixlib/src/pipe.c    Sun Oct 15 17:17:34 1995
  68719. @@ -0,0 +1,354 @@
  68720. +#include "amiga.h"
  68721. +#include "files.h"
  68722. +#include "fifofd.h"
  68723. +#include "signals.h"
  68724. +#include <sys/filio.h>
  68725. +#include <fcntl.h>
  68726. +#include <signal.h>
  68727. +#include <string.h>
  68728. +#include <stdio.h>
  68729. +#include <exec/memory.h>
  68730. +#include <amiga/ioctl.h>
  68731. +
  68732. +/* The pipe system call, using fifo: */
  68733. +
  68734. +static struct MsgPort *create_fifo_port(void)
  68735. +{
  68736. +  struct MsgPort *port = AllocMem(sizeof(*port), MEMF_CLEAR | MEMF_PUBLIC);
  68737. +
  68738. +  if (!port) return 0;
  68739. +  port->mp_Node.ln_Type = NT_MSGPORT;
  68740. +  port->mp_Flags = PA_SIGNAL;
  68741. +  port->mp_SigBit = _fifo_sig;
  68742. +  port->mp_SigTask = _us;
  68743. +  NewList(&port->mp_MsgList);
  68744. +
  68745. +  return port;
  68746. +}
  68747. +
  68748. +static void delete_fifo_port(struct MsgPort *port)
  68749. +{
  68750. +  FreeMem(port, sizeof(*port));
  68751. +}
  68752. +
  68753. +static void free_fifo(struct fifoinfo *fi)
  68754. +{
  68755. +  if (fi->rfifo) CloseFifo(fi->rfifo, 0);
  68756. +  if (fi->wfifo) CloseFifo(fi->wfifo, FIFOF_EOF);
  68757. +  if (fi->rmsg) free(fi->rmsg);
  68758. +  if (fi->wmsg) free(fi->wmsg);
  68759. +  delete_fifo_port(fi->reply);
  68760. +  free(fi);
  68761. +}
  68762. +
  68763. +/* Code for fd's describing fifos */
  68764. +
  68765. +static ULONG __regargs fifo_select_start(void *userinfo, int rd, int wr)
  68766. +{
  68767. +  struct fifoinfo *fi = userinfo;
  68768. +
  68769. +  if (rd) RequestFifo(fi->rfifo, fi->rmsg, FREQ_RPEND);
  68770. +  if (wr) RequestFifo(fi->wfifo, fi->wmsg, FREQ_WAVAIL);
  68771. +  return 1UL << _fifo_sig;
  68772. +}
  68773. +
  68774. +static void __regargs fifo_select_poll(void *userinfo, int *rd, int *wr)
  68775. +{
  68776. +  struct fifoinfo *fi = userinfo;
  68777. +  int rabort = *rd, wabort = *wr;
  68778. +  struct Message *msg;
  68779. +
  68780. +  while (msg = GetMsg(fi->reply))
  68781. +    {
  68782. +      if (msg == fi->rmsg) rabort = 0;
  68783. +      else if (msg == fi->wmsg) wabort = 0;
  68784. +    }
  68785. +  if (rabort)
  68786. +    {
  68787. +      *rd = 0;
  68788. +      RequestFifo(fi->rfifo, fi->rmsg, FREQ_ABORT);
  68789. +    }
  68790. +  if (wabort)
  68791. +    {
  68792. +      *wr = 0;
  68793. +      RequestFifo(fi->wfifo, fi->wmsg, FREQ_ABORT);
  68794. +    }
  68795. +  while (rabort || wabort)
  68796. +    {
  68797. +      while (!(msg = GetMsg(fi->reply))) Wait(1UL << _fifo_sig);
  68798. +      if (msg == fi->rmsg) rabort = 0;
  68799. +      else if (msg == fi->wmsg) wabort = 0;
  68800. +    }
  68801. +  /* Clear any signals we may have left behind */
  68802. +  SetSignal(0, 1UL << _fifo_sig);
  68803. +}
  68804. +
  68805. +/* Using 4.2BSD style semantics, with reads from fifo's returning immediately when
  68806. +   data is available, and blocking for empty fifo's only when O_NDELAY was not
  68807. +   specified on open */
  68808. +
  68809. +static int __regargs fifo_read(void *userinfo, void *buffer, unsigned int length)
  68810. +{
  68811. +  struct fifoinfo *fi = userinfo;
  68812. +  char *chars;
  68813. +  long ready;
  68814. +
  68815. +  while (!(ready = ReadFifo(fi->rfifo, &chars, fi->skip)))
  68816. +    {
  68817. +      ULONG sigs;
  68818. +
  68819. +      fi->skip = 0;
  68820. +      if (fi->flags & O_NDELAY)
  68821. +    {
  68822. +      errno = EWOULDBLOCK;
  68823. +      return -1;
  68824. +    }
  68825. +      Delay(1);            /* Perversely, this improves the performance */
  68826. +      RequestFifo(fi->rfifo, fi->rmsg, FREQ_RPEND);
  68827. +      sigs = _wait_signals(1L << fi->reply->mp_SigBit);
  68828. +      RequestFifo(fi->rfifo, fi->rmsg, FREQ_ABORT);
  68829. +      while (!GetMsg(fi->reply)) Wait(1UL << _fifo_sig);
  68830. +
  68831. +      _handle_signals(sigs);
  68832. +    }
  68833. +  if (ready == -1) ready = 0;
  68834. +  if (ready > length) ready = length;
  68835. +  memcpy(buffer, chars, ready);
  68836. +  fi->skip = ready;
  68837. +
  68838. +  return (int)ready;
  68839. +}
  68840. +
  68841. +static int __regargs fifo_write(void *userinfo, void *_buffer, unsigned int length)
  68842. +{
  68843. +  struct fifoinfo *fi = userinfo;
  68844. +  long cansend, written;
  68845. +  char *buffer = _buffer;
  68846. +
  68847. +  if (length == 0)        /* Send EOF */
  68848. +    {
  68849. +      char *fname, sname[FIFO_NAMELEN + 2], mname[FIFO_NAMELEN + 2];
  68850. +
  68851. +      /* Send EOF */
  68852. +      CloseFifo(fi->wfifo, FIFOF_EOF);
  68853. +      /* And reopen fifo */
  68854. +      /* Docs say that this clears EOF flag, maybe we should wait a bit ? */
  68855. +      /* The writer is the "master" in fifo: terms */
  68856. +      strcpy(mname, fi->name); strcat(mname, "_m");
  68857. +      strcpy(sname, fi->name); strcat(sname, "_s");
  68858. +
  68859. +      fname = !(fi->flags & FI_READ) || (fi->flags & FIFO_MASTER) ? mname : sname;
  68860. +      fi->wfifo = OpenFifo(fname, FIFO_BUFSIZE, FIFOF_NORMAL | FIFOF_NBIO |
  68861. +               FIFOF_WRITE | FIFOF_RREQUIRED);
  68862. +      if (fi->wfifo)
  68863. +    {
  68864. +      fi->maxsend = BufSizeFifo(fi->wfifo) / 2;
  68865. +      return 0;
  68866. +    }
  68867. +      /* We're in trouble. From now on, all writes will fail */
  68868. +    }
  68869. +  else if (fi->wfifo)
  68870. +    {
  68871. +      cansend = fi->maxsend;
  68872. +      written = 0;
  68873. +      while (length > 0)
  68874. +    {
  68875. +      long sent;
  68876. +
  68877. +      if (cansend > length) cansend = length;
  68878. +      while ((sent = WriteFifo(fi->wfifo, buffer, cansend)) == 0)
  68879. +        {
  68880. +          ULONG sigs;
  68881. +          int signaled;
  68882. +
  68883. +          if (fi->flags & O_NDELAY)
  68884. +        {
  68885. +          if (written != 0) return (int)written;
  68886. +          errno = EWOULDBLOCK;
  68887. +          return -1;
  68888. +        }
  68889. +          RequestFifo(fi->wfifo, fi->wmsg, FREQ_WAVAIL);
  68890. +          sigs = _wait_signals(1L << fi->reply->mp_SigBit);
  68891. +          RequestFifo(fi->wfifo, fi->wmsg, FREQ_ABORT);
  68892. +          while (!GetMsg(fi->reply)) Wait(1UL << _fifo_sig);
  68893. +          signaled = _handle_signals(sigs);
  68894. +          if (signaled && written != 0) return (int)written;
  68895. +        }
  68896. +      if (sent < 0) /* Some problem has occured */ goto fail;
  68897. +      written += sent;
  68898. +      length -= sent;
  68899. +      buffer += sent;
  68900. +    }
  68901. +      return (int)written;
  68902. +    }
  68903. + fail:
  68904. +  /* Some problem has occured */
  68905. +  _sig_dispatch(SIGPIPE);
  68906. +  errno = EPIPE;
  68907. +  return -1;
  68908. +}
  68909. +
  68910. +static int __regargs fifo_lseek(void *userinfo, long rpos, int mode)
  68911. +{
  68912. +  errno = ESPIPE;
  68913. +  return -1;
  68914. +}
  68915. +
  68916. +static int __regargs fifo_close(void *userinfo, int internal)
  68917. +{
  68918. +  struct fifoinfo *fi = userinfo;
  68919. +
  68920. +  free_fifo(fi);
  68921. +  return 0;
  68922. +}
  68923. +
  68924. +static int __regargs fifo_ioctl(void *userinfo, int request, void *data)
  68925. +{
  68926. +  struct fifoinfo *fi = userinfo;
  68927. +
  68928. +  switch (request)
  68929. +    {
  68930. +    case FIONBIO:
  68931. +      if (*(int *)data) fi->flags |= O_NDELAY;
  68932. +      else fi->flags &= ~O_NDELAY;
  68933. +      return 0;
  68934. +    case _AMIGA_GET_FH: {
  68935. +      BPTR *fh = data;
  68936. +      char name[FIFO_NAMELEN + 12];
  68937. +
  68938. +      /* Get an AmigaDOS fifo: onto the same fifo in the same role */
  68939. +      if ((fi->flags & (FI_READ | FI_WRITE)) == (FI_READ | FI_WRITE))
  68940. +    _sprintf(name, "fifo:%s/rwesK%s",
  68941. +         fi->name, fi->flags & FIFO_MASTER ? "m" : "");
  68942. +      else if (fi->flags & FI_READ) _sprintf(name, "fifo:%s/r", fi->name);
  68943. +      else _sprintf(name, "fifo:%s/mweK", fi->name);
  68944. +      *fh = Open(name, MODE_OLDFILE);
  68945. +
  68946. +      if (*fh) return 0;
  68947. +      ERROR;
  68948. +    }
  68949. +    case _AMIGA_FREE_FH: {
  68950. +      BPTR *fh = data;
  68951. +
  68952. +      if (*fh) Close(*fh);
  68953. +      return 0;
  68954. +    }
  68955. +    default: errno = EINVAL; return -1;
  68956. +    }
  68957. +}
  68958. +
  68959. +static int alloc_fifo(char *name, int reader, int writer, int master)
  68960. +{
  68961. +  struct fifoinfo *fi;
  68962. +  int fd;
  68963. +  struct MsgPort *reply = 0;
  68964. +  struct Message *rmsg = 0, *wmsg = 0;
  68965. +
  68966. +  if ((fi = (struct fifoinfo *)malloc(sizeof(struct fifoinfo))) &&
  68967. +      (reply = create_fifo_port()) &&
  68968. +      (rmsg = (struct Message *)malloc(sizeof(struct Message))) &&
  68969. +      (wmsg = (struct Message *)malloc(sizeof(struct Message))))
  68970. +    {
  68971. +      rmsg->mn_Node.ln_Type = NT_MESSAGE;
  68972. +      rmsg->mn_ReplyPort = reply;
  68973. +      rmsg->mn_Length = sizeof(*rmsg);
  68974. +      wmsg->mn_Node.ln_Type = NT_MESSAGE;
  68975. +      wmsg->mn_ReplyPort = reply;
  68976. +      wmsg->mn_Length = sizeof(*wmsg);
  68977. +      fi->reply = reply;
  68978. +      fi->rmsg = rmsg;
  68979. +      fi->wmsg = wmsg;
  68980. +      fi->rfifo = fi->wfifo = 0;
  68981. +
  68982. +      fi->flags = 0;
  68983. +      if (reader) fi->flags |= FI_READ;
  68984. +      if (writer) fi->flags |= FI_WRITE;
  68985. +      fd = _alloc_fd(fi, fi->flags, fifo_select_start, fifo_select_poll, fifo_read,
  68986. +             fifo_write, fifo_lseek, fifo_close, fifo_ioctl);
  68987. +      if (fd)
  68988. +    {
  68989. +      char *fname, sname[FIFO_NAMELEN + 2], mname[FIFO_NAMELEN + 2];
  68990. +
  68991. +      if (master) fi->flags |= FIFO_MASTER;
  68992. +      strcpy(fi->name, name);
  68993. +      /* The writer is the "master" in fifo: terms */
  68994. +      strcpy(mname, fi->name); strcat(mname, "_m");
  68995. +      strcpy(sname, fi->name); strcat(sname, "_s");
  68996. +
  68997. +      if (reader)
  68998. +        {
  68999. +          fname = !writer || !master ? mname : sname;
  69000. +          fi->rfifo = OpenFifo(fname, FIFO_BUFSIZE, FIFOF_NORMAL | FIFOF_NBIO |
  69001. +                   FIFOF_READ);
  69002. +        }
  69003. +      if (writer)
  69004. +        {
  69005. +          fname = !reader || master ? mname : sname;
  69006. +          fi->wfifo = OpenFifo(fname, FIFO_BUFSIZE, FIFOF_NORMAL | FIFOF_NBIO |
  69007. +                   FIFOF_WRITE | FIFOF_RREQUIRED);
  69008. +        }
  69009. +      if ((fi->rfifo || !reader) && (fi->wfifo || !writer))
  69010. +        {
  69011. +          if (fi->wfifo) fi->maxsend = BufSizeFifo(fi->wfifo) / 2;
  69012. +          fi->skip = 0;
  69013. +          return fd;
  69014. +        }
  69015. +      if (fi->rfifo) CloseFifo(fi->rfifo, 0);
  69016. +      if (fi->wfifo) CloseFifo(fi->wfifo, 0);
  69017. +    }
  69018. +      if (fd >= 0) _free_fd(fd);
  69019. +    }
  69020. +  if (rmsg) free(rmsg);
  69021. +  if (wmsg) free(wmsg);
  69022. +  if (reply) delete_fifo_port(reply);
  69023. +  if (fi) free(fi);
  69024. +  return -1;
  69025. +}
  69026. +
  69027. +int pipe(int fd[2])
  69028. +{
  69029. +  char name[FIFO_NAMELEN];
  69030. +  struct fileinfo *f0;
  69031. +
  69032. +  chkabort();
  69033. +  if (!_fifo_ok)
  69034. +    {
  69035. +      errno = ENXIO;
  69036. +      return -1;
  69037. +    }
  69038. +
  69039. +  _sprintf(name, "uxfifo.%lx", _fifo_base + _fifo_offset++);
  69040. +
  69041. +  if ((fd[0] = alloc_fifo(name, TRUE, FALSE, FALSE)) >= 0)
  69042. +    if ((fd[1] = alloc_fifo(name, FALSE, TRUE, FALSE)) >= 0) return 0;
  69043. +    else
  69044. +      {
  69045. +    if (f0 = _find_fd(fd[0])) free_fifo(f0->userinfo);
  69046. +    _free_fd(fd[0]);
  69047. +      }
  69048. +  return -1;
  69049. +}
  69050. +
  69051. +int socketpair(int domain, int type, int protocol, int sv[2])
  69052. +{
  69053. +  char name[FIFO_NAMELEN];
  69054. +  struct fileinfo *f0;
  69055. +
  69056. +  chkabort();
  69057. +  if (!_fifo_ok)
  69058. +    {
  69059. +      errno = ENXIO;
  69060. +      return -1;
  69061. +    }
  69062. +
  69063. +  _sprintf(name, "uxfifo.%lx", _fifo_base + _fifo_offset++);
  69064. +
  69065. +  if ((sv[0] = alloc_fifo(name, TRUE, TRUE, TRUE)) >= 0)
  69066. +    if ((sv[1] = alloc_fifo(name, TRUE, TRUE, FALSE)) >= 0) return 0;
  69067. +    else
  69068. +      {
  69069. +    if (f0 = _find_fd(sv[0])) free_fifo(f0->userinfo);
  69070. +    _free_fd(sv[0]);
  69071. +      }
  69072. +  return -1;
  69073. +}
  69074. diff -ru --new-file baseline/fsf/emacs/unixlib/src/popen.c amiga/fsf/emacs/unixlib/src/popen.c
  69075. --- baseline/fsf/emacs/unixlib/src/popen.c    Wed Dec 31 17:00:00 1969
  69076. +++ amiga/fsf/emacs/unixlib/src/popen.c    Sun Oct 15 17:17:36 1995
  69077. @@ -0,0 +1,93 @@
  69078. +#include "amiga.h"
  69079. +#include "processes.h"
  69080. +#include "fifofd.h"
  69081. +#include <amiga/ioctl.h>
  69082. +#include <exec/memory.h>
  69083. +#include <dos/dosextens.h>
  69084. +#include <dos/dostags.h>
  69085. +#include <string.h>
  69086. +
  69087. +struct pprocess
  69088. +{
  69089. +  struct pprocess *next;
  69090. +  FILE *f;
  69091. +  int pid;
  69092. +};
  69093. +
  69094. +static struct pprocess *_pplist;
  69095. +
  69096. +FILE *popen(char *command, char *type)
  69097. +{
  69098. +  FILE *pipe;
  69099. +  BPTR in, out;
  69100. +  int close_in, close_out;
  69101. +  char pname[24];
  69102. +  struct pprocess *pp = (struct pprocess *)malloc(sizeof(struct pprocess));
  69103. +
  69104. +  _sprintf(pname, "pipe:uxopen.%lx", _fifo_base + _fifo_offset++);
  69105. +
  69106. +  if (type[0] == 'w' && type[1] == '\0')
  69107. +    {
  69108. +      pipe = fopen(pname, "w");
  69109. +      out = Output(); close_out = FALSE;
  69110. +      in = Open(pname, MODE_OLDFILE); close_in = TRUE;
  69111. +    }
  69112. +  else if (type[0] == 'r' && type[1] == '\0')
  69113. +    {
  69114. +      pipe = fopen(pname, "r");
  69115. +      in = Input(); close_in = FALSE;
  69116. +      out = Open(pname, MODE_NEWFILE); close_out = TRUE;
  69117. +    }
  69118. +  else
  69119. +    {
  69120. +      errno = EINVAL;
  69121. +      return NULL;
  69122. +    }
  69123. +
  69124. +  if (!in || !out) _seterr();
  69125. +  if (pipe && in && out && pp)
  69126. +    {
  69127. +      pp->pid = _start_process(command, in, close_in, out, close_out,
  69128. +                   -1, FALSE, 0, 0);
  69129. +      
  69130. +      if (pp->pid)
  69131. +    {
  69132. +      pp->next = _pplist;
  69133. +      _pplist = pp;
  69134. +      pp->f = pipe;
  69135. +
  69136. +      return pipe;
  69137. +    }
  69138. +    }
  69139. +  if (pp) free(pp);
  69140. +  if (in && close_in) Close(in);
  69141. +  if (out && close_out) Close(out);
  69142. +  if (pipe) fclose(pipe);
  69143. +
  69144. +  return NULL;
  69145. +}
  69146. +
  69147. +int pclose(FILE *f)
  69148. +{
  69149. +  struct pprocess **scan = &_pplist;
  69150. +
  69151. +  while (*scan)
  69152. +    {
  69153. +      if ((*scan)->f == f) /* found */
  69154. +    {
  69155. +      struct pprocess *son = *scan;
  69156. +      int status;
  69157. +      int pid = son->pid;
  69158. +
  69159. +      *scan = son->next;    /* Remove process from list */
  69160. +
  69161. +      fclose(son->f);
  69162. +      free(son);
  69163. +      /* Wait for process to terminate */
  69164. +      if (waitpid(pid, &status, NULL) >= 0) return status;
  69165. +      return -1;
  69166. +    }
  69167. +      scan = &(*scan)->next;
  69168. +    }
  69169. +  return -1;
  69170. +}
  69171. diff -ru --new-file baseline/fsf/emacs/unixlib/src/processes.c amiga/fsf/emacs/unixlib/src/processes.c
  69172. --- baseline/fsf/emacs/unixlib/src/processes.c    Wed Dec 31 17:00:00 1969
  69173. +++ amiga/fsf/emacs/unixlib/src/processes.c    Sun Oct 15 17:17:38 1995
  69174. @@ -0,0 +1,56 @@
  69175. +#include "amiga.h"
  69176. +#include <clib/alib_protos.h>
  69177. +
  69178. +#include "processes.h"
  69179. +
  69180. +int _next_pid, _our_pid;
  69181. +struct MinList _processes;
  69182. +char _door_name[DOOR_LEN];
  69183. +struct MsgPort *_children_exit;
  69184. +struct MsgPort *_startup_port;
  69185. +
  69186. +void _free_entry(struct process *p)
  69187. +{
  69188. +  Remove((struct Node *)p);
  69189. +  free(p);
  69190. +}
  69191. +
  69192. +struct process *_find_pid(int pid)
  69193. +{
  69194. +  struct process *entry;
  69195. +
  69196. +  scan_processes (entry) if (entry->pid == pid) return entry;
  69197. +
  69198. +  return 0;
  69199. +}
  69200. +
  69201. +void _init_processes(void)
  69202. +{
  69203. +  NewList((struct List *)&_processes);
  69204. +  /* Choose a fairly unique pid for ourselves, but keep it within a range
  69205. +     which guarantees positive pid's for all created processes.
  69206. +     This range is further restricted to 23 bits so that a pid fits within the
  69207. +     range of an emacs number (generally 24 bits, though it is 26 on the Amiga) */
  69208. +  _our_pid = ((int)_us ^ _startup_time) & 0x7fffff;
  69209. +  _next_pid = _our_pid + 1;
  69210. +  _sprintf(_door_name, "door.%lx.%lx", _us, _startup_time);
  69211. +  if ((_startup_port = CreateMsgPort()) &&
  69212. +      (_children_exit = CreatePort(_door_name, 0))) return;
  69213. +
  69214. +  _fail("No memory");
  69215. +}
  69216. +
  69217. +void _cleanup_processes(void)
  69218. +{
  69219. +  if (_startup_port) DeleteMsgPort(_startup_port);
  69220. +  if (_children_exit)
  69221. +    {
  69222. +      struct exit_message *msg;
  69223. +
  69224. +      Forbid();
  69225. +      while (msg = (struct exit_message *)GetMsg(_children_exit))
  69226. +    FreeMem(msg, sizeof(struct exit_message));
  69227. +      DeletePort(_children_exit);
  69228. +      Permit();
  69229. +    }
  69230. +}
  69231. diff -ru --new-file baseline/fsf/emacs/unixlib/src/processes.h amiga/fsf/emacs/unixlib/src/processes.h
  69232. --- baseline/fsf/emacs/unixlib/src/processes.h    Wed Dec 31 17:00:00 1969
  69233. +++ amiga/fsf/emacs/unixlib/src/processes.h    Sun Oct 15 17:17:39 1995
  69234. @@ -0,0 +1,46 @@
  69235. +#ifndef _PROCESSES_H
  69236. +#define _PROCESSES_H_
  69237. +
  69238. +struct process
  69239. +{
  69240. +    struct MinNode node;
  69241. +    struct Task *process;
  69242. +    int pid;
  69243. +    BPTR input;
  69244. +    enum { alive, exited } status;
  69245. +    int rc;
  69246. +};
  69247. +
  69248. +struct exit_message        /* Sent by children when exiting */
  69249. +{
  69250. +  struct Message m;
  69251. +  int pid;
  69252. +  int rc;
  69253. +};
  69254. +
  69255. +extern int _next_pid, _our_pid;
  69256. +extern struct MinList _processes;
  69257. +#define DOOR_LEN 32
  69258. +extern char _door_name[DOOR_LEN];
  69259. +extern struct MsgPort *_children_exit;
  69260. +extern struct MsgPort *_startup_port;
  69261. +
  69262. +#define scan_processes(p) for (p = (struct process *)_processes.mlh_Head; \
  69263. +                   p->node.mln_Succ; \
  69264. +                   p = (struct process *)p->node.mln_Succ)
  69265. +
  69266. +#define no_processes() (_processes.mlh_Head->mln_Succ == 0)
  69267. +
  69268. +void _free_entry(struct process *p);
  69269. +struct process *_find_pid(int pid);
  69270. +void _init_processes(void);
  69271. +void _cleanup_processes(void);
  69272. +
  69273. +int _start_process(char *command,
  69274. +           BPTR input, int close_input,
  69275. +           BPTR output, int close_output,
  69276. +           BPTR error, int close_error,
  69277. +           BPTR dir,
  69278. +           long stacksize);
  69279. +
  69280. +#endif
  69281. diff -ru --new-file baseline/fsf/emacs/unixlib/src/protection.c amiga/fsf/emacs/unixlib/src/protection.c
  69282. --- baseline/fsf/emacs/unixlib/src/protection.c    Wed Dec 31 17:00:00 1969
  69283. +++ amiga/fsf/emacs/unixlib/src/protection.c    Sun Oct 15 17:17:41 1995
  69284. @@ -0,0 +1,73 @@
  69285. +#include "amiga.h"
  69286. +#include <sys/stat.h>
  69287. +
  69288. +int use_amiga_flags;
  69289. +
  69290. +int _make_protection(int mode)
  69291. +{
  69292. +  int amode;
  69293. +
  69294. +  if (use_amiga_flags) return mode;
  69295. +
  69296. +  /* We always turn archive off */
  69297. +  amode = 0;
  69298. +
  69299. +  /* Read: if any unix read */
  69300. +  if (mode & (S_IRUSR | S_IRGRP | S_IROTH)) amode |= FIBF_READ;
  69301. +
  69302. +  /* Write: if user write or group write
  69303. +     Delete: if user write or world write */
  69304. +  if (mode & S_IWUSR) amode |= FIBF_WRITE | FIBF_DELETE;
  69305. +  if (mode & S_IWGRP) amode |= FIBF_WRITE;
  69306. +  if (mode & S_IWOTH) amode |= FIBF_DELETE;
  69307. +
  69308. +  /* Execute: if group execute or user execute and not world execute
  69309. +     Script: if world execute or user execute ant not group execute */
  69310. +  if (mode & S_IXGRP) amode |= FIBF_EXECUTE;
  69311. +  if (mode & S_IXOTH) amode |= FIBF_SCRIPT;
  69312. +  if ((mode & (S_IXUSR | S_IXGRP | S_IXOTH)) == S_IXUSR)
  69313. +    amode |= FIBF_EXECUTE | FIBF_SCRIPT;
  69314. +
  69315. +  /* Pure: if sticky */
  69316. +  if (mode & S_ISVTX) amode |= FIBF_PURE;
  69317. +
  69318. +  /* Make correct bits active 0 */
  69319. +  amode ^= FIBF_READ | FIBF_WRITE | FIBF_EXECUTE | FIBF_DELETE;
  69320. +  return amode;
  69321. +}
  69322. +
  69323. +int _make_mode(int protection)
  69324. +{
  69325. +    int mode;
  69326. +
  69327. +    if (use_amiga_flags) return protection & ~S_IFMT;
  69328. +
  69329. +    mode = 0;
  69330. +    /* make all bits active 1 */
  69331. +    protection ^= FIBF_READ | FIBF_WRITE | FIBF_EXECUTE | FIBF_DELETE;
  69332. +
  69333. +    /* Read user, group, world if amiga read */
  69334. +    if (protection & FIBF_READ) mode |= S_IRUSR | S_IRGRP | S_IROTH;
  69335. +
  69336. +    /* Write:
  69337. +         user if amiga write & delete
  69338. +     group if amiga write
  69339. +     other if amiga delete */
  69340. +    if ((protection & (FIBF_WRITE | FIBF_DELETE)) == (FIBF_WRITE | FIBF_DELETE))
  69341. +      mode |= S_IWUSR;
  69342. +    if (protection & FIBF_WRITE) mode |= S_IWGRP;
  69343. +    if (protection & FIBF_DELETE) mode |= S_IWOTH;
  69344. +
  69345. +    /* Execute:
  69346. +         user if amiga execute or script
  69347. +     group if amiga execute
  69348. +     world if amiga script */
  69349. +    if (protection & (FIBF_EXECUTE | FIBF_SCRIPT)) mode |= S_IXUSR;
  69350. +    if (protection & FIBF_EXECUTE) mode |= S_IXGRP;
  69351. +    if (protection & FIBF_SCRIPT) mode |= S_IXOTH;
  69352. +
  69353. +    /* Sticky: if pure */
  69354. +    if (protection & FIBF_PURE) mode |= S_ISVTX;
  69355. +
  69356. +    return mode;
  69357. +}
  69358. diff -ru --new-file baseline/fsf/emacs/unixlib/src/pseudo_c.c amiga/fsf/emacs/unixlib/src/pseudo_c.c
  69359. --- baseline/fsf/emacs/unixlib/src/pseudo_c.c    Wed Dec 31 17:00:00 1969
  69360. +++ amiga/fsf/emacs/unixlib/src/pseudo_c.c    Sun Oct 15 17:17:42 1995
  69361. @@ -0,0 +1,18 @@
  69362. +#include "amiga.h"
  69363. +#include "files.h"
  69364. +#include <fcntl.h>
  69365. +
  69366. +int _pseudo_close(int fd)
  69367. +{
  69368. +  struct fileinfo *fi;
  69369. +
  69370. +  chkabort();
  69371. +  if (fi = _find_fd(fd))
  69372. +    {
  69373. +      int err = fi->close(fi->userinfo, TRUE);
  69374. +
  69375. +      _free_fd(fd);
  69376. +      return err;
  69377. +    }
  69378. +  return -1;
  69379. +}
  69380. diff -ru --new-file baseline/fsf/emacs/unixlib/src/pwd.c amiga/fsf/emacs/unixlib/src/pwd.c
  69381. --- baseline/fsf/emacs/unixlib/src/pwd.c    Wed Dec 31 17:00:00 1969
  69382. +++ amiga/fsf/emacs/unixlib/src/pwd.c    Sun Oct 15 17:17:44 1995
  69383. @@ -0,0 +1,13 @@
  69384. +#include "amiga.h"
  69385. +#include <pwd.h>
  69386. +
  69387. +struct passwd _amiga_user = {
  69388. +  NULL, "",
  69389. +  AMIGA_UID, AMIGA_GID,
  69390. +  0, "", NULL,
  69391. +  NULL, NULL
  69392. +  };
  69393. +
  69394. +struct passwd *getpwuid(uid_t uid) { return &_amiga_user; }
  69395. +struct passwd *getpwnam(char *name) { return &_amiga_user; }
  69396. +char *getlogin(void) { return _amiga_user.pw_name; }
  69397. diff -ru --new-file baseline/fsf/emacs/unixlib/src/read.c amiga/fsf/emacs/unixlib/src/read.c
  69398. --- baseline/fsf/emacs/unixlib/src/read.c    Wed Dec 31 17:00:00 1969
  69399. +++ amiga/fsf/emacs/unixlib/src/read.c    Sun Oct 15 17:17:46 1995
  69400. @@ -0,0 +1,24 @@
  69401. +#include "amiga.h"
  69402. +#include "files.h"
  69403. +#include <fcntl.h>
  69404. +
  69405. +#undef read
  69406. +
  69407. +int __read(int fd, void *buffer, unsigned int length)
  69408. +{
  69409. +  struct fileinfo *fi;
  69410. +
  69411. +  chkabort();
  69412. +  if (fi = _find_fd(fd))
  69413. +    {
  69414. +      if (fi->flags & FI_READ) return fi->read(fi->userinfo, buffer, length);
  69415. +      errno = EACCES;
  69416. +    }
  69417. +  return -1;
  69418. +}
  69419. +
  69420. +int read(int fd, void *buffer, unsigned int length)
  69421. +{
  69422. +  return __read(fd, buffer, length);
  69423. +}
  69424. +
  69425. diff -ru --new-file baseline/fsf/emacs/unixlib/src/readlink.c amiga/fsf/emacs/unixlib/src/readlink.c
  69426. --- baseline/fsf/emacs/unixlib/src/readlink.c    Wed Dec 31 17:00:00 1969
  69427. +++ amiga/fsf/emacs/unixlib/src/readlink.c    Sun Oct 15 17:17:48 1995
  69428. @@ -0,0 +1,38 @@
  69429. +#include "amiga.h"
  69430. +#include <string.h>
  69431. +
  69432. +int readlink(char *path, char *buf, int bufsiz)
  69433. +{
  69434. +  struct DevProc *dev = NULL;
  69435. +
  69436. +  chkabort();
  69437. +
  69438. +  while (1)
  69439. +    {
  69440. +      struct DevProc *newdev = GetDeviceProc(path, dev);
  69441. +      long err;
  69442. +      
  69443. +      FreeDeviceProc(dev);
  69444. +      if (!(dev = newdev)) ERROR;
  69445. +
  69446. +      buf[0] = '\0';
  69447. +      if (ReadLink(dev->dvp_Port, dev->dvp_Lock, path, buf, bufsiz + 1))
  69448. +    {
  69449. +      FreeDeviceProc(dev);
  69450. +      if (!buf[0])
  69451. +        {
  69452. +          /* Play games with apparent 2.x ram: bug */
  69453. +          errno = ENOENT;
  69454. +          return -1;
  69455. +        }
  69456. +      return strlen(buf);
  69457. +    }
  69458. +      err = IoErr();
  69459. +      if (!(err == ERROR_OBJECT_NOT_FOUND && (dev->dvp_Flags & DVPF_ASSIGN)))
  69460. +    {
  69461. +      FreeDeviceProc(dev);
  69462. +      errno = convert_oserr(err);
  69463. +      return -1;
  69464. +    }
  69465. +    }
  69466. +}
  69467. diff -ru --new-file baseline/fsf/emacs/unixlib/src/rename.c amiga/fsf/emacs/unixlib/src/rename.c
  69468. --- baseline/fsf/emacs/unixlib/src/rename.c    Wed Dec 31 17:00:00 1969
  69469. +++ amiga/fsf/emacs/unixlib/src/rename.c    Sun Oct 15 17:17:49 1995
  69470. @@ -0,0 +1,24 @@
  69471. +#include "amiga.h"
  69472. +
  69473. +int rename(const char *from, const char *to)
  69474. +{
  69475. +  long err;
  69476. +
  69477. +  chkabort();
  69478. +  if (Rename(from, to)) return 0;
  69479. +  err = IoErr();
  69480. +  if (err == ERROR_OBJECT_EXISTS)
  69481. +    {
  69482. +      if (DeleteFile(to) && Rename(from, to)) return 0;
  69483. +      err = IoErr();
  69484. +
  69485. +      if (err == ERROR_DELETE_PROTECTED)
  69486. +    {
  69487. +      if (SetProtection(to, 0) && DeleteFile(to) && Rename(from, to))
  69488. +        return 0;
  69489. +      err = IoErr();
  69490. +    }
  69491. +    }
  69492. +  errno = convert_oserr(err);
  69493. +  return -1;
  69494. +}
  69495. diff -ru --new-file baseline/fsf/emacs/unixlib/src/rindex.c amiga/fsf/emacs/unixlib/src/rindex.c
  69496. --- baseline/fsf/emacs/unixlib/src/rindex.c    Wed Dec 31 17:00:00 1969
  69497. +++ amiga/fsf/emacs/unixlib/src/rindex.c    Sun Oct 15 17:17:51 1995
  69498. @@ -0,0 +1,8 @@
  69499. +#include <string.h>
  69500. +
  69501. +#undef rindex
  69502. +
  69503. +char *rindex(char *str, int c)
  69504. +{
  69505. +  return strrchr(str, c);
  69506. +}
  69507. diff -ru --new-file baseline/fsf/emacs/unixlib/src/rmdir.c amiga/fsf/emacs/unixlib/src/rmdir.c
  69508. --- baseline/fsf/emacs/unixlib/src/rmdir.c    Wed Dec 31 17:00:00 1969
  69509. +++ amiga/fsf/emacs/unixlib/src/rmdir.c    Sun Oct 15 17:17:53 1995
  69510. @@ -0,0 +1,31 @@
  69511. +#include "amiga.h"
  69512. +#include <utility/tagitem.h>
  69513. +
  69514. +int rmdir(char *name)
  69515. +{
  69516. +  struct FileInfoBlock *fib = 0;
  69517. +  BPTR lock = 0;
  69518. +
  69519. +  if ((fib = AllocDosObjectTags(DOS_FIB, TAG_END)) &&
  69520. +      (lock = Lock(name, ACCESS_READ)) &&
  69521. +      Examine(lock, fib))
  69522. +    {
  69523. +      int isdir = fib->fib_DirEntryType > 0;
  69524. +
  69525. +      UnLock(lock);
  69526. +      FreeDosObject(DOS_FIB, fib);
  69527. +
  69528. +      if (isdir)
  69529. +    {
  69530. +      if (DeleteFile(name)) return 0;
  69531. +      ERROR;
  69532. +    }
  69533. +      errno = ENOTDIR;
  69534. +      return -1;
  69535. +    }
  69536. +  errno = convert_oserr(IoErr());
  69537. +
  69538. +  if (lock) UnLock(lock);
  69539. +  if (fib) FreeDosObject(DOS_FIB, fib);
  69540. +  return -1;
  69541. +}
  69542. diff -ru --new-file baseline/fsf/emacs/unixlib/src/select.c amiga/fsf/emacs/unixlib/src/select.c
  69543. --- baseline/fsf/emacs/unixlib/src/select.c    Wed Dec 31 17:00:00 1969
  69544. +++ amiga/fsf/emacs/unixlib/src/select.c    Sun Oct 15 17:17:55 1995
  69545. @@ -0,0 +1,72 @@
  69546. +#include "amiga.h"
  69547. +#include "files.h"
  69548. +#include "signals.h"
  69549. +#include "timers.h"
  69550. +#include <sys/time.h>
  69551. +
  69552. +int select(int nfds, int *rfds, int *wfds, int *efds, struct timeval *timeout)
  69553. +{
  69554. +  int fdmask, i, fdcount;
  69555. +  int poll = timeout && timeout->tv_sec == 0 && timeout->tv_usec == 0;
  69556. +  ULONG eventmask, sigs;
  69557. +  int orfds = rfds ? *rfds : 0, owfds = wfds ? *wfds : 0, oefds = efds ? *efds : 0;
  69558. +  
  69559. +  for (i = 0, fdmask = 1; i < nfds; i++, fdmask <<= 1)
  69560. +    {
  69561. +      int rd = orfds & fdmask, wr = owfds & fdmask;
  69562. +
  69563. +  chkabort();
  69564. +      if (rd || wr)
  69565. +    {
  69566. +      struct fileinfo *fi = _find_fd(i);
  69567. +
  69568. +      if (!fi) return -1;
  69569. +      if (rd && !(fi->flags & FI_READ) || wr && !(fi->flags & FI_WRITE))
  69570. +        {
  69571. +          errno = EACCES;
  69572. +          return -1;
  69573. +        }
  69574. +    }
  69575. +    }
  69576. +
  69577. +  if (timeout) _timer_start(_odd_timer, timeout->tv_sec, timeout->tv_usec);
  69578. +  else _timer_abort(_odd_timer);
  69579. +  fdcount = 0;
  69580. +  do
  69581. +    {
  69582. +      eventmask = 0;
  69583. +      for (i = 0, fdmask = 1; i < nfds; i++, fdmask <<= 1)
  69584. +    {
  69585. +      int rd = orfds & fdmask, wr = owfds & fdmask;
  69586. +
  69587. +      if (rd || wr)
  69588. +        {
  69589. +          struct fileinfo *fi = _find_fd(i);
  69590. +
  69591. +          eventmask |= fi->select_start(fi->userinfo, rd, wr);
  69592. +        }
  69593. +    }
  69594. +
  69595. +      if (eventmask == -1 || poll) /* Don't wait */ sigs = _check_signals(0);
  69596. +      else /* Wait*/ sigs = _wait_signals(_odd_sig | eventmask);
  69597. +
  69598. +      for (i = 0, fdmask = 1; i < nfds; i++, fdmask <<= 1)
  69599. +    {
  69600. +      int rd = orfds & fdmask, wr = owfds & fdmask;
  69601. +
  69602. +      if (rd || wr)
  69603. +        {
  69604. +          struct fileinfo *fi = _find_fd(i);
  69605. +
  69606. +          fi->select_poll(fi->userinfo, &rd, &wr);
  69607. +          if (!rd && rfds) *rfds &= ~fdmask;
  69608. +          if (!wr && wfds) *wfds &= ~fdmask;
  69609. +          if (rd || wr) fdcount++;
  69610. +        }
  69611. +    }
  69612. +      _handle_signals(sigs);
  69613. +    }
  69614. +  while (fdcount == 0 && !_timer_expired(_odd_timer) && !poll);
  69615. +
  69616. +  return fdcount;
  69617. +}
  69618. diff -ru --new-file baseline/fsf/emacs/unixlib/src/setjmp.c amiga/fsf/emacs/unixlib/src/setjmp.c
  69619. --- baseline/fsf/emacs/unixlib/src/setjmp.c    Wed Dec 31 17:00:00 1969
  69620. +++ amiga/fsf/emacs/unixlib/src/setjmp.c    Sun Oct 15 17:17:56 1995
  69621. @@ -0,0 +1,15 @@
  69622. +#include "amiga.h"
  69623. +#include "signals.h"
  69624. +#include <setjmp.h>
  69625. +
  69626. +int setjmp(jmp_buf jb)
  69627. +{
  69628. +  jb[0] = _sig_mask;
  69629. +  return _setjmp(jb + 1);
  69630. +}
  69631. +
  69632. +void longjmp(jmp_buf jb, int val)
  69633. +{
  69634. +  sigsetmask(jb[0]);
  69635. +  _longjmp(jb + 1, val);
  69636. +}
  69637. diff -ru --new-file baseline/fsf/emacs/unixlib/src/siglist.c amiga/fsf/emacs/unixlib/src/siglist.c
  69638. --- baseline/fsf/emacs/unixlib/src/siglist.c    Wed Dec 31 17:00:00 1969
  69639. +++ amiga/fsf/emacs/unixlib/src/siglist.c    Sun Oct 15 17:17:58 1995
  69640. @@ -0,0 +1,35 @@
  69641. +char *sys_siglist[] =
  69642. +{
  69643. +    "no signal",
  69644. +    "hangup",
  69645. +    "interrupt",
  69646. +    "quit",
  69647. +    "illegal instruction",
  69648. +    "trace trap",
  69649. +    "abort",
  69650. +    "emt instruction",
  69651. +    "floating point exception",
  69652. +    "kill",
  69653. +    "bus error",
  69654. +    "segmentation violation",
  69655. +    "bad argument to system call",
  69656. +    "write on a pipe with no one to read it",
  69657. +    "alarm clock",
  69658. +    "software termination signal from kill",
  69659. +    "status signal",
  69660. +    "sendable stop signal not from tty",
  69661. +    "stop signal from tty",
  69662. +    "continue a stopped process",
  69663. +    "child status has changed",
  69664. +    "background read attempted from control tty",
  69665. +    "background write attempted from control tty",
  69666. +    "input record available at control tty",
  69667. +    "exceeded CPU time limit",
  69668. +    "exceeded file size limit",
  69669. +    "unknown signal",
  69670. +    "unknown signal",
  69671. +    "window changed",
  69672. +    "unknown signal",
  69673. +    "user signal 1",
  69674. +    "user signal 2",
  69675. +};
  69676. diff -ru --new-file baseline/fsf/emacs/unixlib/src/signal.c amiga/fsf/emacs/unixlib/src/signal.c
  69677. --- baseline/fsf/emacs/unixlib/src/signal.c    Wed Dec 31 17:00:00 1969
  69678. +++ amiga/fsf/emacs/unixlib/src/signal.c    Sun Oct 15 17:18:00 1995
  69679. @@ -0,0 +1,26 @@
  69680. +#include "amiga.h"
  69681. +#include "signals.h"
  69682. +
  69683. +int sigvec(int sig, struct sigvec *vec, struct sigvec *ovec)
  69684. +{
  69685. +  chkabort();
  69686. +  if (sig >= 1 && sig < NSIG)
  69687. +    {
  69688. +      if (ovec) *ovec = _sig_handlers[sig];
  69689. +      if (vec) _sig_handlers[sig] = *vec;
  69690. +      return 0;
  69691. +    }
  69692. +  errno = EINVAL;
  69693. +  return -1;
  69694. +}
  69695. +
  69696. +void (*signal(int sig,void (*fn)(int)))(int)
  69697. +{
  69698. +  struct sigvec vec, ovec;
  69699. +
  69700. +  vec.sv_handler = fn;
  69701. +  vec.sv_mask = 0;
  69702. +  /*vec.sv_flags = 0;*/
  69703. +  if (sigvec(sig, &vec, &ovec)) return -1;
  69704. +  return ovec.sv_handler;
  69705. +}
  69706. diff -ru --new-file baseline/fsf/emacs/unixlib/src/signals.c amiga/fsf/emacs/unixlib/src/signals.c
  69707. --- baseline/fsf/emacs/unixlib/src/signals.c    Wed Dec 31 17:00:00 1969
  69708. +++ amiga/fsf/emacs/unixlib/src/signals.c    Sun Oct 15 17:18:01 1995
  69709. @@ -0,0 +1,211 @@
  69710. +#include "amiga.h"
  69711. +#include "timers.h"
  69712. +#include "signals.h"
  69713. +#include "processes.h"
  69714. +
  69715. +static ULONG signalsigs;    /* When one of these occur, call handle_signals */
  69716. +struct sigvec _sig_handlers[NSIG];
  69717. +long _sig_mask, _sig_pending;
  69718. +
  69719. +/* Alarm signal */
  69720. +/* ------------ */
  69721. +
  69722. +static struct timeinfo *alarm_timer;
  69723. +
  69724. +static int check_alarm(ULONG sigs)
  69725. +{
  69726. +  return alarm_timer && _timer_expired(alarm_timer);
  69727. +}
  69728. +
  69729. +void alarm(int secs)
  69730. +/* Effect: Schedule a SIGALRM after secs seconds
  69731. +*/
  69732. +{
  69733. +  _timer_start(alarm_timer, secs, 0);
  69734. +}
  69735. +
  69736. +static void init_alarm(void)
  69737. +{
  69738. +  if (!(alarm_timer = _alloc_timer())) _fail("Failed to create timer");
  69739. +  signalsigs |= _timer_sig(alarm_timer);
  69740. +}
  69741. +
  69742. +static void cleanup_alarm(void)
  69743. +{
  69744. +  _free_timer(alarm_timer);
  69745. +}
  69746. +
  69747. +/* SIGINT definition */
  69748. +/* ----------------- */
  69749. +
  69750. +static void init_sigint(void)
  69751. +{
  69752. +  signalsigs |= SIGBREAKF_CTRL_C;
  69753. +}
  69754. +
  69755. +/*static void cleanup_sigint(void) { }*/
  69756. +
  69757. +static int check_sigint(ULONG sigs)
  69758. +{
  69759. +  return (sigs & SIGBREAKF_CTRL_C) != 0;
  69760. +}
  69761. +
  69762. +/* SIGQUIT definition */
  69763. +/* ------------------ */
  69764. +
  69765. +static void init_sigquit(void)
  69766. +{
  69767. +  signalsigs |= SIGBREAKF_CTRL_D;
  69768. +}
  69769. +
  69770. +/*static void cleanup_sigquit(void) { }*/
  69771. +
  69772. +static int check_sigquit(ULONG sigs)
  69773. +{
  69774. +  return (sigs & SIGBREAKF_CTRL_D) != 0;
  69775. +}
  69776. +
  69777. +/* SIGCHLD definition */
  69778. +/* ------------------ */
  69779. +
  69780. +static void init_children(void)
  69781. +{
  69782. +  _init_processes();
  69783. +  signalsigs |= 1L << _children_exit->mp_SigBit;
  69784. +}
  69785. +
  69786. +static void cleanup_children(void)
  69787. +{
  69788. +  _cleanup_processes();
  69789. +}
  69790. +
  69791. +static int check_children(ULONG sigs)
  69792. +{
  69793. +  struct exit_message *msg;
  69794. +  int change = FALSE;
  69795. +  
  69796. +  while (msg = (struct exit_message *)GetMsg(_children_exit))
  69797. +    {
  69798. +      struct process *p;
  69799. +
  69800. +      if ((p = _find_pid(msg->pid)) && p->status == alive)
  69801. +    {
  69802. +      change = TRUE;
  69803. +      p->status = exited;
  69804. +      p->rc = msg->rc;
  69805. +    }
  69806. +      FreeMem(msg, sizeof(struct exit_message));
  69807. +    }
  69808. +  return change;
  69809. +}
  69810. +
  69811. +/* Signal dispatching */
  69812. +/* ------------------ */
  69813. +
  69814. +void _sig_dispatch(int sig)
  69815. +/* Effect: Do the action associated with signal sig it it isn't masked
  69816. +     Mask it for the duration of the signal exec
  69817. +*/
  69818. +{
  69819. +  void (*fn)(int);
  69820. +  long smask = 1 << sig;
  69821. +
  69822. +  if (sig == SIGKILL) _exit(0);
  69823. +
  69824. +  if (_sig_mask & smask) _sig_pending |= smask;
  69825. +  else
  69826. +    do
  69827. +      {
  69828. +    _sig_pending &= ~smask;
  69829. +    if (sig >= 0 && sig < NSIG)
  69830. +      {
  69831. +        fn = _sig_handlers[sig].sv_handler;
  69832. +
  69833. +        if (fn == SIG_DFL)
  69834. +          switch (sig)
  69835. +        {
  69836. +        case SIGCHLD: case SIGURG: case SIGWINCH: break;
  69837. +        case SIGINT: case SIGQUIT: _message("user interrupt");
  69838. +        default: _exit(0);
  69839. +        }
  69840. +        else if (fn != SIG_IGN)
  69841. +          {
  69842. +        int mask = smask | _sig_handlers[sig].sv_mask;
  69843. +
  69844. +        _sig_mask |= mask;
  69845. +        fn(sig);
  69846. +        _sig_mask &= ~mask;
  69847. +          }
  69848. +      }
  69849. +      }
  69850. +    while (_sig_pending & smask); /* Signal may have been generated during the
  69851. +                     signal handling function. */
  69852. +}
  69853. +
  69854. +ULONG _check_signals(ULONG extra_sigs)
  69855. +{
  69856. +  return SetSignal(0, signalsigs | extra_sigs);
  69857. +}
  69858. +
  69859. +ULONG _wait_signals(ULONG extra_sigs)
  69860. +{
  69861. +  return Wait(signalsigs | extra_sigs);
  69862. +}
  69863. +
  69864. +int _handle_signals(ULONG sigs)
  69865. +{
  69866. +  int signaled = 0;
  69867. +
  69868. +  if (check_alarm(sigs)) { signaled = 1; _sig_dispatch(SIGALRM); }
  69869. +  if (check_sigint(sigs)) { signaled = 1; _sig_dispatch(SIGINT); }
  69870. +  if (check_sigquit(sigs)) { signaled = 1; _sig_dispatch(SIGQUIT); }
  69871. +  if (check_children(sigs)) { signaled = 1; _sig_dispatch(SIGCHLD); }
  69872. +
  69873. +  return signaled;
  69874. +}
  69875. +
  69876. +/* Patch into SAS signal stuff so as to replace it */
  69877. +
  69878. +void CXFERR(int code)
  69879. +{
  69880. +    extern int _FPERR;
  69881. +
  69882. +    _FPERR = code;
  69883. +    _sig_dispatch(SIGFPE);
  69884. +}
  69885. +
  69886. +void chkabort(void)
  69887. +/* Checks all signals */
  69888. +{
  69889. +  _handle_signals(_check_signals(0));
  69890. +}
  69891. +
  69892. +void Chk_Abort(void) { chkabort(); }
  69893. +
  69894. +/* Initialisation */
  69895. +/* -------------- */
  69896. +
  69897. +void _init_signals(void)
  69898. +{
  69899. +  int i;
  69900. +
  69901. +  for (i = 0; i < NSIG; i++)
  69902. +    {
  69903. +      _sig_handlers[i].sv_handler = SIG_DFL;
  69904. +      _sig_handlers[i].sv_mask = 0;
  69905. +      /*_sig_handlers[i].sv_flags = 0;*/
  69906. +    }
  69907. +      
  69908. +  _sig_mask = _sig_pending = 0;
  69909. +  signalsigs = 0;
  69910. +
  69911. +  init_sigint(); init_sigquit(); init_alarm(); init_children();
  69912. +}
  69913. +
  69914. +void _cleanup_signals(void)
  69915. +{
  69916. +  cleanup_alarm();
  69917. +  /*cleanup_sigquit();*/
  69918. +  /*cleanup_sigint();*/
  69919. +  cleanup_children();
  69920. +}
  69921. diff -ru --new-file baseline/fsf/emacs/unixlib/src/signals.h amiga/fsf/emacs/unixlib/src/signals.h
  69922. --- baseline/fsf/emacs/unixlib/src/signals.h    Wed Dec 31 17:00:00 1969
  69923. +++ amiga/fsf/emacs/unixlib/src/signals.h    Sun Oct 15 17:18:03 1995
  69924. @@ -0,0 +1,21 @@
  69925. +#ifndef SIGNALS_H
  69926. +#define SIGNALS_H
  69927. +
  69928. +#include <signal.h>
  69929. +
  69930. +extern struct sigvec _sig_handlers[NSIG];
  69931. +extern long _sig_mask, _sig_pending;
  69932. +
  69933. +void _sig_dispatch(int sig);
  69934. +/* Effect: Do the action associated with signal sig it it isn't masked
  69935. +     Mask it for the duration of the signal exec
  69936. +*/
  69937. +
  69938. +ULONG _check_signals(ULONG extra_sigs);
  69939. +ULONG _wait_signals(ULONG extra_sigs);
  69940. +int _handle_signals(ULONG sigs);
  69941. +
  69942. +void _init_signals(void);
  69943. +void _cleanup_signals(void);
  69944. +
  69945. +#endif
  69946. diff -ru --new-file baseline/fsf/emacs/unixlib/src/sigpause.c amiga/fsf/emacs/unixlib/src/sigpause.c
  69947. --- baseline/fsf/emacs/unixlib/src/sigpause.c    Wed Dec 31 17:00:00 1969
  69948. +++ amiga/fsf/emacs/unixlib/src/sigpause.c    Sun Oct 15 17:18:05 1995
  69949. @@ -0,0 +1,16 @@
  69950. +#include "amiga.h"
  69951. +#include "signals.h"
  69952. +
  69953. +int sigpause(long mask)
  69954. +{
  69955. +  long oldmask = sigsetmask(mask);
  69956. +  ULONG sigs;
  69957. +
  69958. +  sigs = _check_signals(0);
  69959. +  while (!_handle_signals(sigs)) sigs = _wait_signals(0);
  69960. +  
  69961. +  sigsetmask(oldmask);
  69962. +
  69963. +  errno = EINTR;
  69964. +  return -1;
  69965. +}
  69966. diff -ru --new-file baseline/fsf/emacs/unixlib/src/sigsetmask.c amiga/fsf/emacs/unixlib/src/sigsetmask.c
  69967. --- baseline/fsf/emacs/unixlib/src/sigsetmask.c    Wed Dec 31 17:00:00 1969
  69968. +++ amiga/fsf/emacs/unixlib/src/sigsetmask.c    Sun Oct 15 17:18:07 1995
  69969. @@ -0,0 +1,22 @@
  69970. +#include "amiga.h"
  69971. +#include "signals.h"
  69972. +
  69973. +long sigsetmask(long mask)
  69974. +{
  69975. +  int oldmask = _sig_mask, i, imask;
  69976. +
  69977. +  chkabort();
  69978. +  _sig_mask = mask;
  69979. +
  69980. +  /* Check all pending signals */
  69981. +  for (i = 0, imask = 1; i < NSIG; i++, imask <<= 1)
  69982. +    if ((_sig_pending & imask) && !(_sig_mask & imask))
  69983. +      _sig_dispatch(i);
  69984. +
  69985. +  return oldmask;
  69986. +}
  69987. +
  69988. +long sigblock(long mask)
  69989. +{
  69990. +  return sigsetmask(_sig_mask | mask);
  69991. +}
  69992. diff -ru --new-file baseline/fsf/emacs/unixlib/src/sleep.c amiga/fsf/emacs/unixlib/src/sleep.c
  69993. --- baseline/fsf/emacs/unixlib/src/sleep.c    Wed Dec 31 17:00:00 1969
  69994. +++ amiga/fsf/emacs/unixlib/src/sleep.c    Sun Oct 15 17:18:09 1995
  69995. @@ -0,0 +1,13 @@
  69996. +#include "amiga.h"
  69997. +#include "timers.h"
  69998. +#include "signals.h"
  69999. +
  70000. +int sleep(unsigned seconds)
  70001. +{
  70002. +  chkabort();
  70003. +  _timer_start(_odd_timer, seconds, 0);
  70004. +
  70005. +  while (!_timer_expired(_odd_timer)) _handle_signals(_wait_signals(_odd_sig));
  70006. +
  70007. +  return 0;
  70008. +}
  70009. diff -ru --new-file baseline/fsf/emacs/unixlib/src/smakefile amiga/fsf/emacs/unixlib/src/smakefile
  70010. --- baseline/fsf/emacs/unixlib/src/smakefile    Wed Dec 31 17:00:00 1969
  70011. +++ amiga/fsf/emacs/unixlib/src/smakefile    Sun Oct 15 17:18:10 1995
  70012. @@ -0,0 +1,128 @@
  70013. +OBJS=  mkdir.o devices.o processes.o kill.o abort.o error.o error_msg.o \
  70014. +       fcntl.o select.o read.o lseek.o chmod.o getwd.o mktemp.o link.o \
  70015. +       getenv.o time.o write.o creat.o sleep.o uid.o exec.o truncate.o \
  70016. +       strftime.o rmdir.o sigpause.o isatty.o mkfifo.o fchmod.o ftruncate.o \
  70017. +       bzero.o fibstat.o bcmp.o chown.o rename.o amigados.o ctime.o open.o \
  70018. +       ioctl.o _exit.o gid.o protection.o umask.o _main.o signals.o grp.o \
  70019. +       pipe.o unlink.o alloca.o readlink.o pwd.o timeconvert.o amigatime.o \
  70020. +       bcopy.o utime.o files.o close.o fifofd.o timers.o index.o rindex.o \
  70021. +       pseudo_c.o wait4.o siglist.o perror.o gethostname.o setjmp.o allocdos.o \
  70022. +       message.o symlink.o fstat.o access.o dir_data.o dir.o stat.o \
  70023. +       sigsetmask.o signal.o getpid.o start.o popen.o tmpnam.o
  70024. +
  70025. +DEFS = define=SOFTLINK
  70026. +OPTIMIZE = opt
  70027. +CFLAGS = $(OPTS) $(DEFS) gst=amiga.sym $(OPTIMIZE)
  70028. +
  70029. +all: amiga.sym unix.lib unix-hard.lib
  70030. +
  70031. +ALLOBJS = $(OBJS) sprintf.o _setjmp.o
  70032. +
  70033. +unix.lib: $(ALLOBJS)
  70034. +    -delete unix.lib ram:unix.lib
  70035. +    oml ram:unix.lib <@<
  70036. +r $(ALLOBJS)
  70037. +<
  70038. +    copy ram:unix.lib ""
  70039. +
  70040. +unix-hard.lib: unix.lib fibstat-hard.o
  70041. +    copy unix.lib ram:
  70042. +    oml ram:unix.lib d fibstat.c
  70043. +    oml ram:unix.lib r fibstat-hard.o
  70044. +    copy ram:unix.lib unix-hard.lib
  70045. +
  70046. +sprintf.o: sprintf.asm
  70047. +    asm -osprintf.o -iINCLUDE: sprintf.asm
  70048. +
  70049. +_setjmp.o: _setjmp.asm
  70050. +    asm -o_setjmp.o -iINCLUDE: _setjmp.asm
  70051. +
  70052. +amiga.sym: amiga.h
  70053. +    copy amiga.h am.c
  70054. +    sc makegst=amiga.sym $(OPTS) am.c
  70055. +    delete am.c
  70056. +
  70057. +fibstat-hard.o: fibstat.c
  70058. +    $(CC) $(CFLAGS) DEF PRETEND_LINKED objname $@ fibstat.c
  70059. +
  70060. +mkdir.o: mkdir.c amiga.h
  70061. +devices.o: devices.c amiga.h
  70062. +processes.o: processes.c processes.h amiga.h
  70063. +kill.o: kill.c processes.h signals.h amiga.h
  70064. +abort.o: abort.c amiga.h
  70065. +error.o: error.c amiga.h
  70066. +error_msg.o: error_msg.c amiga.h
  70067. +fcntl.o: fcntl.c amiga.h
  70068. +select.o: select.c signals.h amiga.h
  70069. +read.o: read.c amiga.h
  70070. +lseek.o: lseek.c amiga.h
  70071. +chmod.o: chmod.c amiga.h
  70072. +getwd.o: getwd.c amiga.h
  70073. +mktemp.o: mktemp.c amiga.h
  70074. +link.o: link.c amiga.h
  70075. +getenv.o: getenv.c amiga.h
  70076. +time.o: time.c timeconvert.h amiga.h
  70077. +write.o: write.c amiga.h
  70078. +creat.o: creat.c amiga.h
  70079. +sleep.o: sleep.c signals.h amiga.h
  70080. +uid.o: uid.c amiga.h
  70081. +exec.o: exec.c processes.h amiga.h
  70082. +truncate.o: truncate.c amigados.h amiga.h
  70083. +strftime.o: strftime.c
  70084. +rmdir.o: rmdir.c amiga.h
  70085. +sigpause.o: sigpause.c signals.h amiga.h
  70086. +isatty.o: isatty.c amiga.h
  70087. +mkfifo.o: mkfifo.c amiga.h
  70088. +fchmod.o: fchmod.c amiga.h
  70089. +ftruncate.o: ftruncate.c amiga.h
  70090. +bzero.o: bzero.c amiga.h
  70091. +fibstat.o: fibstat.c timeconvert.h fibstat.h amiga.h
  70092. +bcmp.o: bcmp.c amiga.h
  70093. +chown.o: chown.c amiga.h
  70094. +rename.o: rename.c amiga.h
  70095. +amigados.o: amigados.c signals.h amiga.h
  70096. +ctime.o: ctime.c
  70097. +open.o: open.c amigados.h amiga.h
  70098. +ioctl.o: ioctl.c amiga.h
  70099. +_exit.o: _exit.c fifo_pragmas.h fifo.h fifofd.h signals.h amiga.h
  70100. +gid.o: gid.c amiga.h
  70101. +protection.o: protection.c amiga.h
  70102. +umask.o: umask.c amiga.h
  70103. +_main.o: _main.c fifo_pragmas.h fifo.h amigados.h fifofd.h signals.h amiga.h
  70104. +signals.o: signals.c processes.h signals.h amiga.h
  70105. +grp.o: grp.c amiga.h
  70106. +pipe.o: pipe.c fifo_pragmas.h fifo.h fifofd.h signals.h amiga.h
  70107. +unlink.o: unlink.c amiga.h
  70108. +alloca.o: alloca.c
  70109. +readlink.o: readlink.c amiga.h
  70110. +pwd.o: pwd.c amiga.h
  70111. +timeconvert.o: timeconvert.c timeconvert.h amiga.h
  70112. +amigatime.o: amigatime.c timeconvert.h amiga.h
  70113. +bcopy.o: bcopy.c amiga.h
  70114. +utime.o: utime.c timeconvert.h amiga.h
  70115. +files.o: files.c amiga.h
  70116. +close.o: close.c amiga.h
  70117. +fifofd.o: fifofd.c fifo_pragmas.h fifo.h fifofd.h amiga.h
  70118. +timers.o: timers.c amiga.h
  70119. +index.o: index.c
  70120. +rindex.o: rindex.c
  70121. +pseudo_c.o: pseudo_c.c amiga.h
  70122. +wait4.o: wait4.c processes.h signals.h amiga.h
  70123. +siglist.o: siglist.c
  70124. +perror.o: perror.c amiga.h
  70125. +gethostname.o: gethostname.c amiga.h
  70126. +setjmp.o: setjmp.c signals.h amiga.h
  70127. +allocdos.o: allocdos.c
  70128. +message.o: message.c amiga.h
  70129. +symlink.o: symlink.c amiga.h
  70130. +fstat.o: fstat.c fibstat.h amiga.h
  70131. +access.o: access.c fibstat.h amiga.h
  70132. +dir_data.o: dir_data.c dir_data.h amiga.h
  70133. +dir.o: dir.c dir_data.h amiga.h
  70134. +stat.o: stat.c dir_data.h fibstat.h amiga.h
  70135. +sigsetmask.o: sigsetmask.c signals.h amiga.h
  70136. +signal.o: signal.c signals.h amiga.h
  70137. +getpid.o: getpid.c processes.h amiga.h
  70138. +start.o: start.c processes.h amiga.h
  70139. +popen.o: popen.c fifo_pragmas.h fifo.h processes.h fifofd.h amiga.h
  70140. +tmpnam.o: tmpnam.c amiga.h
  70141. diff -ru --new-file baseline/fsf/emacs/unixlib/src/smakefile.base amiga/fsf/emacs/unixlib/src/smakefile.base
  70142. --- baseline/fsf/emacs/unixlib/src/smakefile.base    Wed Dec 31 17:00:00 1969
  70143. +++ amiga/fsf/emacs/unixlib/src/smakefile.base    Sun Oct 15 17:18:12 1995
  70144. @@ -0,0 +1,26 @@
  70145. +DEFS = define=SOFTLINK
  70146. +OPTIMIZE = debug=sf
  70147. +CFLAGS = $(OPTS) $(DEFS) gst=amiga.sym $(OPTIMIZE)
  70148. +
  70149. +all: amiga.sym unix.lib
  70150. +
  70151. +ALLOBJS = $(OBJS) sprintf.o _setjmp.o
  70152. +
  70153. +unix.lib: $(ALLOBJS)
  70154. +    -delete unix.lib ram:unix.lib
  70155. +    oml ram:unix.lib <@<
  70156. +r $(ALLOBJS)
  70157. +<
  70158. +    copy ram:unix.lib ""
  70159. +
  70160. +sprintf.o: sprintf.asm
  70161. +    asm -osprintf.o -iINCLUDE: sprintf.asm
  70162. +
  70163. +_setjmp.o: _setjmp.asm
  70164. +    asm -o_setjmp.o -iINCLUDE: _setjmp.asm
  70165. +
  70166. +amiga.sym: amiga.h
  70167. +    copy amiga.h am.c
  70168. +    sc makegst=amiga.sym $(OPTS) am.c
  70169. +    delete am.c
  70170. +
  70171. diff -ru --new-file baseline/fsf/emacs/unixlib/src/sprintf.asm amiga/fsf/emacs/unixlib/src/sprintf.asm
  70172. --- baseline/fsf/emacs/unixlib/src/sprintf.asm    Wed Dec 31 17:00:00 1969
  70173. +++ amiga/fsf/emacs/unixlib/src/sprintf.asm    Sun Oct 15 17:18:14 1995
  70174. @@ -0,0 +1,29 @@
  70175. +    XDEF __sprintf
  70176. +    XREF _AbsExecBase
  70177. +    XREF _LVORawDoFmt
  70178. +
  70179. +    csect    text,0,,2,2
  70180. +
  70181. +__sprintf
  70182. +save    equ    16
  70183. +    movem.l    a2/a3/a6/d2,-(a7)    ; save bytes copied to stack
  70184. +
  70185. +    move.l    save+8(a7),a0
  70186. +    lea    save+12(a7),a1
  70187. +    lea    copychar(pc),a2
  70188. +    move.l    save+4(a7),a3
  70189. +    move.l    a3,d2
  70190. +
  70191. +    move.l    _AbsExecBase,a6
  70192. +    jsr    _LVORawDoFmt(a6)
  70193. +    move.l    a3,d0            ; # of characters printed
  70194. +    sub.l    d2,d0
  70195. +
  70196. +    movem.l    (a7)+,a2/a3/a6/d2
  70197. +    rts
  70198. +    
  70199. +copychar
  70200. +    move.b    d0,(a3)+
  70201. +    rts
  70202. +
  70203. +    end
  70204. diff -ru --new-file baseline/fsf/emacs/unixlib/src/start.c amiga/fsf/emacs/unixlib/src/start.c
  70205. --- baseline/fsf/emacs/unixlib/src/start.c    Wed Dec 31 17:00:00 1969
  70206. +++ amiga/fsf/emacs/unixlib/src/start.c    Sun Oct 15 17:18:15 1995
  70207. @@ -0,0 +1,118 @@
  70208. +#include "amiga.h"
  70209. +#include "processes.h"
  70210. +#include <amiga/ioctl.h>
  70211. +#include <exec/memory.h>
  70212. +#include <dos/dosextens.h>
  70213. +#include <dos/dostags.h>
  70214. +#include <string.h>
  70215. +
  70216. +/* Variables used by a child that is starting up */
  70217. +struct MemList *_child_entry;    /* Memory used for child's code */
  70218. +static struct Message startup_message;
  70219. +struct exit_message *_child_exit;
  70220. +char *_child_command;
  70221. +int _child_command_len;
  70222. +char *_child_door_name;
  70223. +
  70224. +static void __saveds __interrupt _child_startup(void)
  70225. +{
  70226. +  struct exit_message *exit = _child_exit;
  70227. +  char *command = _child_command;
  70228. +  int command_len = _child_command_len;
  70229. +  char *door_name = _child_door_name;
  70230. +  struct Process *us = (struct Process *)FindTask(0);
  70231. +  struct DOSBase *local_DOSBase = DOSBase;
  70232. +#pragma libcall local_DOSBase local_SystemTagList 25E 2102
  70233. +  struct TagItem stags[2];
  70234. +  struct MsgPort *parent;
  70235. +
  70236. +  AddTail(&us->pr_Task.tc_MemEntry, _child_entry);
  70237. +
  70238. +  PutMsg(_startup_port, &startup_message);
  70239. +
  70240. +  /* From now on parent may disappear */
  70241. +  stags[0].ti_Tag = SYS_UserShell; stags[0].ti_Data = TRUE;
  70242. +  stags[1].ti_Tag = TAG_END;
  70243. +  exit->rc = local_SystemTagList(command, stags) << 8;
  70244. +
  70245. +  /* Send result to parent if he is around */
  70246. +  Forbid();
  70247. +  if (parent = FindPort(door_name)) PutMsg(parent, exit);
  70248. +  else FreeMem(exit, sizeof(struct exit_message));
  70249. +  Permit();
  70250. +
  70251. +  FreeMem(door_name, DOOR_LEN);
  70252. +  FreeMem(command, command_len);
  70253. +}
  70254. +
  70255. +int _start_process(char *command,
  70256. +           BPTR input, int close_input,
  70257. +           BPTR output, int close_output,
  70258. +           BPTR error, int close_error,
  70259. +           BPTR dir,
  70260. +           long stacksize)
  70261. +{
  70262. +  struct process *entry = (struct process *)malloc(sizeof(struct process));
  70263. +  static struct MemList alloc_child = { { 0 }, 1 };
  70264. +
  70265. +  _child_command_len = strlen(command) + 1;
  70266. +  _child_command = AllocMem(_child_command_len, MEMF_PUBLIC);
  70267. +  strcpy(_child_command, command);
  70268. +
  70269. +  _child_exit = AllocMem(sizeof(struct exit_message), MEMF_PUBLIC);
  70270. +  _child_door_name = AllocMem(DOOR_LEN, MEMF_PUBLIC);
  70271. +
  70272. +  alloc_child.ml_ME[0].me_Reqs = MEMF_PUBLIC;
  70273. +  alloc_child.ml_ME[0].me_Length = (char *)&_start_process - (char *)&_child_startup;
  70274. +  _child_entry = AllocEntry(&alloc_child);
  70275. +
  70276. +  if (entry && _child_command && _child_exit && _child_door_name &&
  70277. +      (long)_child_entry > 0)
  70278. +    {
  70279. +      memcpy(_child_entry->ml_ME[0].me_Addr, &_child_startup,
  70280. +         _child_entry->ml_ME[0].me_Length);
  70281. +      strcpy(_child_door_name, _door_name);
  70282. +
  70283. +      entry->pid = _next_pid++;
  70284. +      entry->input = input;
  70285. +
  70286. +      /* This message is sent by the child when it has started */
  70287. +      startup_message.mn_Length = sizeof(startup_message);
  70288. +      startup_message.mn_Node.ln_Type = NT_MESSAGE;
  70289. +
  70290. +      /* This message is sent by the child when it exits */
  70291. +      _child_exit->m.mn_Length = sizeof(*_child_exit);
  70292. +      _child_exit->m.mn_Node.ln_Type = NT_MESSAGE;
  70293. +      _child_exit->pid = entry->pid;
  70294. +
  70295. +      entry->process = CreateNewProcTags(NP_Entry, _child_entry->ml_ME[0].me_Addr,
  70296. +                     NP_Input, input,
  70297. +                     NP_CloseInput, (long)close_input,
  70298. +                     NP_Output, output,
  70299. +                     NP_CloseOutput, (long)close_output,
  70300. +                     NP_Error, error,
  70301. +                     NP_CloseError, (long)close_error,
  70302. +                     dir ? NP_CurrentDir : TAG_IGNORE, dir,
  70303. +                     NP_StackSize,
  70304. +                     stacksize > 0 ? stacksize : _stack_size,
  70305. +                     NP_Cli, TRUE,
  70306. +                     TAG_END);
  70307. +      if (entry->process)
  70308. +    {
  70309. +      do WaitPort(_startup_port); while (!GetMsg(_startup_port));
  70310. +      entry->status = alive;
  70311. +      AddHead((struct List *)&_processes, (struct Node *)entry);
  70312. +      return entry->pid;
  70313. +    }
  70314. +      errno = convert_oserr(IoErr());
  70315. +    }
  70316. +  else errno = ENOMEM;
  70317. +
  70318. +  if (entry) free(entry);
  70319. +  if (_child_command) FreeMem(_child_command, _child_command_len);
  70320. +  if (_child_exit) FreeMem(_child_exit, sizeof(struct exit_message));
  70321. +  if (_child_door_name) FreeMem(_child_door_name, DOOR_LEN);
  70322. +  if ((long)_child_entry > 0) FreeEntry(_child_entry);
  70323. +
  70324. +  return -1;
  70325. +}
  70326. diff -ru --new-file baseline/fsf/emacs/unixlib/src/stat.c amiga/fsf/emacs/unixlib/src/stat.c
  70327. --- baseline/fsf/emacs/unixlib/src/stat.c    Wed Dec 31 17:00:00 1969
  70328. +++ amiga/fsf/emacs/unixlib/src/stat.c    Sun Oct 15 17:18:17 1995
  70329. @@ -0,0 +1,96 @@
  70330. +#include "amiga.h"
  70331. +#include "fibstat.h"
  70332. +#include "dir_data.h"
  70333. +#include <sys/stat.h>
  70334. +#include <string.h>
  70335. +
  70336. +static int attach (char *dest, int dlen, char *dirname, char *name)
  70337. +{
  70338. +  char *dirnamep = dirname;
  70339. +  
  70340. +  while (*dirnamep && --dlen > 0)
  70341. +    *dest++ = *dirnamep++;
  70342. +  /* Add '/' if `dirname' doesn't already end with it. */
  70343. +  if (dirnamep > dirname && dirnamep[-1] != '/' && dirnamep[-1] != ':' && --dlen > 0)
  70344. +    *dest++ = '/';
  70345. +  
  70346. +  while (*name && --dlen > 0)
  70347. +    *dest++ = *name++;
  70348. +  *dest = 0;
  70349. +  
  70350. +  return dlen > 0;
  70351. +}
  70352. +
  70353. +static struct FileInfoBlock fakefib;
  70354. +
  70355. +static int fakestat(int soft, char *name, struct stat *sbuf)
  70356. +{
  70357. +  /* See if we want information on the last file returned from readdir */
  70358. +  if (last_dir)
  70359. +    {
  70360. +      iDIR *last_info = (iDIR *)last_dir->dd_buf;
  70361. +  
  70362. +      if (last_info->cdir == _get_cd() &&
  70363. +      attach(_temp_fname, FNAMESIZE - 1, last_info->dirname,
  70364. +         last_entry->entry.d_name) &&
  70365. +      strcmp(_temp_fname, name) == 0 &&
  70366. +      (soft || last_entry->type != ST_SOFTLINK))
  70367. +    {
  70368. +      if (last_entry->type == ST_LINKFILE || last_entry->type == ST_LINKDIR)
  70369. +        {
  70370. +          /* Find real block, this allows tar to detect hard links */
  70371. +          BPTR cd = CurrentDir(last_dir->dd_fd);
  70372. +          BPTR l = Lock(last_entry->entry.d_name, ACCESS_READ);
  70373. +
  70374. +          if (l)
  70375. +        {
  70376. +          Examine(l, &fakefib);
  70377. +          UnLock(l);
  70378. +        }
  70379. +          CurrentDir(cd);
  70380. +        }
  70381. +      else
  70382. +        fakefib.fib_DiskKey = last_entry->entry.d_ino;
  70383. +
  70384. +      fakefib.fib_NumBlocks = last_entry->numblocks;
  70385. +      fakefib.fib_Size = last_entry->size;
  70386. +      fakefib.fib_Date = last_entry->date;
  70387. +      fakefib.fib_DirEntryType = last_entry->type;
  70388. +      fakefib.fib_Protection = last_entry->protection;
  70389. +      
  70390. +      _lfibstat(name, &fakefib, last_info->task, 0, sbuf);
  70391. +
  70392. +      return 1;
  70393. +    }
  70394. +    }
  70395. +  return 0;
  70396. +}
  70397. +
  70398. +int stat(char *name, struct stat *sbuf)
  70399. +{
  70400. +  chkabort();
  70401. +  if (fakestat(0, name, sbuf)) return 0;
  70402. +  return _fibstat(name, sbuf);
  70403. +}
  70404. +
  70405. +int lstat(char *name, struct stat *sbuf)
  70406. +{
  70407. +  chkabort();
  70408. +  if (fakestat(1, name, sbuf)) return 0;
  70409. +  if (readlink(name, _temp_fname, FNAMESIZE - 1) < 0) return _fibstat(name, sbuf);
  70410. +
  70411. +  /* Symbolic link, fake a stat block */
  70412. +  sbuf->st_dev = 0;
  70413. +  sbuf->st_rdev = 0;
  70414. +  sbuf->st_uid = AMIGA_UID; sbuf->st_gid = AMIGA_GID;
  70415. +  sbuf->st_blksize = 512;
  70416. +  sbuf->st_nlink = 1;        
  70417. +  sbuf->st_blocks = 0;
  70418. +  sbuf->st_size = strlen(_temp_fname);
  70419. +  sbuf->st_ino = 0;
  70420. +  /* 1-Jan-1978 */
  70421. +  sbuf->st_ctime = sbuf->st_atime = sbuf->st_mtime = 252460800;
  70422. +  sbuf->st_mode = S_IFLNK | 0777;
  70423. +
  70424. +  return 0;
  70425. +}
  70426. diff -ru --new-file baseline/fsf/emacs/unixlib/src/strftime.c amiga/fsf/emacs/unixlib/src/strftime.c
  70427. --- baseline/fsf/emacs/unixlib/src/strftime.c    Wed Dec 31 17:00:00 1969
  70428. +++ amiga/fsf/emacs/unixlib/src/strftime.c    Sun Oct 15 17:18:19 1995
  70429. @@ -0,0 +1,291 @@
  70430. +/*
  70431. + * Copyright (c) 1989 The Regents of the University of California.
  70432. + * All rights reserved.
  70433. + *
  70434. + * Redistribution and use in source and binary forms, with or without
  70435. + * modification, are permitted provided that the following conditions
  70436. + * are met:
  70437. + * 1. Redistributions of source code must retain the above copyright
  70438. + *    notice, this list of conditions and the following disclaimer.
  70439. + * 2. Redistributions in binary form must reproduce the above copyright
  70440. + *    notice, this list of conditions and the following disclaimer in the
  70441. + *    documentation and/or other materials provided with the distribution.
  70442. + * 3. All advertising materials mentioning features or use of this software
  70443. + *    must display the following acknowledgement:
  70444. + *    This product includes software developed by the University of
  70445. + *    California, Berkeley and its contributors.
  70446. + * 4. Neither the name of the University nor the names of its contributors
  70447. + *    may be used to endorse or promote products derived from this software
  70448. + *    without specific prior written permission.
  70449. + *
  70450. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  70451. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  70452. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  70453. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  70454. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  70455. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  70456. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  70457. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  70458. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  70459. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  70460. + * SUCH DAMAGE.
  70461. + */
  70462. +
  70463. +#if defined(LIBC_SCCS) && !defined(lint)
  70464. +static char sccsid[] = "@(#)strftime.c    5.11 (Berkeley) 2/24/91";
  70465. +#endif /* LIBC_SCCS and not lint */
  70466. +
  70467. +#include <sys/types.h>
  70468. +#include <sys/time.h>
  70469. +#include <tzfile.h>
  70470. +#include <string.h>
  70471. +
  70472. +static char *afmt[] = {
  70473. +    "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
  70474. +};
  70475. +static char *Afmt[] = {
  70476. +    "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
  70477. +    "Saturday",
  70478. +};
  70479. +static char *bfmt[] = {
  70480. +    "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep",
  70481. +    "Oct", "Nov", "Dec",
  70482. +};
  70483. +static char *Bfmt[] = {
  70484. +    "January", "February", "March", "April", "May", "June", "July",
  70485. +    "August", "September", "October", "November", "December",
  70486. +};
  70487. +
  70488. +static size_t gsize;
  70489. +static char *pt;
  70490. +static int _add(), _conv(), _secs();
  70491. +
  70492. +size_t
  70493. +strftime(s, maxsize, format, t)
  70494. +    char *s;
  70495. +    size_t maxsize;
  70496. +    const char *format;
  70497. +    const struct tm *t;
  70498. +{
  70499. +    static size_t _fmt();
  70500. +
  70501. +    pt = s;
  70502. +    if ((gsize = maxsize) < 1)
  70503. +        return(0);
  70504. +    if (_fmt(format, t)) {
  70505. +        *pt = '\0';
  70506. +        return(maxsize - gsize);
  70507. +    }
  70508. +    return(0);
  70509. +}
  70510. +
  70511. +static size_t
  70512. +_fmt(format, t)
  70513. +    register char *format;
  70514. +    struct tm *t;
  70515. +{
  70516. +    for (; *format; ++format) {
  70517. +        if (*format == '%')
  70518. +            switch(*++format) {
  70519. +            case '\0':
  70520. +                --format;
  70521. +                break;
  70522. +            case 'A':
  70523. +                if (t->tm_wday < 0 || t->tm_wday > 6)
  70524. +                    return(0);
  70525. +                if (!_add(Afmt[t->tm_wday]))
  70526. +                    return(0);
  70527. +                continue;
  70528. +            case 'a':
  70529. +                if (t->tm_wday < 0 || t->tm_wday > 6)
  70530. +                    return(0);
  70531. +                if (!_add(afmt[t->tm_wday]))
  70532. +                    return(0);
  70533. +                continue;
  70534. +            case 'B':
  70535. +                if (t->tm_mon < 0 || t->tm_mon > 11)
  70536. +                    return(0);
  70537. +                if (!_add(Bfmt[t->tm_mon]))
  70538. +                    return(0);
  70539. +                continue;
  70540. +            case 'b':
  70541. +            case 'h':
  70542. +                if (t->tm_mon < 0 || t->tm_mon > 11)
  70543. +                    return(0);
  70544. +                if (!_add(bfmt[t->tm_mon]))
  70545. +                    return(0);
  70546. +                continue;
  70547. +            case 'C':
  70548. +                if (!_fmt("%a %b %e %H:%M:%S %Y", t))
  70549. +                    return(0);
  70550. +                continue;
  70551. +            case 'c':
  70552. +                if (!_fmt("%m/%d/%y %H:%M:%S", t))
  70553. +                    return(0);
  70554. +                continue;
  70555. +            case 'D':
  70556. +                if (!_fmt("%m/%d/%y", t))
  70557. +                    return(0);
  70558. +                continue;
  70559. +            case 'd':
  70560. +                if (!_conv(t->tm_mday, 2, '0'))
  70561. +                    return(0);
  70562. +                continue;
  70563. +            case 'e':
  70564. +                if (!_conv(t->tm_mday, 2, ' '))
  70565. +                    return(0);
  70566. +                continue;
  70567. +            case 'H':
  70568. +                if (!_conv(t->tm_hour, 2, '0'))
  70569. +                    return(0);
  70570. +                continue;
  70571. +            case 'I':
  70572. +                if (!_conv(t->tm_hour % 12 ?
  70573. +                    t->tm_hour % 12 : 12, 2, '0'))
  70574. +                    return(0);
  70575. +                continue;
  70576. +            case 'j':
  70577. +                if (!_conv(t->tm_yday + 1, 3, '0'))
  70578. +                    return(0);
  70579. +                continue;
  70580. +            case 'k':
  70581. +                if (!_conv(t->tm_hour, 2, ' '))
  70582. +                    return(0);
  70583. +                continue;
  70584. +            case 'l':
  70585. +                if (!_conv(t->tm_hour % 12 ?
  70586. +                    t->tm_hour % 12 : 12, 2, ' '))
  70587. +                    return(0);
  70588. +                continue;
  70589. +            case 'M':
  70590. +                if (!_conv(t->tm_min, 2, '0'))
  70591. +                    return(0);
  70592. +                continue;
  70593. +            case 'm':
  70594. +                if (!_conv(t->tm_mon + 1, 2, '0'))
  70595. +                    return(0);
  70596. +                continue;
  70597. +            case 'n':
  70598. +                if (!_add("\n"))
  70599. +                    return(0);
  70600. +                continue;
  70601. +            case 'p':
  70602. +                if (!_add(t->tm_hour >= 12 ? "PM" : "AM"))
  70603. +                    return(0);
  70604. +                continue;
  70605. +            case 'R':
  70606. +                if (!_fmt("%H:%M", t))
  70607. +                    return(0);
  70608. +                continue;
  70609. +            case 'r':
  70610. +                if (!_fmt("%I:%M:%S %p", t))
  70611. +                    return(0);
  70612. +                continue;
  70613. +            case 'S':
  70614. +                if (!_conv(t->tm_sec, 2, '0'))
  70615. +                    return(0);
  70616. +                continue;
  70617. +            case 's':
  70618. +                if (!_secs(t))
  70619. +                    return(0);
  70620. +                continue;
  70621. +            case 'T':
  70622. +            case 'X':
  70623. +                if (!_fmt("%H:%M:%S", t))
  70624. +                    return(0);
  70625. +                continue;
  70626. +            case 't':
  70627. +                if (!_add("\t"))
  70628. +                    return(0);
  70629. +                continue;
  70630. +            case 'U':
  70631. +                if (!_conv((t->tm_yday + 7 - t->tm_wday) / 7,
  70632. +                    2, '0'))
  70633. +                    return(0);
  70634. +                continue;
  70635. +            case 'W':
  70636. +                if (!_conv((t->tm_yday + 7 -
  70637. +                    (t->tm_wday ? (t->tm_wday - 1) : 6))
  70638. +                    / 7, 2, '0'))
  70639. +                    return(0);
  70640. +                continue;
  70641. +            case 'w':
  70642. +                if (!_conv(t->tm_wday, 1, '0'))
  70643. +                    return(0);
  70644. +                continue;
  70645. +            case 'x':
  70646. +                if (!_fmt("%m/%d/%y", t))
  70647. +                    return(0);
  70648. +                continue;
  70649. +            case 'y':
  70650. +                if (!_conv((t->tm_year + TM_YEAR_BASE)
  70651. +                    % 100, 2, '0'))
  70652. +                    return(0);
  70653. +                continue;
  70654. +            case 'Y':
  70655. +                if (!_conv(t->tm_year + TM_YEAR_BASE, 4, '0'))
  70656. +                    return(0);
  70657. +                continue;
  70658. +            case 'Z':
  70659. +                if (!t->tm_zone || !_add(t->tm_zone))
  70660. +                    return(0);
  70661. +                continue;
  70662. +            case '%':
  70663. +            /*
  70664. +             * X311J/88-090 (4.12.3.5): if conversion char is
  70665. +             * undefined, behavior is undefined.  Print out the
  70666. +             * character itself as printf(3) does.
  70667. +             */
  70668. +            default:
  70669. +                break;
  70670. +        }
  70671. +        if (!gsize--)
  70672. +            return(0);
  70673. +        *pt++ = *format;
  70674. +    }
  70675. +    return(gsize);
  70676. +}
  70677. +
  70678. +static
  70679. +_secs(t)
  70680. +    struct tm *t;
  70681. +{
  70682. +    static char buf[15];
  70683. +    register time_t s;
  70684. +    register char *p;
  70685. +    struct tm tmp;
  70686. +
  70687. +    /* Make a copy, mktime(3) modifies the tm struct. */
  70688. +    tmp = *t;
  70689. +    s = mktime(&tmp);
  70690. +    for (p = buf + sizeof(buf) - 2; s > 0 && p > buf; s /= 10)
  70691. +        *p-- = s % 10 + '0';
  70692. +    return(_add(++p));
  70693. +}
  70694. +
  70695. +static
  70696. +_conv(n, digits, pad)
  70697. +    int n, digits;
  70698. +    char pad;
  70699. +{
  70700. +    static char buf[10];
  70701. +    register char *p;
  70702. +
  70703. +    for (p = buf + sizeof(buf) - 2; n > 0 && p > buf; n /= 10, --digits)
  70704. +        *p-- = n % 10 + '0';
  70705. +    while (p > buf && digits-- > 0)
  70706. +        *p-- = pad;
  70707. +    return(_add(++p));
  70708. +}
  70709. +
  70710. +static
  70711. +_add(str)
  70712. +    register char *str;
  70713. +{
  70714. +    for (;; ++pt, --gsize) {
  70715. +        if (!gsize)
  70716. +            return(0);
  70717. +        if (!(*pt = *str++))
  70718. +            return(1);
  70719. +    }
  70720. +}
  70721. diff -ru --new-file baseline/fsf/emacs/unixlib/src/symlink.c amiga/fsf/emacs/unixlib/src/symlink.c
  70722. --- baseline/fsf/emacs/unixlib/src/symlink.c    Wed Dec 31 17:00:00 1969
  70723. +++ amiga/fsf/emacs/unixlib/src/symlink.c    Sun Oct 15 17:18:20 1995
  70724. @@ -0,0 +1,14 @@
  70725. +#include "amiga.h"
  70726. +
  70727. +int symlink(char *from, char *to)
  70728. +{
  70729. +#ifdef SOFTLINK
  70730. +  chkabort();
  70731. +  if (MakeLink(to, from, 1)) return 0;
  70732. +  ERROR;
  70733. +#else
  70734. +  _OSERR = ERROR_NOT_IMPLEMENTED;
  70735. +  errno = EOSERR;
  70736. +  return -1;
  70737. +#endif
  70738. +}
  70739. diff -ru --new-file baseline/fsf/emacs/unixlib/src/time.c amiga/fsf/emacs/unixlib/src/time.c
  70740. --- baseline/fsf/emacs/unixlib/src/time.c    Wed Dec 31 17:00:00 1969
  70741. +++ amiga/fsf/emacs/unixlib/src/time.c    Sun Oct 15 17:18:22 1995
  70742. @@ -0,0 +1,12 @@
  70743. +#include "amiga.h"
  70744. +#include "timeconvert.h"
  70745. +
  70746. +time_t time(time_t *clock)
  70747. +{
  70748. +  struct timeval now;
  70749. +
  70750. +  if (_gettime(&now) < 0) return -1;
  70751. +  if (clock) *clock = now.tv_secs;
  70752. +
  70753. +  return (time_t)now.tv_secs;
  70754. +}
  70755. diff -ru --new-file baseline/fsf/emacs/unixlib/src/timeconvert.c amiga/fsf/emacs/unixlib/src/timeconvert.c
  70756. --- baseline/fsf/emacs/unixlib/src/timeconvert.c    Wed Dec 31 17:00:00 1969
  70757. +++ amiga/fsf/emacs/unixlib/src/timeconvert.c    Sun Oct 15 17:18:24 1995
  70758. @@ -0,0 +1,94 @@
  70759. +#include "amiga.h"
  70760. +#include "timeconvert.h"
  70761. +#include <time.h>
  70762. +#include <proto/timer.h>
  70763. +
  70764. +int _gettime(struct timeval *tp)
  70765. +{
  70766. +  struct tm *local;
  70767. +  time_t gmt;
  70768. +
  70769. +  GetSysTime(tp);
  70770. +  /* Correct for different epoch (78 vs 70) */
  70771. +  tp->tv_secs += 252460800;    
  70772. +
  70773. +#ifdef USE_LOCAL
  70774. +  /* correct for timezone */
  70775. +  local = gmtime(&tp->tv_secs);
  70776. +  local->tm_isdst = -1;        /* We don't know about dst */
  70777. +  gmt = mktime(local);
  70778. +
  70779. +  if (gmt == -1)
  70780. +    {
  70781. +      errno = EINVAL;
  70782. +      return -1;
  70783. +    }
  70784. +  tp->tv_secs = gmt;
  70785. +#endif
  70786. +  return 0;
  70787. +}
  70788. +
  70789. +#ifdef USE_LOCAL
  70790. +
  70791. +/* System is storing local time */
  70792. +
  70793. +void _gmt2amiga(time_t time, struct DateStamp *date)
  70794. +{
  70795. +  struct tm *local, *gmt;
  70796. +
  70797. +  local = localtime(&time);
  70798. +  gmt = gmtime(&time);
  70799. +  date->ds_Tick = 50 * local->tm_sec;
  70800. +  date->ds_Minute = local->tm_min + local->tm_hour * 60;
  70801. +
  70802. +  /* Now calculate the day assuming we are in GMT */
  70803. +  date->ds_Days = (time - 252460800) / 86400;
  70804. +  /* And correct by comparing local with GMT */
  70805. +  if (local->tm_year < gmt->tm_year ||
  70806. +      local->tm_year == gmt->tm_year && local->tm_yday < gmt->tm_yday)
  70807. +    date->ds_Days--;
  70808. +  if (local->tm_year > gmt->tm_year ||
  70809. +      local->tm_year == gmt->tm_year && local->tm_yday > gmt->tm_yday)
  70810. +    date->ds_Days++;
  70811. +}
  70812. +
  70813. +time_t _amiga2gmt(struct DateStamp *date)
  70814. +{
  70815. +  struct tm *local;
  70816. +  time_t secs;
  70817. +
  70818. +  secs = date->ds_Tick / 50 + date->ds_Minute * 60 + date->ds_Days * 86400 +
  70819. +    252460800;
  70820. +  local = gmtime(&secs);
  70821. +  local->tm_isdst = -1;        /* We don't know about dst */
  70822. +
  70823. +  return mktime(local);
  70824. +}
  70825. +
  70826. +#else
  70827. +
  70828. +/* System is storing GMT */
  70829. +/* Leap seconds are not handled !! */
  70830. +
  70831. +void _gmt2amiga(time_t time, struct DateStamp *date)
  70832. +{
  70833. +  time_t time78, day_secs;
  70834. +
  70835. +  time78 = time - 252460800;    /* Change Epoch */
  70836. +  date->ds_Days = time78 / 86400;
  70837. +  day_secs = time78 % 86400;
  70838. +  date->ds_Minute = day_secs / 60;
  70839. +  date->ds_Tick = 50 * (day_secs % 60);
  70840. +}
  70841. +
  70842. +time_t _amiga2gmt(struct DateStamp *date)
  70843. +{
  70844. +  time_t secs;
  70845. +
  70846. +  secs = date->ds_Tick / 50 + date->ds_Minute * 60 + date->ds_Days * 86400 +
  70847. +    252460800;
  70848. +
  70849. +  return secs;
  70850. +}
  70851. +
  70852. +#endif
  70853. diff -ru --new-file baseline/fsf/emacs/unixlib/src/timeconvert.h amiga/fsf/emacs/unixlib/src/timeconvert.h
  70854. --- baseline/fsf/emacs/unixlib/src/timeconvert.h    Wed Dec 31 17:00:00 1969
  70855. +++ amiga/fsf/emacs/unixlib/src/timeconvert.h    Sun Oct 15 17:18:26 1995
  70856. @@ -0,0 +1,27 @@
  70857. +#ifndef TIMECONVERT_H
  70858. +#define TIMECONVERT_H
  70859. +
  70860. +#include <time.h>
  70861. +
  70862. +int _gettime(struct timeval *tp);
  70863. +/* Effect: Store GMT time into tp.
  70864. +     If USE_LOCAL is defined, assume system stores local time,
  70865. +     otherwise it stores GMT.
  70866. +*/
  70867. +
  70868. +void _gmt2amiga(time_t time, struct DateStamp *date);
  70869. +/* Effect: Converts a time expressed in seconds since
  70870. +     the 1 January 1970 0:00:00 GMT, to an Amiga time.
  70871. +     If USE_LOCAL is defined, Amiga time is assumed to
  70872. +     be stored as local time, otherwise as GMT.
  70873. +   Modifies: date, to contain the time in Amiga format
  70874. +*/
  70875. +
  70876. +time_t _amiga2gmt(struct DateStamp *date);
  70877. +/* Effect: Convert a date expressed in Amiga format (as a 
  70878. +     local time if USE_LOCAL is defined, as GMT otherwise)
  70879. +     to a number of seconds since 1 January 1970 0:00:00 GMT.
  70880. +   Returns: this latter time
  70881. +*/
  70882. +
  70883. +#endif
  70884. diff -ru --new-file baseline/fsf/emacs/unixlib/src/timers.c amiga/fsf/emacs/unixlib/src/timers.c
  70885. --- baseline/fsf/emacs/unixlib/src/timers.c    Wed Dec 31 17:00:00 1969
  70886. +++ amiga/fsf/emacs/unixlib/src/timers.c    Sun Oct 15 17:18:26 1995
  70887. @@ -0,0 +1,72 @@
  70888. +#include "amiga.h"
  70889. +#include "devices.h"
  70890. +#include "timers.h"
  70891. +
  70892. +struct timeinfo *_alloc_timer(void)
  70893. +{
  70894. +  struct timeinfo *timer = AllocMem(sizeof(struct timeinfo), 0);
  70895. +
  70896. +  if (!timer) return 0;
  70897. +  timer->sent = FALSE;
  70898. +  timer->io = (struct timerequest *)
  70899. +    _device_open("timer.device", UNIT_VBLANK, 0L, 0L, 0, sizeof(struct timerequest));
  70900. +  if (!timer->io)
  70901. +    {
  70902. +      FreeMem(timer, sizeof(struct timeinfo));
  70903. +      return 0;
  70904. +    }
  70905. +  return timer;
  70906. +}
  70907. +
  70908. +void _free_timer(struct timeinfo *timer)
  70909. +{
  70910. +  if (timer)
  70911. +    {
  70912. +      _timer_abort(timer);
  70913. +      _device_close(timer->io);
  70914. +      FreeMem(timer, sizeof(struct timeinfo));
  70915. +    }
  70916. +}
  70917. +
  70918. +void _timer_abort(struct timeinfo *timer)
  70919. +{
  70920. +  if (timer->sent)
  70921. +    {
  70922. +      AbortIO(timer->io);
  70923. +      WaitIO(timer->io);
  70924. +      /* Clear timer io signal */
  70925. +      /*SetSignal(0, timer_sig(timer));*/
  70926. +      timer->sent = FALSE;
  70927. +    }
  70928. +}
  70929. +
  70930. +ULONG _timer_sig(struct timeinfo *timer)
  70931. +{
  70932. +  return 1UL << timer->io->tr_node.io_Message.mn_ReplyPort->mp_SigBit;
  70933. +}
  70934. +
  70935. +void _timer_start(struct timeinfo *timer, int secs, int micros)
  70936. +/* _timer_start(timer, 0) stops a timer */
  70937. +{
  70938. +  _timer_abort(timer);
  70939. +  if (secs || micros)
  70940. +    {
  70941. +      timer->io->tr_time.tv_secs = secs;
  70942. +      timer->io->tr_time.tv_micro = micros;
  70943. +      timer->io->tr_node.io_Command = TR_ADDREQUEST;
  70944. +      SendIO(timer->io);
  70945. +      timer->sent = TRUE;
  70946. +    }
  70947. +}
  70948. +
  70949. +int _timer_expired(struct timeinfo *timer)
  70950. +/* A non-started timer is defined to not have expired */
  70951. +{
  70952. +  if (timer->sent && CheckIO(timer->io))
  70953. +    {
  70954. +      WaitIO(timer->io);
  70955. +      timer->sent = FALSE;
  70956. +      return TRUE;
  70957. +    }
  70958. +  return FALSE;
  70959. +}
  70960. diff -ru --new-file baseline/fsf/emacs/unixlib/src/tmpnam.c amiga/fsf/emacs/unixlib/src/tmpnam.c
  70961. --- baseline/fsf/emacs/unixlib/src/tmpnam.c    Wed Dec 31 17:00:00 1969
  70962. +++ amiga/fsf/emacs/unixlib/src/tmpnam.c    Sun Oct 15 17:18:27 1995
  70963. @@ -0,0 +1,13 @@
  70964. +#include "amiga.h"
  70965. +#include <string.h>
  70966. +#include <stdio.h>
  70967. +
  70968. +char *tmpnam(char *s)
  70969. +{
  70970. +  static char tmpbuf[L_tmpnam];
  70971. +
  70972. +  if (!s) s = tmpbuf;
  70973. +
  70974. +  strcpy(s, P_tmpdir "tmp_XXXXXX");
  70975. +  return mktemp(s);
  70976. +}
  70977. diff -ru --new-file baseline/fsf/emacs/unixlib/src/truncate.c amiga/fsf/emacs/unixlib/src/truncate.c
  70978. --- baseline/fsf/emacs/unixlib/src/truncate.c    Wed Dec 31 17:00:00 1969
  70979. +++ amiga/fsf/emacs/unixlib/src/truncate.c    Sun Oct 15 17:18:28 1995
  70980. @@ -0,0 +1,21 @@
  70981. +#include "amiga.h"
  70982. +#include "amigados.h"
  70983. +
  70984. +int truncate(char *path, off_t length)
  70985. +{
  70986. +  BPTR fh = Open(path, MODE_OLDFILE);
  70987. +  int err;
  70988. +
  70989. +  chkabort();
  70990. +  if (fh)
  70991. +    {
  70992. +      int ret = _do_truncate(fh, length);
  70993. +
  70994. +      if (Close(fh) || ret) return ret;
  70995. +      err = IoErr();
  70996. +    }
  70997. +  else err = IoErr();
  70998. +
  70999. +  errno = convert_oserr(err);
  71000. +  return -1;
  71001. +}
  71002. diff -ru --new-file baseline/fsf/emacs/unixlib/src/uid.c amiga/fsf/emacs/unixlib/src/uid.c
  71003. --- baseline/fsf/emacs/unixlib/src/uid.c    Wed Dec 31 17:00:00 1969
  71004. +++ amiga/fsf/emacs/unixlib/src/uid.c    Sun Oct 15 17:18:29 1995
  71005. @@ -0,0 +1,4 @@
  71006. +#include "amiga.h"
  71007. +
  71008. +uid_t getuid(void) { return AMIGA_UID; }
  71009. +uid_t geteuid(void) { return AMIGA_UID; }
  71010. diff -ru --new-file baseline/fsf/emacs/unixlib/src/umask.c amiga/fsf/emacs/unixlib/src/umask.c
  71011. --- baseline/fsf/emacs/unixlib/src/umask.c    Wed Dec 31 17:00:00 1969
  71012. +++ amiga/fsf/emacs/unixlib/src/umask.c    Sun Oct 15 17:18:30 1995
  71013. @@ -0,0 +1,3 @@
  71014. +#include "amiga.h"
  71015. +
  71016. +int umask(int mask) { return 0; }
  71017. diff -ru --new-file baseline/fsf/emacs/unixlib/src/unix-hard.lib.uue amiga/fsf/emacs/unixlib/src/unix-hard.lib.uue
  71018. --- baseline/fsf/emacs/unixlib/src/unix-hard.lib.uue    Wed Dec 31 17:00:00 1969
  71019. +++ amiga/fsf/emacs/unixlib/src/unix-hard.lib.uue    Sun Oct 15 17:18:32 1995
  71020. @@ -0,0 +1,1186 @@
  71021. +begin 666 unix-hard.lib
  71022. +M```#^@``*UH```/I````"2!O``0@UTC0_/QP`$YU(&\`!"`O``AF`G`!(EA,
  71023. +MT/S\6(].T0```_(```/I````#$CG(#(@;P`80^\`'$7Z`!PF;P`4)`LL>0``
  71024. +M``!.K@``(`N0@DS?3`1.=1;`3G4``````^^!```#7T%B<T5X96-"87-E````
  71025. +M`0```!B&```#7TQ63U)A=T1O1FUT`````0```!X````````#\@```^D````*
  71026. +M(&\`!"\-*D@@#68$2^P``$'L```B31+89OPO#4ZZ``!83RI?3G4``````_@`
  71027. +M```!`````0```!(````!`````@````X````````#[X,```)?;6MT96UP````
  71028. +M``$````>`````````_$````#`````$]05%,`!`!````#\@```^H````$=#IT
  71029. +M;7!?6%A86%A8`````````_(```/K````"0```_(```/I````;R!O``0B;P`(
  71030. +MGOP`($CG+Q8F22](`"`O20`D<`Q.N@``*D`@+```4JP``"(L``#2@"\!2&P`
  71031. +M`$AO`#!.N@``3^\`#'!WL!-F-DHK``%F,$'O`"A#[``03KH``"9`+&P``$ZN
  71032. +M_\0N`'P`0>\`*"(()#P```/M3J[_XBH`>`%@1G!RL!-F-DHK``%F,$'O`"A#
  71033. +M[``23KH``"9`+&P``$ZN_\HJ`'@`0>\`*"(()#P```/N3J[_XBX`?`%@"G`6
  71034. +M*4```&```(Q*A6<$2H=F!$ZZ```@"V="2H5G/DJ'9SH@#6<V<``O`"\`+P!(
  71035. +M>/__+P8O!R`%(@0@;P`X3KH``$_O`!@K0``(9Q`JK```*4T``"M+``0@"V`Z
  71036. +M(`UG!B!-3KH``$J%9PY*A&<*(@4L;```3J[_W$J'9PY*AF<*(@<L;```3J[_
  71037. +MW"`+9P8@2TZZ``!P`$S?:/3>_``@3G4@;P`$44](YP$T)DA+[```+T@`$&`Z
  71038. +M(&H`!+'+9C`F52XK``@JDR!K``1.N@``($M.N@``0J=(;P`8+P=.N@``3^\`
  71039. +M#$J`:PX@+P`48`HJ2B15(`IFP'#_3-\L@%!/3G4``````_@````#`````0``
  71040. +M`)````!4````-`````,````"```!:````0P```$(`````````^^#```"0&UA
  71041. +M;&QO8P`````!````'H8```1?7V9I9F]?;V9F<V5T`````````@```"@````D
  71042. +MA@```U]?9FEF;U]B87-E``````$````L@P```U]?<W!R:6YT9@````````$`
  71043. +M```\@P```D!F;W!E;@```````@```)0```!8A@```E]$3U-"87-E````!```
  71044. +M`3X```$L````F@```%Z&```"7V5R<FYO```````!````OH,```)`7W-E=&5R
  71045. +M<@````$```#.@P``!$!?<W1A<G1?<')O8V5S<P`````!````^H,```)`9G)E
  71046. +M90````````(```&,```!'H,```)`9F-L;W-E``````(```&&```!3(,```)?
  71047. +M=V%I='!I9`````$```&8`````````_$````#`````$]05%,`!`!````#\@``
  71048. +M`^H````%<&EP93IU>&]P96XN)6QX`'<`<@````/R```#ZP````$```/R```#
  71049. +MZ0```,6>_``82.<A/DGY`````$7L`!@J6B!:+AHF;``D+T@`()/)+'@`!$ZN
  71050. +M_MHD;```($!#Z`!*($DB;```3J[_"B!L``!#[``$3J[^DD/O`"0B_(```"1P
  71051. +M`2+`0IDB+P`@0>\`)"0(+$I.KOVBX8`K0``8+'@`!$ZN_WPB2TZN_GI*@&<*
  71052. +M($`B34ZN_I)@"")-<!Q.KO\N3J[_=B)+<"!.KO\N(F\`("`'3J[_+DS??(3>
  71053. +M_``82H!.=2!O``0@+P`((B\`#"]O`!``!"]O`!0`""]O`!@`#"]O`!P`$"]O
  71054. +M`"``%"]O`"0`&%E/2.</%BHO`#@L+P`T+@`J2"]!`!QP'$ZZ```F0"!-2AAF
  71055. +M_%.(D<T@"%*`*4``('(!+'@`!$ZN_SHI0``<(D`2W6;\<!QR`4ZN_SHI0``8
  71056. +M<"!R`4ZN_SHI0``D<`$I0``00?K_G"`(0_K^L)")*4``%$'L``!.KO\B*4``
  71057. +M`"(+9P`!2DJL`!QG``%"2JP`&&<``3I*K``D9P`!,DJ`;P`!+"!L```@*``4
  71058. +M0?K^;B)L```B:0`08`(2V%.`9/I![```(FP`)!+89OP@+```4JP``"=```PG
  71059. +M1P`03>P`%CS\`!1P!1E```P@5C%\`!P`$A%```@@7B%K``P`%"`\@``#\DJ&
  71060. +M9@)P`2@`2H5O!"`%8`0@+```0J=(>``!+SR```/Z+P`O/(```_,O!B\$+R\`
  71061. +M3"\\@``#\2\O`%`O/(```_`O+P!4+SR```/O+R\`6"\\@``#[2\O`%@O/(``
  71062. +M`^XO!R\\@``#["!L```O*``0+SR```/K+&P``"(/3J[^#D_O`%0G0``(9S0@
  71063. +M;```+'@`!$ZN_H`@;```+'@`!$ZN_HQ*@&?D0JL`%$'L```B2RQX``1.KO\0
  71064. +M("L`#&!H+&P``$ZN_WQ.N@``8`)P#"E````@"V<&($M.N@``("P`'&<.(D`@
  71065. +M+``@+'@`!$ZN_RX@+``89PPB0'`<+'@`!$ZN_RX@+``D9PPB0'`@+'@`!$ZN
  71066. +M_RX@+```;PH@0"QX``1.KO\<</],WVCP6$].=0```_@````#`````0```5H`
  71067. +M``%6```!1@```!<````"```"_````NH```+8```"S````L0```)0```!S```
  71068. +M`<(```&J```!E@```8H```%\```!=````6P```%B```!0````30```$B```!
  71069. +M%````$0````X````&@```!`````````#[X$```-?3&EN:V5R1$(````````!
  71070. +M````"H8```)?1$]30F%S90````,```*F```"7@```"R&```$7U]S=&%R='5P
  71071. +M7W!O<G0```````,```)^```"<@```$"#```"0&UA;&QO8P`````!```!`(8`
  71072. +M``-?7V1O;W)?;F%M90`````!```!IH8```-?7VYE>'1?<&ED```````"```!
  71073. +MM@```;*&```#7U]S=&%C:U]S:7IE`````0```?J&```#7U]P<F]C97-S97,`
  71074. +M`````0```I*#```$0&-O;G9E<G1?;W-E<G(```````$```*NA@```E]E<G)N
  71075. +M;P```````0```K:#```"0&9R964````````!```"P`````````/Q`````P``
  71076. +M``!/4%13``0`0````_(```/J````!@````````````````````$`````````
  71077. +M`````_(```/K````"@```_(```/I`````TZZ```@+```3G4``````^^#```#
  71078. +M0&-H:V%B;W)T`````````0````*&```#7U]O=7)?<&ED`````````0````8`
  71079. +M```````#\0````,`````3U!44P`$`$````/R```#Z0```",@+P`$(&\`"")O
  71080. +M``Q(YP$4+@`F22I(3KH``'`!OH!M+'`@OH!L)B`+9PX@!^>`0^P``-/`)MDF
  71081. +MV2`-9PSGAT'L``#1QR#=(-UP`&`(<!8I0```</],WRB`3G4@+P`$(&\`")[\
  71082. +M`!`O2``(0J\`#$'O``A#UV&62H!G"#!\__\@"&`"(!?>_``03G4``````^^#
  71083. +M```#0&-H:V%B;W)T`````````0```!B&```$7U]S:6=?:&%N9&QE<G,`````
  71084. +M``(```!`````,(8```)?97)R;F\```````$```!0`````````_$````#````
  71085. +M`$]05%,`!`!````#\@```^D````5("\`!$CG#P`N`"PL``!.N@``*4<``'H`
  71086. +M>`$@+```P(1G#B`L``#`A&8&(`5.N@``4H78A'`@NH!MX"`&3-\`\$YU("\`
  71087. +M!"\'(@`@+```@($N'V"P```#[X8```-?7W-I9U]M87-K```````$````3```
  71088. +M`"0````4````#(,```-`8VAK86)O<G0````````!````$(8```1?7W-I9U]P
  71089. +M96YD:6YG`````````0```!R#```$0%]S:6=?9&ES<&%T8V@```````$````N
  71090. +M`````````_$````#`````$]05%,`!`!````#\@```^D```":(&\`!"`O``@B
  71091. +M;P`,+V\`$``$64](YR$T+@`F;P`<*D@D22])`!1@`AK:2A)G!%.';O:U[P`4
  71092. +M8QH0*O__<B^P`6<0=#JP`F<*4X=O!AK!8`(:VTH39P13AV[V0A5*AU[`1`!(
  71093. +M@$C`3-\LA%A/3G4@+P`$(&\`"")O``Q93TCG)S8N`"I(+TD`($JL``!G``#^
  71094. +M(&P``"9H``Q.N@``(BL`!+*`9@``Z"!L``!(:``L0>P``")3<`!&`&$`_UA8
  71095. +M3TJ`9P``RD'L```B31`8L!EF``"\2@!F]&8``+1*AV80(&P``"`H`!AR`["!
  71096. +M9P``H"!L```@*``8<ORP@6<$68!F/B)L```B$2QL``!.KO^"+``@;```T/P`
  71097. +M+"((=/Y.KO^L*@!G$B(%0>P``"0(3J[_FB(%3J[_IB(&3J[_@F`&*6@`(```
  71098. +M(&P``"EH``0`@"EH``@`?$/H``Q%[`"$)-DDV239(&P``"EH`!@`!"EH`!P`
  71099. +M="\O`"`O*P$8($U#[```<`!.N@``4$]P`6`"<`!,WVSD6$].=2!O``0B;P`(
  71100. +M2.<`%"9)*DA.N@``($TB2W``80#^R$J`9P1P`&`,($TB2TS?*`!.^@``3-\H
  71101. +M`$YU(&\`!")O``A(YP`4)DDJ2$ZZ```@32)+<`%A`/Z02H!F<$AX`/](;```
  71102. +M+PU.N@``3^\`#$J`:@P@32)+3-\H`$[Z``!+TT*=0JL`$G`!-T``#D)K`!`G
  71103. +M?````@``,C=```Q"JP`V0>P``")(2AEF_%.)D\@G20`60IT@/`\,/P`G0``B
  71104. +M)T``&B=``"HJ_```H?]P`$S?*`!.=0```_@````(`````0```7X```%P```!
  71105. +M:@```5H```%2```!3````4(```$H`````````^^&```#7VQA<W1?9&ER````
  71106. +M`````P```0(```"2````BH,```)`7V=E=%]C9`````$```":A@```U]L87-T
  71107. +M7V5N=')Y``````8```%D```!1@```1(```#P````X````*B&```#7U]T96UP
  71108. +M7V9N86UE````!````C8```'V````Q@```+"&```"7T1/4T)A<V4````!```!
  71109. +M"(,```-`7VQF:6)S=&%T```````!```!A(,```-`8VAK86)O<G0````````"
  71110. +M```!X````:B#```#0%]F:6)S=&%T`````````@```A````'&@P```U]R96%D
  71111. +M;&EN:P````````$```'\`````````_$````#`````$]05%,`!`!````#\@``
  71112. +M`^L```!!```#\@```^D```#0(&\`!%E/2.<`%"](``@@;P`(*F@!#&`*)E4@
  71113. +M34ZZ```J2R`-9O),WR@`6$].=2!O``2>_``02.<@-BI()FT`#$/K`0PO2``<
  71114. +M+TD`("!+8;1"K```0JL!#$*M``0@%>6`($`G:``,`1A!ZP`(+T@`&&```)Y!
  71115. +MZP`0(DA*&6;\4XF3R"`)D<C0_``L<@`R`-*(4H%T`#0!/T``%C]!`!0@`DZZ
  71116. +M```D0$J`9@9P#&```)Q-TD*>(&\`(""*+U``("SK`(@LZP"$0>L`C$/J``PB
  71117. +MV"+8(M@E:P`,`!@E:P!\`!Q+Z@`@.V\`%``$.V\`%@`&(&\`'"`H``12J``$
  71118. +M*T``"$'J`"Q#ZP`0$-EF_"JK``@J;P`<(A4D+P`8+&P``$ZN_Y1*@&8`_TXG
  71119. +M:P$,`1!"K0`$+&P``$ZN_WQR=-*!L(%F!'`!8`I.N@``*4```'``3-]L!-[\
  71120. +M`!!.=2!O``193TCG(#8O2``4<!!.N@``*D!P1^6(3KH``"9`(&\`%"`(2AAF
  71121. +M_%.(D<`@"%*`3KH``"1`3KH``"`-9P``@B`*9WP@"V=X*TL`#"M\```!'``(
  71122. +MD<@G2`$0)T@!#"=(`10FBB!O`!04V&;\3KH``"=```0B+P`4+&P``'3^3J[_
  71123. +MK"J`9R)!ZP`((@`D""QL``!.KO^:2H!G#B!-80#^.$J`9Q0@#6`^+&P``$ZN
  71124. +M_WQ.N@``*4```"!-80``-F`D<`PI0```(`UG!B!-3KH``"`*9P8@2DZZ```@
  71125. +M"V<&($M.N@``<`!,WVP$6$].=2!O``1(YP`6*D@F;0`,3KH``$*L```@2V$`
  71126. +M_:`@4TZZ```@%6<*(@`L;```3J[_IB!M``Q.N@``($U,WV@`3OH``"!O``19
  71127. +M3TCG`S0O2``4(&\`%"IH``R7RTZZ``!*K0$49R1^`"1M`0P@;P`4+"@`!&`$
  71128. +M4H<D4KZ&;`0@"F;T*TH!$$*M`10@+0$09R(F0-;\`"`I;P`4``!%[0$0(%(I
  71129. +M2```(%(DT"!O`!12J``$(`M,WRS`6$].=2!O``0O#2I(3KH``"`M``0J7TYU
  71130. +M(&\`!"`O``A(YP$4+@`J2"9M``Q.N@``<`$G0`$4*T<`!$S?*(!.=0```^^#
  71131. +M```"0&9R964````````'```"B@```H````)J```"/@```C0```(J````'H8`
  71132. +M``-?;&%S=%]D:7(````````#```"X@```EX```!2@P```D!M86QL;V,`````
  71133. +M!````8X```%V```!;````**&```"7T1/4T)A<V4````&```"=````@8```'L
  71134. +M```!U@```30```$<@P``!$!C;VYV97)T7V]S97)R```````"```"#@```4B&
  71135. +M```"7V5R<FYO```````#```"(````A(```%,@P```T!C:&MA8F]R=```````
  71136. +M``4```,N```##@```J8```):```!E(,```)`7V=E=%]C9`````$```'*A@``
  71137. +M`U]L87-T7V5N=')Y``````$```+L`````````_$````#`````$]05%,`!`!`
  71138. +M```#\@```^D````(2.<!`BQL``!R`$ZN_X(N`"(`3J[_@B`'3-]`@$YU````
  71139. +M``/OA@```E]$3U-"87-E`````0````8````````#\0````,`````3U!44P`$
  71140. +M`$````/R```#ZP````(```/R```#Z0```!L@;P`$("\`")[\`$1(YP,$+@`J
  71141. +M2'S_3KH``"!-0^\`#DZZ``!*@&8D<!#`KP`6YH!R4.6)PJ\`%NR!@H#"A[*'
  71142. +M9@1\`&`&<`TI0```(`9,WR#`WOP`1$YU(&\`!"`O``A(YP$$3-\@@&">````
  71143. +M``/O@P```T!C:&MA8F]R=`````````$````8@P```T!?9FEB<W1A=```````
  71144. +M``$````BA@```E]E<G)N;P```````0```$H````````#\0````,`````3U!4
  71145. +M4P`$`$````/R```#Z0```$$@+P`$(&\`"%E/2.<G%BX`*DA.N@``2&\`'$AX
  71146. +M"`$O!TZZ``!/[P`,4H!F!G#_8```RD*G+&P``'(")`].KO\<3^\`!"9`2H!G
  71147. +M+"(O`!PD"TZN_GI*0&<>("\`'.6`+PT@0"\H``@B0G``D<A.N@``4$]\`&!@
  71148. +M3J[_?"H`<BY&`;"!9D9\`"`O`!SE@"!`*J@`"$WM``1"GBS\```A_W`!/,`\
  71149. +MP$)>*WP```(``#)"K0`V0JT`%B`\#PP_`"M``"(K0``:*T``*F`,?/\@!4ZZ
  71150. +M```I0```(`MG#"0++&P``'("3J[_%DAO`!Q(>`@"+P=.N@``3^\`#"`&3-]H
  71151. +MY%A/3G4``````^^#```#0&-H:V%B;W)T`````````0```!2#```"7VEO8W1L
  71152. +M```````"````\@```"*&```"7T1/4T)A<V4````"````W@```#:#```#0%]L
  71153. +M9FEB<W1A=````````0```&Z#```$0&-O;G9E<G1?;W-E<G(```````$```#0
  71154. +MA@```E]E<G)N;P```````0```-0````````#\0````,`````3U!44P`$`$``
  71155. +M``/R```#Z0````X@;P`$(F\`"$CG,!8F22I(3KH``"(+)`TL;```=@%.KOY$
  71156. +M2H!G!'``8`9.N@``</],WV@,3G4``````^^#```#0&-H:V%B;W)T````````
  71157. +M`0```!*&```"7T1/4T)A<V4````!````&H,```)`7W-E=&5R<@````$````L
  71158. +M`````````_$````#`````$]05%,`!`!````#\@```^D````^(&\`!")O``A9
  71159. +M3TCG,S8J2'X`(&P``"PH`.`O20`@2H9F($JL``!F&D'L`!@B""QL```D/```
  71160. +M`^U.KO_B+`!G`GX!2H9G-B(&0>P`(B0(0>P``"8(+&P``$ZN_IXB!B0-)B\`
  71161. +M($ZN_IXB!G0*3J[^R$J'9U@B!DZN_]Q@4"!L```F:`"X,'S__[?(9T!#[``H
  71162. +M<"4L>``$3J[]V"1`2H!G+"EL````#"E-`!`O"B!++$I#[``$E<HF;P`D3J[]
  71163. +MM$S?!``B2BQX``1.KOYB3-]LS%A/3G4@;P`$0^\`"&$`_RI.=2!O``1#[P`(
  71164. +M80#_''`43KH``$YU``````/X````!@````$```"R````J````*0```".````
  71165. +M2@```"H````````#[X8```%?7W5S`````@```'X````4A@```U]?5T)E;F-H
  71166. +M37-G``````$````DA@```E]$3U-"87-E`````@```%8````PA@``!%]?4')O
  71167. +M9W)A;4YA;64````````"````H@```%"#```"0&5X:70````````!````\@``
  71168. +M``````/Q`````P````!/4%13``0`0````_(```/J````#T]K```````4````
  71169. +M`````````````````&-O;G-O;&4Z```E<SH@``!I;G1U:71I;VXN;&EB<F%R
  71170. +M>0```````^P````!`````0```!0````````#\@```^D````'2.<@`B(O``Q!
  71171. +M[P`0)`@L;```3J[_'$S?0`1.=0```^^&```"7T1/4T)A<V4````!````$```
  71172. +M``````/Q`````P````!/4%13``0`0````_(```/I````#R!O``0O#2I(*JP`
  71173. +M`$'M``0J7T[Z```@;P`$("\`"$CG`00N`"I((!5.N@``0>T`!"`'3-\@@$[Z
  71174. +M`````````^^&```#7U]S:6=?;6%S:P```````0````J#```"0%]S971J;7``
  71175. +M```!````%(,```-`<VEG<V5T;6%S:P`````!````*H,```-`7VQO;F=J;7``
  71176. +M```````!````.`````````/Q`````P````!/4%13``0`0````_(```/I````
  71177. +M!R!O``0@+P`(+P`O+```+PA.N@``3^\`#'``3G4```/OA@``!%]?<WES=&5M
  71178. +M7VYA;64````````!````#(,```)?<W1R;F-P>0````$````2`````````_$`
  71179. +M```#`````$]05%,`!`!````#\@```^D````I(&\`!)[\`%1(YS@6*D@@#6<D
  71180. +M2A5G("!-2AAF_%.(D<TB""!-<`).N@``0>P``'`"(@!.N@``("P``&\2L*P`
  71181. +M`&X,Y8!![```)G`(`&`L4H!F)"(L``!![P`;)@@L;```=`!X44ZN_BQ*0&<$
  71182. +M)D-@"D?L``1@!$?L``@@2TH89OQ3B)'+(@@@2W`"3KH``$'L`!QP`G(!3KH`
  71183. +M`$S?:!S>_`!43G4```/X````!`````$```"0````>````'(````L````````
  71184. +M`^^#```"0'=R:71E```````$````F````(P````T````*(8```)?97)R;F\`
  71185. +M``````$````XA@```U]S>7-?;F5R<@````````$````^A@```U]S>7-?97)R
  71186. +M;&ES=`````$```!&A@```E]?3U-%4E(``````0```%2&```"7T1/4T)A<V4`
  71187. +M```!````7@````````/Q`````P````!/4%13``0`0````_(```/J````"#H@
  71188. +M```T,@``56YK;F]W;B!E<G)O<B!C;V1E```*```````#\@```^D````````#
  71189. +M\0````,`````3U!44P`$``````/R```#Z@```,9N;R!S:6=N86P`:&%N9W5P
  71190. +M``!I;G1E<G)U<'0`<75I=```:6QL96=A;"!I;G-T<G5C=&EO;@!T<F%C92!T
  71191. +M<F%P``!A8F]R=`!E;70@:6YS=')U8W1I;VX`9FQO871I;F<@<&]I;G0@97AC
  71192. +M97!T:6]N``!K:6QL``!B=7,@97)R;W(`<V5G;65N=&%T:6]N('9I;VQA=&EO
  71193. +M;@``8F%D(&%R9W5M96YT('1O('-Y<W1E;2!C86QL`'=R:71E(&]N(&$@<&EP
  71194. +M92!W:71H(&YO(&]N92!T;R!R96%D(&ET``!A;&%R;2!C;&]C:P!S;V9T=V%R
  71195. +M92!T97)M:6YA=&EO;B!S:6=N86P@9G)O;2!K:6QL`'-T871U<R!S:6=N86P`
  71196. +M<V5N9&%B;&4@<W1O<"!S:6=N86P@;F]T(&9R;VT@='1Y`'-T;W`@<VEG;F%L
  71197. +M(&9R;VT@='1Y``!C;VYT:6YU92!A('-T;W!P960@<')O8V5S<P``8VAI;&0@
  71198. +M<W1A='5S(&AA<R!C:&%N9V5D``!B86-K9W)O=6YD(')E860@871T96UP=&5D
  71199. +M(&9R;VT@8V]N=')O;"!T='D``&)A8VMG<F]U;F0@=W)I=&4@871T96UP=&5D
  71200. +M(&9R;VT@8V]N=')O;"!T='D`:6YP=70@<F5C;W)D(&%V86EL86)L92!A="!C
  71201. +M;VYT<F]L('1T>0!E>&-E961E9"!#4%4@=&EM92!L:6UI=`!E>&-E961E9"!F
  71202. +M:6QE('-I>F4@;&EM:70``'5N:VYO=VX@<VEG;F%L``!U;FMN;W=N('-I9VYA
  71203. +M;```=VEN9&]W(&-H86YG960``'5N:VYO=VX@<VEG;F%L``!U<V5R('-I9VYA
  71204. +M;"`Q`'5S97(@<VEG;F%L(#(```````````H````2````'````"(````V````
  71205. +M0@```$@```!8````<@```'@```""````F@```+8```#>````Z@```1````$>
  71206. +M```!0````58```%R```!C````;@```'D```""@```B(```(\```"3````EP`
  71207. +M``)L```"?````HH```/L````(`````$```,4```#$````PP```,(```#!```
  71208. +M`P````+\```"^````O0```+P```"[````N@```+D```"X````MP```+8```"
  71209. +MU````M````+,```"R````L0```+````"O````K@```*T```"L````JP```*H
  71210. +M```"I````J````*<```"F`````````/R```#Z0```#H@+P`$(&\`""(O``PB
  71211. +M;P`064](YP<4+`$N`"I(+TD`%'H`)FP``&`N2H=G""`K``R^@&8@>@%P`;"K
  71212. +M`!1F%BHK``P@#6<$*JL`&"!+3KH``"`%8"HF4TJ39LX(!@``9P1P`&`:2H5F
  71213. +M"G`**4```'#_8`QP`$ZZ``!.N@``8*),WRC@6$].=2!O``0@+P`((F\`#$CG
  71214. +M`10B`'``3-\H@&``_W`@;P`$+PUP`"(`D\DJ7V``_UX@+P`$(&\`""(O``Q(
  71215. +MYP,$+`$N`"I(4H!F`GX`2H=J`D2'(`<B!B!-D\E,WR#`8`#_+``````#[X8`
  71216. +M``-?7W!R;V-E<W-E<P`````!````)(,```-`7V9R965?96YT<GD````!````
  71217. +M3H8```)?97)R;F\```````$```!L@P``!$!?=V%I=%]S:6=N86QS```````!
  71218. +M````=H,```1`7VAA;F1L95]S:6=N86QS`````0```'H````````#\0````,`
  71219. +M````3U!44P`$`$````/R```#Z0```!(@+P`$44](YP,`+@!.N@``(`=.N@``
  71220. +M2H!G(B)`(&D`'"](``P@:0`$<`$B;P`,3I$L`"`'3KH``"`&8`)P_TS?`,!0
  71221. +M3TYU``````/O@P```T!C:&MA8F]R=`````````$````.@P```T!?9FEN9%]F
  71222. +M9`````````$````4@P```T!?9G)E95]F9`````````$````V`````````_$`
  71223. +M```#`````$]05%,`!``````#\@```^D````#(&\`!"`O``A.^@`````#[X,`
  71224. +M``)`<W1R<F-H<@````$````*`````````_$````#`````$]05%,`!``````#
  71225. +M\@```^D````#(&\`!"`O``A.^@`````#[X,```)`<W1R8VAR``````$````*
  71226. +M`````````_$````#`````$]05%,`!``````#\@```^D```!-2.<`!G`(<@`L
  71227. +M>``$3J[_.BI`2H!F!'``8"Y"K0`$2'@`*'``+P!![```<@&3R<%!3KH``%!/
  71228. +M*H!F#")-<`A.KO\N<`!@`B`-3-]@`$YU(&\`!$CG``8J2"`-9Q@@36$``!X@
  71229. +M54ZZ```B37`(+'@`!$ZN_RY,WV``3G4@;P`$2.<`!BI(2JT`!&<4(E4L>``$
  71230. +M3J[^(")53J[^)D*M``1,WV``3G4@;P`$(%`B:``.<``0*0`/<@'AH2`!3G4@
  71231. +M;P`$("\`""(O``Q(YP,&+`$N`"I(8:I*AV8$2H9G'B)5(T<`("-&`"0S?``)
  71232. +M`!PL>``$3J[^,G`!*T``!$S?8,!.=2!O``1(YP`&*DA*K0`$9QPB52QX``1.
  71233. +MKOXL2D!G#B)53J[^)D*M``1P`6`"<`!,WV``3G4```/X`````0````$````H
  71234. +M`````````^^#```$0%]D979I8V5?;W!E;@````````$````R@P``!$!?9&5V
  71235. +M:6-E7V-L;W-E```````!````9@````````/Q`````P````!/4%13``0`0```
  71236. +M`_(```/J````!'1I;65R+F1E=FEC90````````/R```#Z0```!XO#B`L```B
  71237. +M`$A!0D'2@"`L``"S@"E```1"K``(0^P`!'``+'@`!$ZN_=@I0```</].KOZV
  71238. +M2(!(P"E```!*K```9PA*@&L$<`%@`G``*4``#"Q?3G4O#B`L``!K""QX``1.
  71239. +MKOZP("P``&<*(D`L>``$3J[^8BQ?3G4```/X`````P````$```!8````.@``
  71240. +M`!X````&`````@```&8```!.````/@```"P````:````%@````````/OA@``
  71241. +M!%]?<W1A<G1U<%]T:6UE```````!````!(8```%?7W5S`````0```!``````
  71242. +M```#\0````,`````3U!44P`$`$````/R```#Z@````7_____9FEF;RYL:6)R
  71243. +M87)Y`````````_(```/K````!````_(```/I````%B`O``113TCG`P`N`$ZZ
  71244. +M```@!TZZ``!*@&<H(D`@:0`<<D#EB<*1+T@`#"`!(&D`!")O``Q.D2P`(`=.
  71245. +MN@``(`9@`G#_3-\`P%!/3G4@+P`$+P<N'V"N``````/O@P```T!C:&MA8F]R
  71246. +M=`````````$````.@P```T!?9FEN9%]F9`````````$````4@P```T!?9G)E
  71247. +M95]F9`````````$````\`````````_$````#`````$]05%,`!``````#\@``
  71248. +M`^D```!B(&\`!"`O``@B;P`,+V\`$``$+V\`%``(+V\`&``,+V\`'``0+V\`
  71249. +M(``4+V\`)``844](YP<4+@!([P,``!1\`"IL``!@%DJM``1F"C!\``$K2``$
  71250. +M8`Q2AMK\`"2\K``$;>0@+``$O(!F>'(*TZP`!"`L``0B`.>!TH#E@2`!3KH`
  71251. +M`"I`2H!F#'`,*4```'#_8```CG#VT*P`!"(`YX'2@.6!(&P``")-8`(2V%.!
  71252. +M9/H@+```9P8@0$ZZ```I30``>O;:K``$(`7G@-"%Y8#;P)?+*TL`!%*%VOP`
  71253. +M)+JL``1M\"`&YX#0AN6`(&P``"&O`!0(!"&'"``AKP`8"`A+[P`@(9T(#"&=
  71254. +M"!`AG0@42^\`+"&="!@AG0@<(9T(("`&3-\HX%!/3G4@+P`$(@!K%K*L``1L
  71255. +M$"`!YX#0@>6`(&P``$*P"`1.=2`O``1(YP$$+@!K'KZL``1L&"`'YX#0A^6`
  71256. +M*FP``-O`2JT`!&<$(`U@"'`)*4```'``3-\@@$YU("P`!$YU``````/X````
  71257. +M$0````$```&"```!9````58```%````!,@```.P```#>````Q````+X```"R
  71258. +M````I````)@```!R````;@```&0```!>````0@````````/O@P```D!M86QL
  71259. +M;V,``````0```("&```"7V5R<FYO```````"```!=@```(R#```"0&9R964`
  71260. +M```````!````N@````````/Q`````P````!/4%13``0`0````_(```/K````
  71261. +M`@```_(```/I````&B!O``0B;P`(GOP`#$CG(18F22I(3KH``"`+9P8N*P`$
  71262. +M8`B1R$ZZ```N`'#_OH!F!'``8"@@!T'O`!1.N@``(@U![P`4)`@L;```3J[^
  71263. +M=$J`9P1P`&`&3KH``'#_3-]HA-[\``Q.=0`````#[X,```-`8VAK86)O<G0`
  71264. +M```````!````%H,```)`=&EM90````````$````F@P```T!?9VUT,F%M:6=A
  71265. +M``````$````\A@```E]$3U-"87-E`````0```$B#```"0%]S971E<G(````!
  71266. +M````6`````````/Q`````P````!/4%13``0`0````_(```/I````!R!O``0B
  71267. +M;P`(("\`#"\+)DDB2"!+)E].^@````````/O@P```D!M96UM;W9E`````0``
  71268. +M`!@````````#\0````,`````3U!44P`$``````/R```#Z0```%(@;P`$(F\`
  71269. +M"%%/2.<!%"9)*DA.N@``0>\`#$ZZ```@#6<(0>\`#"K8*M@@"V<``-)![P`,
  71270. +M3KH``"!`("@`)$2`<CQ.N@``)H!^`"!L``1#[```$!BP&68,2@!F]F8&?@1@
  71271. +M``":(&P`!$/L``@0&+`99@Q*`&;V9@9^`V```(`@;``$0^P`$!`8L!EF"DH`
  71272. +M9O9F!'X%8&8@;``$0^P`&!`8L!EF!DH`9O9G4"!L``1#[``<$!BP&68&2@!F
  71273. +M]F<\(&P`!$/L`"`0&+`99@9*`&;V9R@@;``$0^P`)!`8L!EF!DH`9O9G%"!L
  71274. +M``1#[``H$!BP&68(2@!F]F8"?@$G1P`$<`!,WRB`4$].=2!O``2>_``0+PTJ
  71275. +M2$'O``Q#[P`$80#^Z"JO``P@+P`00^T`!#+`("\`!#+`("P``#+`<``J7][\
  71276. +M`!!.=0`````#^`````@````!````[````-@```#$````L````)P```"$````
  71277. +M:@```%`````````#[X,```-`8VAK86)O<G0````````!````%(,```-`7V=E
  71278. +M='1I;64````````!````'(,```-`;&]C86QT:6UE```````!````-H,```)?
  71279. +M7T-81#,S``````$```!$A@```E]T>FYA;64`````"````.@```#4````P```
  71280. +M`*P```"8````@````&8```!,A@```U]D87EL:6=H=`````````$```$X````
  71281. +M`````_$````#`````$]05%,`!`!````#\@```^H````,3454($135`!7150@
  71282. +M1%-4`$5%5"!$4U0`1414`$-$5`!-1%0`4$14`$%+1%0````````#\@```^D`
  71283. +M```P(&\`!$CG``8J2"QL``!.KO^^!I4/##\`<`!,WV``3G4@+P`$(&\`"%E/
  71284. +M!(`/##\`(CP``5&`+H!.N@``((`@%R(\``%1@$ZZ```@`2Z!<CQ.N@``(4``
  71285. +M!"`7<CQ.N@``(`'E@)"!YX#0@="`(4``"%A/3G4@;P`$64](YR`$2]`@'2(`
  71286. +MZ8&2@"`!YX#0@2(`Y8'2@.^!(!TD`.F"E(#E@B`=+T$`"'(R3KH``-""T*\`
  71287. +M"`:`#PP_`$S?(`183TYU```#[X8```-?5&EM97)"87-E```````!````#(,`
  71288. +M``)?7T-81#,S``````4```"J````7@```%(```!(````.@````````/Q````
  71289. +M`P````!/4%13``0`0````_(```/I````"R`O``193RZ`0>P`!"`(6$].=2!O
  71290. +M``193RZ(0>P`!"`(6$].=2`L``1.=0`````#^`````,````!````)@```!P`
  71291. +M```*`````````_$````#`````$]05%,`!`!````#\@```^H````)````````
  71292. +M``````````$````````````"```````````````````#[`````(````!````
  71293. +M%`````@````````#\@```^D````J(&\`!")O``@@+P`,64](YS\V+@`J2"])
  71294. +M`"B7RTZZ```B#20++&P``$ZN_7XF0"("3J[]>"`+9@9.N@``8%XD;P`H0A(J
  71295. +M!U*%(A,D*P`$)@TH"BQL``!.KOY*2H!G&"(+3J[]>$H29@1P`F`L+P1.N@``
  71296. +M6$]@*$ZN_WPL`'(R1@&P@68(""L``0`+9I0B"TZN_7@@!DZZ```I0```</],
  71297. +MWVS\6$].=0`````#[X,```-`8VAK86)O<G0````````!````'H8```)?1$]3
  71298. +M0F%S90````(```!4````)H,```)`7W-E=&5R<@````$````Z@P```E]S=')L
  71299. +M96X``````0```'"#```$0&-O;G9E<G1?;W-E<G(```````$```"6A@```E]E
  71300. +M<G)N;P```````0```)H````````#\0````,`````3U!44P`$`$````/R```#
  71301. +MZ0```"Q93TJL`!)F#$'O``,I2``28>Y@%D'O``,B;``2L\AD!'`!8`)P_RE`
  71302. +M``!83TYU64](YP$4+B\`%$JL``!F`F'`*FP`%F`N("P``&\,0>\`#R)M``2S
  71303. +MR&(02H!J'$'O``\B;0`$L\AD$"95+PU.N@``6$\J2R`-9LXI30`62H=F!'``
  71304. +M8")0AR\'3KH``"!`(*P`%D/O`!,A20`$0^@`"%A/*4``%B`)3-\H@%A/3G4`
  71305. +M`````_@````'`````0```*(```"0````>@```$(````:````#@````0````#
  71306. +M`````@```$@````Z````*`````````/O@P```E]F<F5E`````````0```&Z#
  71307. +M```"7VUA;&QO8P`````!````B@````````/Q`````P````!/4%13``0`0```
  71308. +M`_(```/J````!T`H(REA;&QO8V$N8PDQ+C$```````````````````/R```#
  71309. +MZP````$```/R```#Z0```#8@;P`$64](YR,"(@@L;```=/Y.KO^L+T``$&<Z
  71310. +M+BP``$ZZ```L`&`>2&\`$$AX"`4O!DZZ``!/[P`,2H!F""E'``!P`&`24X9L
  71311. +MWB(O`!`L;```3J[_IG#_3-]`Q%A/3G4@;P`$2.<A!BI(3KH``"(-+&P``$ZN
  71312. +M_[A*@&<$<`!@4$ZN_WPN`')OTH&P@68@(@UT`$ZN_T9*@&<.(@U.KO^X2H!G
  71313. +M!"`"8"A.KO]\+@!P9="`OH!F#B!-80#_2DJ`9@1P`&`,(`=.N@``*4```'#_
  71314. +M3-]@A$YU``````/OA@```E]$3U-"87-E`````P```'(```!0````#H8```)?
  71315. +M97)R;F\```````,```#,````0````!Z#```#0%]L87-T7V9D`````````0``
  71316. +M`"*#```"7VEO8W1L```````!````-(,```-`8VAK86)O<G0````````!````
  71317. +M;(,```1`8V]N=F5R=%]O<V5R<@```````0```,@````````#\0````,`````
  71318. +M3U!44P`$`$````/R```#Z0```AI(YP`&<"(B/``!``$L>``$3J[_.BI`2H!F
  71319. +M!'``8"`;?``$``A-[0`.0AX@+```',`L[```0>T`%$ZZ```@#4S?8`!.=2!O
  71320. +M``0O#B)(<"(L>``$3J[_+BQ?3G4@;P`$2.<`!BI(("T`(&<*+&P``'(`3J[_
  71321. +MW"`M`"1G#"QL``!R0.&)3J[_W"`M`#1G!B!`3KH``"`M`#AG!B!`3KH``"!M
  71322. +M`#QAI"!-3-]@`$[Z``!(YP(&+`$J2$J`9Q0@+0`@(BT`-"QL```P?``!3J[_
  71323. +MRDJ&9Q0@+0`D(BT`."QL```P?``"3J[_RG`!(BP``..@3-]@0$YU2.<#-B9)
  71324. +M*D@N$R!O`!PL$&`4(&T`-+'*9@1^`&`(M>T`.&8"?``@;0`\+'@`!$ZN_HPD
  71325. +M0$J`9MI*AV<60I,@+0`@(BT`-"QL```P?``#3J[_RDJ&9U(@;P`<0I`@+0`D
  71326. +M(BT`."QL```P?``#3J[_RF`V<`$B+```XZ`L>``$3J[^PB!M`#PL>``$3J[^
  71327. +MC"1`2H!GWB!M`#2QRF8$?@!@"+7M`#AF`GP`2H=FUDJ&9M)P`2(L``#CH"(`
  71328. +M<``L>``$3J[^SDS?;,!.=5E/2.<#%BX`)DDJ2&```(9"K0`L""T``@`S9PQP
  71329. +M(RE```!P_V```*PL;```<@%.KO\Z("T`("(M`#0L;```,'P``4ZN_\H@;0`\
  71330. +M<``0*``/<@'AH2`!3KH``"P`("T`("(M`#0P?``#3J[_RF`0<`$B+```XZ`L
  71331. +M>``$3J[^PB!M`#PL>``$3J[^C$J`9^`@!DZZ```@+0`@0>\`%"(((&T`+"QL
  71332. +M``!.KO_6+`!G`/]B(`92@&8"?`"\AV,"+`<@!B!O`!1@`A;84X!D^B`&*T``
  71333. +M+$S?:,!83TYUGOP`2$CG#Q8N`"I()DDO20`<2H=F``"*("T`)"QL``!R0.&)
  71334. +M3J[_W"!-0^\`(!+89OQ![P`@0^P``$ZZ```@34/O`$(2V&;\0>\`0D/L``1.
  71335. +MN@``""T````S9P@(+0`/`#)G!D'O`"!@!$'O`$(@"')`Z8D@?```C@!.KO_B
  71336. +M*T``)&<``.PL;```3J[_Q$J`:@)2@.*`*T``*'``8```X$JM`"1G``#*+"T`
  71337. +M*'H`8```M+R'8P``CBP'8```B`@M``(`,V<02H5G!B`%8```L'`C8```I"`M
  71338. +M`"0B+0`X+&P``#!\``).KO_*(&T`/'``$"@`#W(!X:$@`4ZZ```H`"`M`"0B
  71339. +M+0`X,'P``TZN_\I@$'`!(BP``..@+'@`!$ZN_L(@;0`\+'@`!$ZN_HQ*@&?@
  71340. +M(`1.N@``2H!G"$J%9P0@!6`Z("T`)"(+($8L;```3J[_T"@`9P#_9DJ$:Q+:
  71341. +MA)Z$U\1P`+Z`8@#_2"`%8`YP#4ZZ``!P("E```!P_TS?:/#>_`!(3G6>_``,
  71342. +M2-<!`W`=*4```'#_WOP`#$YU64\N@&$`_")P`%A/3G6>_``L2.<@%B9)*DA*
  71343. +M@&<2!(````@!9R)3@&<``)Q@``"J2I-G"`CM``(`,V`&"*T``@`S<`!@``":
  71344. +M<`/`K0`P5X!F*`@M``\`,F<&0>P`&&`$0>P`&B\(+PU(;``(2&\`'$ZZ``!/
  71345. +M[P`08"H(+0```#-G$"\-2&P`'$AO`!A.N@``8`XO#4AL`"9(;P`83KH``$_O
  71346. +M``Q![P`0(@@L;```)#P```/M3J[_XB:`9P1P`&`@3KH``&`8(!-G"B(`+&P`
  71347. +M`$ZN_]QP`&`(<!8I0```</],WV@$WOP`+$YU(&\`!"`O``@B+P`,+V\`$``$
  71348. +MGOP`3$CG#S8J+P!P+`$N`$*O`&B;S9?++T@`('!`3KH``"1`2H!G``&@80#Z
  71349. +MHB]``&AG``&4<!1.N@``*D!*@&<``89P%$ZZ```F0$J`9P`!>'`%&T``""!O
  71350. +M`&@K2``.<A0[00`2%T``""=(``XW00`2)4@`/"5-`#0E2P`XD<@E2``D)4@`
  71351. +M("5(`#!*AV<&".H````S2H9G!@CJ``$`,TAZ_G!(>OY>2'K^1$AZ_+A(>OO:
  71352. +M2'K[#"`J`#`@2D/Z^KQ.N@``3^\`&"@`9P``\$J%9P8(Z@`/`#(@;P`@(DH2
  71353. +MV&;\($I#[P`D$MAF_$'O`"1#[``T3KH``"!*0^\`1A+89OQ![P!&0^P`.$ZZ
  71354. +M``!*AV<H2H9G!$J%9@9![P`D8`1![P!&(`@L;```<D#IB3!\#0!.KO_B)4``
  71355. +M($J&9RI*AV<$2H5G!D'O`"1@!$'O`$8@""QL``!R0.F)('P``(X`3J[_XB5`
  71356. +M`"1*J@`@9@1*AV8J("H`)&8$2H9F($J`9Q0L;```3J[_Q$J`:@)2@.*`)4``
  71357. +M*$*J`"P@!&!8("H`(&<*+&P``'(`3J[_W"`J`"1G"BQL``!R`$ZN_]Q*A&L&
  71358. +M(`1.N@``(`UG!B!-3KH``"`+9P8@2TZZ```J;P!H(`UG!B!-80#Y+B`*9P8@
  71359. +M2DZZ``!P_TS?;/#>_`!,3G4@;P`$GOP`("\-*DA.N@``2JP``&8(<`8I0```
  71360. +M8&@@+```4JP``"(L``#2@"\!2&P`/$AO``Q.N@``<``N@$'O`!!R`<%!80#]
  71361. +MN$_O``PJ@<<``O`$'O``AR`6$`_:)83RM```1K!'``8!P@%4ZZ``!*@&<*
  71362. +M($`@:``$80#XKB`53KH``'#_*E_>_``@3G4@+P`$(B\`""]O``P`!"!O`!">
  71363. +M_``H+PTJ2$CO``,`!$ZZ``!*K```9@AP!BE```!@:"`L``!2K```(BP``-*`
  71364. +M+P%(;`!(2&\`%$ZZ``!P`2Z`(@!![P`8P4%A`/T43^\`#"J`:S1"IT'O`!!P
  71365. +M`2(`80#\_EA/*T``!&L$<`!@'"`53KH``$J`9PH@0"!H``1A`/@*(!5.N@``
  71366. +M</\J7][\`"A.=0`````#^`````L````!```(!@``!V(```8\```&)@``!,P`
  71367. +M``2\```$H```!)@```22```"Y@```M`````````#[X8```-?7V9I9F]?<VEG
  71368. +M```````&```#K@```C````&H```!:@```.H````LA@```5]?=7,````!````
  71369. +M,H,```)`3F5W3&ES=`````$````ZA@```U]?1FEF;T)A<V4``````!$```;H
  71370. +M```&V```!K8```:(```&7````^8```-X```#(````K8```)B```!^@```5H`
  71371. +M``$\````W````,0```!\````;(,```)`9G)E90````````8```<D```'#```
  71372. +M!P(```"L````G````)"&```"7V5R<FYO```````&```'\```!TP```42```$
  71373. +M+```!!(```'>A@```E]$3U-"87-E`````P``!00```3B```!Z(,```1`7W=A
  71374. +M:71?<VEG;F%L<P```````@```Y0```(6@P``!$!?:&%N9&QE7W-I9VYA;',`
  71375. +M```"```#S@```E"#```"0'-T<F-A=``````$```&0```!BH```+J```"U(,`
  71376. +M``1`7W-I9U]D:7-P871C:````````0``!`R#```#7U]S<')I;G1F````````
  71377. +M!0``"`X```=J```$U```!,0```2H@P```D!?<V5T97)R`````0``!/B#```"
  71378. +M0&UA;&QO8P`````#```%>@``!6P```52@P```T!?86QL;V-?9F0```````$`
  71379. +M``7V@P```T!?9G)E95]F9`````````,```A:```'M@``!OB#```#0&-H:V%B
  71380. +M;W)T`````````@``!^0```=`A@```U]?9FEF;U]O:P````````(```?H```'
  71381. +M1(8```1?7V9I9F]?;V9F<V5T````````!```!_H```?V```'5@``!U*&```#
  71382. +M7U]F:69O7V)A<V4``````@``!_X```=:@P```T!?9FEN9%]F9`````````(`
  71383. +M``A&```'H@````````/Q`````P````!/4%13``0`0````_(```/J````%5]M
  71384. +M``!?<P``9FEF;SHE<R]R=V5S2R5S`&T```!F:69O.B5S+W(`9FEF;SHE<R]M
  71385. +M=V5+``!?;0``7W,``'5X9FEF;RXE;'@``'5X9FEF;RXE;'@``````_(```/I
  71386. +M````"2`O``193RZ`0>P`%B`(6$].=2!O``193RZ(0>P`%B`(6$].=0```_@`
  71387. +M```"`````0```!P````*`````````_$````#`````$]05%,`!`!````#\@``
  71388. +M`^H````)=7-E<@````````````!W:&5E;`````````X````4```````&```#
  71389. +M[`````0````!````(````!H````6````!@````````/R```#Z0```*D@+P`$
  71390. +M64\N@"`L`0QG#B!`3KH``$J`9P1R`6`"<@`@`5A/3G4@+P`$(&P!#'(`3OH`
  71391. +M`$ZZ```I0`$,9@I(;```3KH``%A/(&P!#$ZZ``"!K```3G4@;`$,3OH```CL
  71392. +M``P``DYU("\`!`@```Q6P$0`2(!(P$YU".P`#0`"3G4@+P`$"```#5;`1`!(
  71393. +M@$C`3G5.N@``<``@;```$"@`#W(!X:&#K```3G5.^@``("\`!%E/2.<!%B]`
  71394. +M`!!^`&`N("T`%$ZZ```F0$J`9Q1*JP`49@Y^`7`!)T``%"=M`!@`&")-<!PL
  71395. +M>``$3J[_+B!L```L>``$3J[^C"I`2H!FP"`'3-]H@%A/3G4@+P`$2.</!"X`
  71396. +M<`'OH"P`<`F^@&8&<`!.N@``("P!!,"&9P:-K`$(8'HJ!D:%RZP!"$J':V9P
  71397. +M(+Z`;&`@!^>`0>P`!"IP"``P?``!N\AF+"`'58!G%%.`9Q!R#9"!9SQ9@&<X
  71398. +M48!G-&`*2&P`&$ZZ``!83W``3KH``&`@(`UG'"`'YX`H!D'L``2(L`@$B:P!
  71399. +M!"`'3I5&A,FL`00@+`$(P(9FBDS?(/!.=2`O``0O#B(L``""@'``+'@`!$ZN
  71400. +M_LXL7TYU("\`!"\.(@`@+```@($L>``$3J[^PBQ?3G4@+P`$2.<#`"X`?`!A
  71401. +M`/X02H!G"'P!<`YA`/\,(`=A`/YB2H!G"'P!<`)A`/[Z(`=A`/YJ2H!G"'P!
  71402. +M<`-A`/[H(`=A`/Z&2H!G"'P!<!1A`/[6(`9,WP#`3G4@+P`$+P<I0```<`@N
  71403. +M'V``_KQP`&$`_V!@D&#V2.<!%'X`2^P`!#9\``$JBT*M``12AU"-<""^@&WP
  71404. +M0JP!"$*L`01"K```80#]U&$`_>IA`/VB3-\H@&``_?AA`/VX8`#^"``````#
  71405. +M^`````(````!```!=````#X````7`````@```H0```*````"?````F0```'6
  71406. +M```!N@```:8```&B```!F````9````%*```!.````2X```$F````I````'H`
  71407. +M``!@````5@```%````!(````.````"H````*`````````^^#```$0%]T:6UE
  71408. +M<E]E>'!I<F5D``````$````2@P``!$!?=&EM97)?<W1A<G0````````!````
  71409. +M,(,```1`7V%L;&]C7W1I;65R`````````0```#2#```"7U]F86EL```````!
  71410. +M````0H,```-`7W1I;65R7W-I9P`````!````3(,```-`7V9R965?=&EM97(`
  71411. +M```!````6H,```1`7VEN:71?<')O8V5S<V5S`````0```)*&```$7U]C:&EL
  71412. +M9')E;E]E>&ET``````(```#N````F(,```5`7V-L96%N=7!?<')O8V5S<V5S
  71413. +M``````$```"J@P```T!?9FEN9%]P:60```````$```#$@P```D!?7V5X:70`
  71414. +M`````@```8````$B@P```U]?;65S<V%G90````````$```%XA@```E]?1E!%
  71415. +M4E(``````0```D@````````#\0````,`````3U!44P`$`$````/R```#Z@``
  71416. +M``I&86EL960@=&\@8W)E871E('1I;65R``!U<V5R(&EN=&5R<G5P=``````#
  71417. +M\@```^L```!$```#\@```^D```(=2&P`!$ZZ``!83TYU("\`!"\-3KH``"I`
  71418. +M2H!F`F'B(`TJ7TYU(&\`!"`O``@O"TZZ```F0$J`9@)AQB`+)E].=2!O``0O
  71419. +M#2I((`UF!$OL``X@34H89OQ3B)'-(`A2@$ZZ```@0$J`9@1P`&`((D@2W6;\
  71420. +M(`@J7TYU64](YP,T?@!\`"!L```F:`#08"Q**P`(9B0P/`4`P&L`#F8:4H<@
  71421. +M:P`*(`A*&&;\4XB1P"`(W(#<JP`45(8F4TJ39M`@!U*`Y8#0AF$`_THI0``8
  71422. +MY8<@0")`T\=%Z0`$+T``%&8*0>P``"E(`!A@5B!L```J:`#08$)*+0`(9CHP
  71423. +M/`4`P&T`#F8P)FT`"BXM`!0@;P`4(,HO2``48`(4VTH39OH4_``])FT`$&`"
  71424. +M%-L@!U.'2H!F]D(:*E5*E6:Z(&\`%$*03-\LP%A/3G4@;P`$("\`""\-*D@J
  71425. +M@$*M``3E@&$`_K0K0``(*E].=2!O``0B;P`(("\`#$CG(C0F22I(2H!G"B!+
  71426. +M80#^PB1`8`(D2R`*9SXB%20M``2T@6TB+`'<AG00TH*\@6T"(@8J@2`!Y8`@
  71427. +M;0`(3KH``"M```AG$D?M``0B$U*;Y8$@6R&*&`!P`4S?+$1.=2!O``0B;P`(
  71428. +M("\`#&&22H!F!&$`_AI.=2!O``0B;P`(2.<`%"9)*D@@+0`$T*L`!+"5;Q+0
  71429. +M@"J`Y8`@;0`(80#^&BM```@B+0`$Y8$@;0`(T<$@*P`$(@#E@2)K``A@`A#9
  71430. +M4X%D^M&M``0@:P`(3-\H`$[Z```@;P`$(F\`""]O``P`!"`O`!`B+P`464](
  71431. +MYP(T+`$J221(+T@`$$J`9T13@&<*4X!G``"V8```]%.&9R(@+P`8(@V0@2!O
  71432. +M`!!",`@`($$B;P`08`(2V%.`9/I@``#.0>P`$")O`!`2V&;\8```OB9O`!A@
  71433. +M;G!<L!5F9DHM``%G8%2-<`&\@&8&%/P`86!4(`95@&9&$"W__TB`2,!R(Y"!
  71434. +M9RY5@&<J58!G)E.`9R)3@&<>4X!G&G(5D(%G%'(<D(%G#E6`9PIR'Y"!9P15
  71435. +M@&8$%/P`)Q3M__]@"!3M__]@`A3=N\MECF!`)F\`&&`V<"JP%68N2BT``6<H
  71436. +M5(T0+?__2(!(P')ED(%G#'()D(%F#!3\``I@#A3\`!M@"!3M__]@`A3=N\ME
  71437. +MQD(23-\L0%A/3G6>_`$L2.<_-BIO`5@@;```#&@`)0`49`I(>``43KH``%A/
  71438. +M0JP`''`!*4``&"E``#YP`BE``#HI0`!@*7P```"$`%R3R2QX``1.KO[:*4``
  71439. +M`$ZZ```I0``$9@I(;``23KH``%A/(&P`!$ZZ```I0``(+&P`!"!6+&@`%"E.
  71440. +M`!1![P$P3J[_OBEO`3``#$ZZ``!.N@``(&P``"`H`*QG$.6`(D`B*0`TY8$I
  71441. +M00`08`8I:`"$`!!*%68``.A![``J(@@L;```)#P```/N3J[_XBP`0>P`,"((
  71442. +M3J[_XBX`0>P`-B((3J[_XBH`2H9G"$J'9P1*A68B2H9G!B(&3J[_W$J'9P8B
  71443. +M!TZN_]Q*A6<&(@5.KO_<80#[<G`!+P`O!2\`+P<B!L%!3KH``"!L```@*``<
  71444. +M0>\!6&$`_)Y/[P`0?`!^`&!0(FP``"!I`"0@,'@`9SXB`$/O`#`D"2QL``!V
  71445. +M0.6+3J[^;DJ`9R8B;```(&D`)-''("@`!&<((@(D`$ZN_(Y![P%(0^\`,'`!
  71446. +M80#\V%*&4(<@;```O*@`'&VF8``"S"QL``!.KO_**`!.KO_$*@!^`"!L```L
  71447. +M*`#@9BA^`4'L`#PB""0\```#[4ZN_^(L`&820>P`/B((3J[_XBP`9@1A`/JD
  71448. +M+P<O!G``+P`O!2($P4%.N@``0>\!6'`!80#[UB`\```%&F$`^HX@0#%\!```
  71449. +M$B]``#QP0.6(80#Z>D_O`!!^0.6/+T`!.&`"4HT0%4B`2,!![``!"#```P@`
  71450. +M9NP0%6<``A9R(K`!9C!2C29-8!!P*K`59@A*+0`!9P)2C5*-$!5G!G(BL`%F
  71451. +MYB1-$!5R(K`!9@)2C7P"8%1P)[`59B!2C29-8`)2C1`59P9R)[`!9O0D37`G
  71452. +ML!5F`E*-?`%@+B9-8!!P7+`59@A*+0`!9P)2C5*-$!5G$G(@L`%G#'(*L`%G
  71453. +M!G()L`%FVB1-?``@2RH*FHL@!5*`+T@`*&$`^;8F0$JO`4QF("`%($LB;P`H
  71454. +M3KH``$(S6`!![P%((DMP`&$`^V!@`/\FVH5R$-J!NH=O%"!O`3A.N@``(`5A
  71455. +M`/EV+@4O0`$X+PH@!B!+(F\`+'(!80#[KEA/(@LD+P$X)@<L;```3J[\N"H`
  71456. +M;!!"$B\O`"A(;`!$3KH``%!/2H5F(B\*(`8@2R)O`"QR`&$`^W1![P%,(DMP
  71457. +M`&$`^NA83V``_JQZ`2!O`"Q"J``(0B@`$4(H`!`O"B`&($LB;P`L<@)A`/M`
  71458. +M0>\!0'`080#Z)EA/(@LD+P`L+&P``$ZN_,HH`&8\8"IZ`")O`"S2_`$80>\!
  71459. +M/'`!80#Z($J`9@1X9V`2(B\`+"QL``!.KOS$*`!*A&?2(B\`+"QL``!.KOR^
  71460. +M<'30@+B`9PI(;`!83KH``%A/2H5G(B\*(`8@2R)O`"QR`&$`^L!![P%,(DMP
  71461. +M`&$`^C183V``_?@@+P%`(&\!1$ZZ``!![P%(0^\!/&$`^BH@2TZZ``!@`/W6
  71462. +M(&\!.$ZZ```@;P`L3KH``&$`^))![`!R3KH``"E```!F"$'L`'@I2```0>P`
  71463. +M?DZZ```I0``49@8I;````!1![`"(3KH``"E``!AF"$'L`(XI2``80>P`DDZZ
  71464. +M```I0``<9@A![`"8*4@`'$'L`*!.N@``*4``'&8(0>P`JBE(`!P@+P%,(&\!
  71465. +M4")L`!A.N@``<`!.N@``3-]L_-[\`2Q.=0```_@````5`````0``"$X```A`
  71466. +M```(.```""H```@B```(%```"`````?X```'Z@``!X0```;0```%3@``!3H`
  71467. +M``18```$3```!#8```/6```"J````.````!.`````@```!(````"```(7@``
  71468. +M"%(```A(```%+@``!"P```0D```$$```!`0```/V```#[````^@```/@```#
  71469. +MT````\@```#J````Y````,H```"$`````````^^#```"7U]F86EL```````$
  71470. +M```'B```!M0```/:````!H,```)`;6%L;&]C``````(```!@````%(,```)`
  71471. +M<F5A;&QO8P````(```&R````,(,```)`9G)E90````````4```?B```'V@``
  71472. +M!\X```:4```"1H8```)?4WES0F%S90````$```.(@P```E]?6$-%6$E4````
  71473. +M`0```YB&```"7U]?:6]B```````&```#N@```[(```.N```#J````Z0```.>
  71474. +M@P``!$!?86QL;V-?=&EM97(````````!```#S(,```-`7W1I;65R7W-I9P``
  71475. +M```!```#Y(,```-`7VEN:71?9FEF;P`````!```$"(,```1`7VEN:71?<VEG
  71476. +M;F%L<P```````0``!`R&```"7T1/4T)A<V4````'```'=```!V(```<T```&
  71477. +MO@``!1P```34```$/(,```1`7VEN:71?=6YI>&EO`````````@``!6X```2@
  71478. +MA@```U]?5T)E;F-H37-G``````0```4.```$Y```!+X```2DA@```E]?7V-T
  71479. +M>7!E`````0``!;"#```"0'-T<FYC<'D````!```&;H,```)`='%S;W)T````
  71480. +M``$```>\@P```T!?7V=E=&5N=@````````4```A$```(+@``"!@```@$```'
  71481. +M[H8```-?7V%M:6=A7W5S97(````)```(/```"#(```@F```('```"!````@.
  71482. +M```("```!_P```?R@P```D!M86EN`````````0``"&*#```"0&5X:70`````
  71483. +M```!```(:`````````/Q`````P````!/4%13``0`0````_(```/J````+```
  71484. +M``!.;R!M96UO<GD```!A`$9A:6QE9"!T;R!C<F5A=&4@=&EM97(``$Y)3#H`
  71485. +M`$Y)3#H``$Y)3#H``"H`3DE,.@``26YV86QI9"!W:6QD8V%R9"`E<P!%<G)O
  71486. +M<B!E>'!A;F1I;F<@87)G=6UE;G1S`%5315(``'5S97(``%5315).04U%``!(
  71487. +M3TU%``!S.@``4TA%3$P`8FEN.G-H``!(3U-43D%-10``86UI9V$````#\@``
  71488. +M`^L````(```#\@```^D````$("\`!%E/+H!P`%A/3G4``````_$````#````
  71489. +M`$]05%,`!``````#\@```^D````^("\`!$CG`P`N`$JL``!G!"`'8&!\`"`'
  71490. +M`H````$D9P)\"`@'``=G!`!&``4(!P`$9P0(Q@`""`<``6<$",8```@'``-G
  71491. +M!`C&``$(!P``9P0(Q@`&(`=R2<"!<D"P@68$`$8`0@@'``EG!`C&``4@!@I`
  71492. +M``],WP#`3G4@+P`$2.<&`"P`2JP``&<((`8"0`__8%YZ``I&``\(!@`#9P1Z
  71493. +M2>6-(`9R!<"!6X!F!`C%``<(!@`"9P0(Q0`$"`8``&<$",4``2`&<D+`@6<$
  71494. +M",4`!@@&``%G!`C%``,(!@`&9P0(Q0``"`8`!6<$",4`"2`%3-\`8$YU````
  71495. +M``/X`````@````$```"&````#`````````/Q`````P````!/4%13``0`0```
  71496. +M`_(```/K`````0```_(```/I`````G``3G5P`$YU```#\0````,`````3U!4
  71497. +M4P`$``````/R```#Z0```!5(YP,`3KH``"X`?`!@"B\&3KH``%A/4H:\AVWR
  71498. +M3-\`P$YU("\`!"\'+@!AU$ZZ``!.N@``(&P``$ZZ```O!TZZ``!83RX?3G4@
  71499. +M+P`$+P<N'V#4``````/O@P```T!?;&%S=%]F9`````````$````&@P```E]C
  71500. +M;&]S90```````0```!*#```$0%]C;&5A;G5P7V9I9F\```````$````N@P``
  71501. +M!4!?8VQE86YU<%]S:6=N86QS`````````0```#*&```#7U]O9&1?=&EM97(`
  71502. +M`````0```#:#```#0%]F<F5E7W1I;65R`````0```#J#```"7U]80T58250`
  71503. +M```!````0`````````/Q`````P````!/4%13``0`0````_(```/I````$R`O
  71504. +M``0B+P`((&\`#%%/2.<#)"P!+@`J2$ZZ```@!TZZ``!*@&<:(D`@:0`@+T@`
  71505. +M%"`&(&D`!")-)&\`%$Z28`)P_TS?),!03TYU``````/O@P```T!C:&MA8F]R
  71506. +M=`````````$````:@P```T!?9FEN9%]F9`````````$````@`````````_$`
  71507. +M```#`````$]05%,`!``````#\@```^D```"8GOP`#$CG+S8J;P`T?@/.KP`X
  71508. +M?`$@;```)F@`N"H\```#[$ZZ``!*AV<*<`*^@&<$<@!@`G(!+T$`*'`!OH!G
  71509. +M"%6'9P1P`&`"<`$O0``L($U#[```3KH``$J`9@9X_V```51P_R!L```A0`"X
  71510. +M(@TL;```=/Y.KO^L+@`@;```(4L`N$J`9G@L;```3J[_?$ZZ```L`"`L``!R
  71511. +M+D8!L(%G!$J`9@I^`2H\```#[F`6(`95@&8,""\`"``Z9P1P`6`"<``N`$J'
  71512. +M9RQ\``@O``@`.F<<""\`#P`Z9P9X`F```-8@+P`\3KH``"@`8```R'C_8```
  71513. +MPBE&``!P_V```4)"IRQL``!R`B0/3J[_'$_O``0D0$J`9PPB!R0*3J[_FDJ`
  71514. +M9A8@"F<()`IR`DZN_Q9.N@``</]@``$(*"H`="0*<@).KO\6(@=.KO^F<%#I
  71515. +MB,"O`#@,@```!0!F#'`1*4```'#_8```VDJO`"AG!@@$``-F#$JO`"QG$@@$
  71516. +M``)G#'`-*4```'#_8```M@@O``D`.F<B(@TD/````^Y.KO_B2H!G""(`3J[_
  71517. +MW&`*3KH``'#_8```C`@O``@`.F<$(`5@!B`\```#[20`(@TL;```3J[_XBH`
  71518. +M9@A.N@``</]@8`@O``D`.F8$2H9F!"P$8`)\_WX`2J\`*&<"?@%*KP`L9P0(
  71519. +MQP`!""\``P`[9P0(QP`#+P<@!2(&3KH``%A/+@!L''#_(&P``"%``+@B!2QL
  71520. +M``!.KO_<(&P``"%+`+@@!TS?;/3>_``,3G4@;P`$+R\`#"\O``PO"&$`_:A/
  71521. +M[P`,3G4```/X`````0````$```!2`````````^^&```!7U]U<P````4```(V
  71522. +M```")````'P```!F````%H,```-`8VAK86)O<G0````````!````)(,```)`
  71523. +M<W1R:6-M<`````$```!6A@```E]$3U-"87-E````!0```BX```',```!`@``
  71524. +M`(@```!P@P``!$!C;VYV97)T7V]S97)R```````!````D(8```)?7T]315)2
  71525. +M``````$```"6@P``!4!?;6%K95]P<F]T96-T:6]N`````````0```.:&```"
  71526. +M7V5R<FYO```````#```!@@```5X```#V@P```D!?<V5T97)R`````P```=@`
  71527. +M``&L```!,(,```1`7V%L;&]C7V%M:6=A9F0``````0```A@````````#\0``
  71528. +M``,`````3U!44P`$`$````/R```#Z@````).24PZ`````````_(```/I```%
  71529. +M:"!O``1(YS@`</_`*``#<@`2`'#_P"@``G0`%`!P_\`H``%V`!8`</_`$'@`
  71530. +M&`#AA(B#X82(@N&$B($@!$S?`!Q.=4CG(S1+[`!R0>P`'$7L``PDR$'L`"`D
  71531. +MR$*L`!A"FGX`+"P`>D?L![Q@/"`K``0B`.6!($W1ZP`(0^@'ZD7L``PEB1@`
  71532. +M2H!G!G`!*4``&$J'9P9*JP`$9@@@$T2`*4``%%*'UOP`$+Z&;<!^`"PL`'9@
  71533. +M.G``(@<&@0``!=@0-1@`2,#I@"!-(@`&@0``!U+1]1@`!H````=.)#4(`.6"
  71534. +M0^@'ZD7L``PEB2@`4H>^AFW"3-\LQ$YU(&\`!")O``B>_`HH2.<[-B](`"@O
  71535. +M20`L(`AF"$WL`"0O3@`H<#H@;P`HL!!F!%*O`"@@;P`H<#I.N@``2H!F3G`*
  71536. +M(@`@;P`H(`A*&&;\4XB1P-*(4H%P0;*`909P_V```DQ![``P0^\`,1+89OQ!
  71537. +M[P`Q0^P`/$ZZ``!![P`Q(F\`*$ZZ``!![P`Q+T@`*$*G+R\`+$ZZ``!03RX`
  71538. +M4H!F!G#_8``"""`'0>\`<B(\```)VDZZ```L`"`'3KH``$J`9@9P++R`9`9P
  71539. +M_V```>!![P"*80#^."X`0>\`CF$`_BXJ;P`L*H!![P"280#^("M```1![P"6
  71540. +M80#^%"M```A![P":80#^""M```PB%6LP=#*R@FXJ)BT`"&\D>`JVA&X>*"T`
  71541. +M!&L8#(0```%R;A!*@&L,L()N"+:'9PI*AV<&</]@``%JTH'E@2`M``@D`-2"
  71542. +MU(#4@B`M``0F`.6#UH#6@M:M``S6@=:'<"S6@+R#9`9P_V```3A'[P">?``D
  71543. +M36`0($MA`/V()4``$%B+4H98BKRM``1MZGP`8"`0&R(&!H$```78&X`8`'(`
  71544. +M$@"RK0`(;09P_V```/92AKRM``1MVGP`0>T'2B1(+T@`)&!*($MA`/TZ)(!+
  71545. +MZP`%$"L`!'(`$@`E00`$9PI3@6<&</]@``"\1^T``1`5<@`2`"5!``AM"BIO
  71546. +M`"RRK0`,;P9P_V```)Q2AM3\`!"\K0`(;;!\`&`.(`8&@```!^H;FP@`4H:\
  71547. +MK0`,;>P@!@:````'ZD(U"`!\`-K\"!Y@'B!+80#\OBJ`1>L`!"!*80#\LBM`
  71548. +M``1'Z@`$4H90C2!O`"R\D&W:?``D;P`D*F\`+&`H2H=F!D*J``Q@&!`;2(!(
  71549. +MP"5```QR`;"!9PA*@&<$</]@#E*&U/P`$+RM``AMTG``3-]LW-[\"BA.=2!O
  71550. +M``193R\-*DA@`E*-$!4?0``$9R9(@$C`0>P``0@P``((`&86$"\`!'(LL`%G
  71551. +M#'(ML`%G!G(KL`%FT"`-*E]83TYU(&\`!")O``@@+P`,(B\`$%E/2.<'%"P!
  71552. +M+@`F22I((`UG$A`52(!(P$'L``$(,``""`!F!'``8$IZ`&`B$"\`%$B`2,`B
  71553. +M!>6!TH72@=*`*@%P,)J`NH9O!'``8"92C1`5'T``%&<02(!(P$'L``$(,``"
  71554. +M"`!FQKJ';`1P`&`$)H4@#4S?*.!83TYU(&\`!")O``A93TCG`!0F24/O``AP
  71555. +M`'(880#_;"I`2H!F!'``8&H@+P`((@#I@9*`(`'I@)"!Z8`F@'`ZL!5F3D'M
  71556. +M``%#[P`(<`!R.V$`_S@J0$J`9@1P`&`V("\`""(`Z8&2@.6!TY-P.K`59B!!
  71557. +M[0`!0^\`"'``<CMA`/\**D!*@&8$<`!@""`O``C1DR`-3-\H`%A/3G4@;P`$
  71558. +M(F\`"%E/2.<!%"I)+T@`#!`0<BVP`68(?@%2KP`,8#!(@$C`0>P``0@P``((
  71559. +M`&88<BL@;P`,LAA7P$0`2(!(P"](``Q*@&<$?@!@!'``8!P@;P`,(DUA`/\4
  71560. +M)D!*@&8$<`!@"$J'9P)$E2`+3-\H@%A/3G4@;P`$(F\`")[\``Q(YP`D*DDO
  71561. +M2``0<$JP$&8H0I5#Z``!0>T`!"](``P@22)O``QP`2(\```!;6$`_CPO0``0
  71562. +M8```M'!-L!!F?'`"*H!#Z``!0>T`#"](``P@22)O``QP`7(,80#^$")`2H!F
  71563. +M!G``8```P$7I``%P+K`19P9P`&```+!![0`((D@@2G`!<@5A`/WD(D!*@&8&
  71564. +M<`!@``"41>D``7`NL!%G!G``8```A$'M``0B2"!*<`!R!F$`_;@O0``08#`0
  71565. +M$$B`2,!#[``!"#$``@@`9QIP`2J`0^T`!'``(CP```%M80#]C"]``!!@!'``
  71566. +M8#P@+P`09@1P`&`R<"\@;P`0L!!F'$/H``%![0`0+T@`#"!)(F\`#&$`_=HO
  71567. +M0``08`@K?```'"``$"`O`!!,WR0`WOP`#$YU("\`!"(O``@@;P`,+V\`$``$
  71568. +MGOP`)$CG/Q0J2"H`+@$D!W8#Q(,O0``X+T$`/$J"9@P@!W)D3KH``$J!9A(@
  71569. +M!W)DY8E.N@``2H%G!'``8`)P`2P`(!5*@&<,4X!G2%.`9V9@``%^("T`!"(`
  71570. +M4X$D`=2"U($F`NF#EH(D`^F"E(/O@BX%WH(O1P!`2H9G``%4<CRP@6T``4P&
  71571. +MAP`!48`O1P!`8``!/B`M``0B`-*!TH`D`>F"E($B`NF!DH+O@=J!+T4`0&``
  71572. +M`1PH!7X`*BT`#%.%(`;0@-"&Z8!'[``^U\`O0``@8!H@&R(`TH'2@"0!Z8*4
  71573. +M@2("Z8&2@N^!V(%2A[Z%;>(N+P`\+T0`)"(M``QT`K*";@8F!U.#8`(F!R`#
  71574. +M<F1.N@``(@#2@4J`:@)6@.2`+T``+"`#+T$`,')D3KH``"`!:@)6@.2`=@G6
  71575. +MK0`,+T``-"`#+T$`*'(,3KH``%*!(`'G@)"!T("0@="`58!R"DZZ``!'[P`H
  71576. +MT)O0KP`TT)N0FU*`<@=.N@``+@%J`EZ'+"T`!)R':@)>AGH!*"T`"&`<+@9>
  71577. +MAR(M``SE@4'L`#K1[P`@OK`8`&P(+`=2A;J$;>`@!M"`T(8B`.F!DH`@`>F`
  71578. +MD('O@"(O`"32@"]!`$`@+P!`T*T`$-"O`$A,WRC\WOP`)$YU(&\`!")O``@@
  71579. +M+P`,GOP`6$CG/S8J2"Q-1^\`-";`)L@FR2].`#!*@&<<(`A*&&;\4XB1P"P(
  71580. +M(@C3KP`X<#.R@&4<?#)@&&$`^JHL`)R-+T``.'(#O(%L!G#_8``#>B]&`"P@
  71581. +M;P`X2A!F!G#_8``#:$/O`'1A`/OF+T``.&8&</]@``-4)F\`/$'L`*8B2V$`
  71582. +M][`N`&<"0I,@;P`X2A!G``*^*D@O2`!\80#Z2"(`DHTO0``X+T$`>'8#LH-L
  71583. +M!G#_8``#%"!O`#@0$&<@<BRP`6<:<CNP`6<40^\`<&$`^WXO0``X9A1P_V``
  71584. +M`NP@//__\?#0KP!T+T``<"!O`#@0$'(LL`%G"'([L`%F``%80^@``2!)0^\`
  71585. +M7&$`^[HJ0$J`9@9P_V```K!%[0`!<"RP%6<&</]@``*@($I#[P!(80#[E"]`
  71586. +M`#AF!G#_8``"BB!O`#A*$&<&</]@``)\($MP`B%```@A?````(@`!"`O`'!$
  71587. +M@$WH!THLP'`!+,!2ABS&("\`=$2`3>@'6BS`0IY"GM;\`!!%Z`78>@`L/```
  71588. +M![(@2B\O`'0O2``L(`4B!D'O`&!A`/QF+@`NKP!T(`4B!D'O`$QA`/Q46$\H
  71589. +M`$OJ``)%ZP`(OH!O&B!+((1P`2)O`"@2@"9*(4<`!"1-0BD``6`8($L@AR)O
  71590. +M`"A"$29*(40`!"1-$WP``0`!(`9R`\"!9@P@!G)D3KH``$J!9A(@!G)DY8E.
  71591. +MN@``2H%G!'``8`)P`2(`Y8%![`">(#`8`"(`TH'2@"8!Z8.6@20#Z8*4@^^"
  71592. +MVH)2A@R&```']6\`_T)@``$<(&\`.$H09P9P_V```69*AV<&</]@``%<>`!\
  71593. +M`'H`0J\`1'X`*DM@<$JM!TYG/B`O`$0B!^F!)"\`<`:!```'2B8S&`#6@B]#
  71594. +M`$1*AF<*L(-G!G#_8``!'$2"*T('2B`O`"Q2@"M`!U)\`6`F(`4B+P!T*BT'
  71595. +M2MJ!2H1G"K"%9P9P_V```.Y$@2M!!TI"K0=2>`%2A]K\`!"^JP`(;8I*AF<$
  71596. +M2H1F!G#_8```R'P`?@`J2R@O`$1@.G``(@<&@0``!=@0,Q@`2,#I@"!+T<!#
  71597. +MZ`=*+TD`0$J&9PI*J0`,9@0@!&`"(`71K0`0+"D`!%*'6(V^JP`$;<!@('``
  71598. +M<@$G00`()T``!"0O`'1$@DWK!THLPBS`+,`O0`!X*F\`/"XO`"P@!U*`*T``
  71599. +M#"PO`'AG"-"&4H`K0``,<C.P@6,$</]@,-K\!^H@!R!-(F\`,$ZZ```@3=''
  71600. +M2^@``4(02H9G$"`&($TB;P!\3KH``$(U:`!P`$S?;/S>_`!83G4@;P`$+PTJ
  71601. +M2$'L```B36$`]%!*@&<,0>P``")-<`%A`/P,*E].=2\-0>P`LDZZ```J0$J`
  71602. +M9@8J7V```%QP`2E`$\Y*%68>0JP`<D*L`'9"K`>\0JP'Q$'L``!#[`A<$MAF
  71603. +M_&`L($U#[`!R80#S]$J`9QYP.K`59Q`@34/L`')P`&$`^ZI*@&<(0>P`<F$`
  71604. +M_W8J7V``\PYP`2E`$\Y#[`!RD<AA`/.\2H!G"$'L`')A`/]48`#R[B!O``0@
  71605. +M+P`((F\`#)[\`!!(YP,4*DE([P$!`!`@;P`4+U``&$JL$\YF!&$`_T1*K`!V
  71606. +M9PH@+P`8L*P`@FP@?@!'[`!R8!!2A];\`!"^K`!Z;01^`&`R2JL'3F;J8"I^
  71607. +M`4?L`'8L+`!V8`X@+P`8L*L`$&T(4H=8B[Z&;>Y#[`!RT\=^`!XI!=?IAT'L
  71608. +M![S1QR\-+T@`("`00>\`'$/L`')A``#"(&\`("(H``0K00`@Y8%![`A<(F\`
  71609. +M(-'I``A#[``,(X@8`"M(`"A83TS?*,#>_``03G4@;P`$0^P``'``80#_*D'L
  71610. +M```@"$YU(&\`!"`O``@B;P`,2.<!%"X`)DDJ2$JL$])F#G`!*4`3TD'L"B!A
  71611. +M`/XZ+PL@!R!-0^P*(&$``$)83TJ'9P9![`"Z8`1![!(*)T@`*$S?*(!.=2!O
  71612. +M``1#[``L<`!AKD'L`"P@"$YU(&\`!"`O``@B;P`,+V\`$``$GOP`#$CG#S0N
  71613. +M`"9O`"PJ2'P`>@`H$2`$YX`O20`@T\!%Z0@>8$`O2@`D(!6PDFTV(&\`)+"0
  71614. +M9BA*A&8&("@`!&X:YX0B*``$(F\`(`:$```(&K*Q2`!N!'``8`)P`2H`+"@`
  71615. +M!&`&4X11BFRZ(!4B/``!48!.N@``*``@%2(\``%1@$ZZ``#2AY*&+`%@"`:&
  71616. +M``%1@%.$2H9K]&`(!(8``5&`4H0,A@`!48!L\"`&(CP```X03KH``"=```@@
  71617. +M!B(\```.$$ZZ```@`2]!`!QR/$ZZ```G0``$("\`''(\3KH``":!2H5G`E*3
  71618. +M(`18@'('3KH``"=!`!AL!%ZK`!@L/```![)*A&M`(`9R`\"!9@P@!G)D3KH`
  71619. +M`$J!9A(@!G)DY8E.N@``2H%G!'``8`)P`2H`(@#E@47L`)X@,A@`N(!M0%*&
  71620. +MF(!@P%.&(`9R`\"!9@P@!G)D3KH``$J!9A(@!G)DY8E.N@``2H%G!'``8`)P
  71621. +M`2H`Y8!![`">V+`(`$J$:\8$A@``!VPG1@`4)T0`'"`%T(#0A>F`1>P`/M7`
  71622. +M0JL`$&`.(BL`$.6!F+(8`%*K`!`B*P`0Y8&XLA@`;.92A"=$``Q"JP`@)T<`
  71623. +M)$S?+/#>_``,3G4@;P`$+PTJ2"`M`!@B`-*!TH!![`"^T<$@+0`0(@#2@=*`
  71624. +M0^P`T]/!(#P```=LT*T`%"\`+Q4O+0`$+RT`""\M``PO"2\(2&P`^$AL`%A.
  71625. +MN@``3^\`)$'L`%@@""I?3G4@;P`$+PUA`/TX($`J7V"4(&\`!")O``@@+P`,
  71626. +M+P<N`"`1L(=M%"('3KH``-&0(!$B!TZZ```B@6`J2H!J)E.0WY%L("`11(`B
  71627. +M!TZZ```B$)*`4X$@@2`11(`B!TZZ``">@2*'+A].=2!O``0B;P`(2.<!%"9)
  71628. +M*D@N+0`4GJL`%&8L+BT`$)ZK`!!F(BXM``R>JP`,9A@N+0`(GJL`"&8.+BT`
  71629. +M!)ZK``1F!"X5GI,@!TS?*(!.=2!O``0B;P`(("\`#"]O`!``!)[\`'!(YS\T
  71630. +M+@`J;P"8+TD`+$*5+T@`*$/O`%QP"B+84<C__"`O`%QR/K"!;`1*@&H.0>\`
  71631. +M8$/O`%QP/&$`_Q9![P!D0^\`8'`\80#_"$'O`&A#[P!D<!AA`/[Z0>\`<$/O
  71632. +M`&QP#&$`_NQ@3"`O`'!3KP!P!H````=K(@!T`\*"9@IR9$ZZ``!*@68:(#P`
  71633. +M``=LT*\`<')DY8E.N@``2H%G!'``8`)P`2(`Y8%![`">(#`8`-&O`&@@+P!H
  71634. +M;ZXL/```!VS<KP!P(`9R`\"!9@P@!G)D3KH``$J!9A(@!G)DY8E.N@``2H%G
  71635. +M!'``8`)P`20O`&SE@B8`UH/6@.F#0>P`/M'#+#`H`"`O`&BPAF\:1^\`:)V;
  71636. +M4I,,FP````QMGD*O`&Q2KP!P8)0@+P!<0J\`7'H`<@$O00"(+T``)%*%("\`
  71637. +MB-"`+T``B"`O`(AN[B`O`(AJ!'``8`1P`>N@+T``B$AO`#`O!TAO`)`@;P`X
  71638. +M3I!![P`\0^\`:&$`_BQ/[P`,*`!G+B`%4X5*@&H&</]@``$02H5J!E.O`(A@
  71639. +MQ'`!ZZ`L`$J$;P:=KP"(8+3=KP"(8*X@+P!\:P``Q"(O`%"R@&<``+I!^OGB
  71640. +M(F\`++/(9@9![`!R8`1![`H@?``F2"](`)!@``"(("L'3K"O`'QF=GH`)&\`
  71641. +MD&!D("H'3K"O`'QG5"`%Z8`B+P"((&\`D`:````'2M*P"`"2JP=*+T$`C$AO
  71642. +M`#`O!TAO`)0@;P`X3I!![P`\0^\`:&$`_6Q/[P`,2H!F$B`O`%"PKP!\9@@O
  71643. +M;P",`(A@)E*%U/P`$"!O`)"ZJ``(;9)2AM;\`!`@;P"0O*@`"&T`_W!P_V`D
  71644. +M("\`)-&O`(@O+P`H+P=(;P"0(&\`.$Z0<`$J@$_O``P@+P"(3-\L_-[\`'!.
  71645. +M=2!O``0B;P`(("\`#)[\``Q(YP<T+@`J2"])`!@,K0````$`(&\&<`$K0``@
  71646. +M2&\`'"`'($UA`/T>6$\L`$JO`!QF!B`M`"!J!B`&8```QD'Z^*XB;P`8L\AF
  71647. +M!D'L`')@!$'L"B!\`"9(+T@`(&```)8@*P=.L*T`(&8``(1Z`"1O`"!@<"`M
  71648. +M`"`B*@=.LH!G7B`%Z8`B%2!O`"`&@```!TK2L`@`DJL'2BJ!2JT`(%?`1`!(
  71649. +M@$C`*T``($AO`!P@!R!-(F\`'&$`_(Q83TJO`!QF0"`5D*H'2M"K!THJ@$JM
  71650. +M`"!7P$0`2(!(P"M``"!2A=3\`!`@;P`@NJ@`"&V&4H;6_``0(&\`(+RH``AM
  71651. +M`/]B</],WRS@WOP`#$YU(&\`!"\-0_KWVG``*E]@`/[@2JP3SF8$80#W+$YU
  71652. +M``````/X````'0````$``!*X```29@``$-@``!"T```0I```$%0``!`R```/
  71653. +M\@``#H(```X6```,^```#,H```RX```,J@``"O@```E*```(>```!Z0```%L
  71654. +M```!7````18```#F````H````(X```"`````7````%8```!0````3````"L`
  71655. +M```"```5E```%,8``!3````3D@``$XP``!#H```0W```#J(```Z:```.B```
  71656. +M#G0```YF```.8@``#EH```X\```.,@``#@H```WT```-X@``#=0```V\```-
  71657. +MN```#:0```V8```-D```#88```U\```-3```#3X```TZ```-*@``#1P```T(
  71658. +M```,_```#/0```SP```,[```#.@```S@````L````&@```!D````2```````
  71659. +M``/O@P```D!S=')C:'(``````0```3*#```"0'-T<F-A=``````"```!?```
  71660. +M`7"#```"7V]P96X````````!```!CH,```)`<F5A9`````````$```&L@P``
  71661. +M`D!C;&]S90```````0```;2&```"7U]?8W1Y<&4````%```&6@``!3X```1>
  71662. +M```$'````\J#```"7U]#6$0S,P`````<```2G```$HX``!)4```2/@``$4X`
  71663. +M`!$\```1)```$1H``!`@```0$@``#]X```_0```/K```#YH```^,```/@```
  71664. +M#W````\^```/,```"N8```K8```(4@``"#P```@F```("```!^P```<.```'
  71665. +M`(,```)`<W1R;F-P>0````(```R.```,=(,```-`7U]G971E;G8````````!
  71666. +M```,SH,```)?<W!R:6YT9@````$``!#@`````````_$````#`````$]05%,`
  71667. +M!`!````#\@```^H```!(1TU4`"`@(``@("``````!`````@``````````"`@
  71668. +M(``@("``<SIL;V-A;'1I;64`<SIZ;VYE:6YF;P``+P`````?````'````!\`
  71669. +M```>````'P```!X````?````'P```!X````?````'@```!\````?````'0``
  71670. +M`!\````>````'P```!X````?````'P```!X````?````'@```!\```%M```!
  71671. +M;G!O<VEX<G5L97,``%5.25A46@``("`@`%-U;DUO;E1U95=E9%1H=49R:5-A
  71672. +M=$IA;D9E8DUA<D%P<DUA>4IU;DIU;$%U9U-E<$]C=$YO=D1E8P`E+C-S("4N
  71673. +M,W,E,V0@)3`R+C)D.B4P,BXR9#HE,#(N,F0@)60*```````#[`````(````!
  71674. +M````$`````P````````#\@```^L```3V```#\@```^D```&<GOP`#$C7`0-P
  71675. +M_][\``Q.=5%/2-<#`%!/3G5(YS`"(A!**``-9P1P`&`<)`DF`"QL``!.KO_6
  71676. +M(@!2@&8(3KH``'#_8`(@`4S?0`Q.=5%/2.<_-BX`*DDF2"P3+T8`*"](`"Q*
  71677. +M*P`-9P9P`&```(Q**P`,9V8F3=?'>@!@6"1-8`)2BK7+9`9P"K`29O2WRF8$
  71678. +M*`I@!D'J``$H")B-(B\`*"0-)@0L;```3J[_T"P`4H!F"$ZZ``!P_V`^VH:V
  71679. +MAF8V2^H``9Z&<`!.N@``3KH``$J`9B)*AV:D8!PB!B0-)@<L;```3J[_T"H`
  71680. +M4H!F"$ZZ``!P_V`"(`5,WVS\4$].=5E/2.<_`BX`+!`O00`<2B@`#6<$<`!@
  71681. +M4E.!)@$B!B0'+&P``$ZN_[XJ`$ZN_WPH`%*%9P1*A&<.(`1.N@``*4```'#_
  71682. +M8"0B!G0`)@).KO^^+`!2@&<$2H1G#B`$3KH``"E```!P_V`"(`9,WT#\6$].
  71683. +M=9[\`0!(YS\&+@`J2"P5*BT`""`M``1G"B(`+&P``$ZN_Z88+0`-2(1(Q"!-
  71684. +M3KH``$J$9P1P`&!$(@9![P`@)`@L;```=D#EBTZN_F@H`$J'9@HB!DZN_]Q*
  71685. +M@&<:2H1G$G#_NH!G#"(")`5.KO]&2H!G!'``8`9.N@``</],WV#\WOP!`$YU
  71686. +M("\`!$CG(`(B`"QL``!T`$ZN_S1.KO]\="Y&`K""5\%$`4B!2,$@`4S?0`1.
  71687. +M=2`O``0@;P`((F\`#)[\`!!(YS<6+@`F22I(?`!AN$J`9GPB!RQL``!T`4ZN
  71688. +M_E9*@&=L(@=![```)`AV!$ZN_]!9@&92(@<D/```)Q!.KO\T2H!G0B('0>\`
  71689. +M("0(=A!.KO_6<@FP@6\N<)NP+P`@9B9![P`E(@@D"TZN_-`J`$'O`";1P"((
  71690. +M)`U.KOS04H!G!E*%9P)\`2('=`!.KOY6(`9,WVCLWOP`$$YU("\`!"(O``B>
  71691. +M_`(02.<_!BX`</\O0`(H+T$`)"('+&P``'0`=@%.KO^^+T``("('3J[_OBP`
  71692. +M3J[_?"H`+T`"+&8``,(H+P`D(@<D!';_3J[^.+""9@``KKR";```GBH$FH8H
  71693. +M!2`$<@%(02QX``1.KO\Z*D!*@&9J<@)(04ZN_RCBB"H`#(4```(`;1`@!7(!
  71694. +M2$%.KO\Z*D!*@&9&>D#GC4OO`"@P/`'_<@!![P`H$,%1R/_\8"RXA6\$(`5@
  71695. +M`B`$)@!.N@``(@<D#2QL``!.KO_0L(-G"DZN_WPO0`(L8`:8@TJ$;M!![P`H
  71696. +ML<UG#")-(`4L>``$3J[_+BHO`BQF!$*O`B@L+P`@O*\`)&P.(@<D!BQL``!V
  71697. +M_TZN_[XL+P(H9PH@!4ZZ```I0```(`9,WV#\WOP"$$YUGOP!"$CG-Q8N`"9)
  71698. +M*D@L%4HM``UF``$8(`<$@```!`!G(`2````$`&=*4X!G6%.`9UQ3@&=>4X!G
  71699. +M9E.`9VQ@``#N2BT`#&<F(`9![P$D0^\!(&$`_=9*@&<4("\!)#=```(@+P$@
  71700. +M-H!P`&```,IP&6```+XB!BQL``!.KO\H)H!P`&```+(FAG``8```JG``8```
  71701. +MI"`&(A-A`/XV8```F"M3``AP`&```(XJ$TJM``1F#B(5+&P``$ZN_HPK0``$
  71702. +M("T`!&=B)``B!2QL``!.KOY<2H!F4B(&0>\`("0(=D#EBTZN_FA*@&<^(@5.
  71703. +MKO^F(BT`!$ZN_Z8B!DZN_]PB`G0`3J[_1AM\``$`#2J"*T(`!$'O`"`B""QL
  71704. +M``!.KO^X2H!G!"`"8`Y.N@``8`9P%BE```!P_TS?:.S>_`$(3G4@+P`$(B\`
  71705. +M""]O``P`!$CG#P8J+P`<+`$N`'`.3KH``"I`2H!F"G`,*4```'#_8$Y#U2+'
  71706. +M0IDBQD(M``TB!RQL``!.KO\H&T``#$AZ_G1(>OO:2'K[9$AZ^JQ(>OIV2'KZ
  71707. +M:"`%($U#^OI03KH``$_O`!@H`&P&($U.N@``(`1,WV#P3G4@+P`$(B\`""]O
  71708. +M``P`!"]O`!``""]O`!0`#"]O`!@`$$CG#0`H+P`4*B\`$"X`<`!*@68$<$#E
  71709. +MB`!```$O`"`'<O]A`/]&6$]*@&9`<`!*A&8$<$#EB`!```(O`"`%<O]A`/\H
  71710. +M6$]3@&8B<`!*KP`<9@1P0.6(`$```B\`("\`''+_80#_!EA/58!G$$'L``8O
  71711. +M2``03-\`L$[Z``!,WP"P3G4``````_@````"`````0``!EH```)<````````
  71712. +M`^^&```"7T1/4T)A<V4````0```%B```!2(```34```$O@``!(````/D```#
  71713. +MG````O````),```"!````;0```&.```!(@```.(```"F````,(,```)`7W-E
  71714. +M=&5R<@````4```4R```!Z@```/````"T````/H,```1`7V-H96-K7W-I9VYA
  71715. +M;',``````0```,J#```$0%]H86YD;&5?<VEG;F%L<P````$```#.@P``!$!C
  71716. +M;VYV97)T7V]S97)R```````#```#]@```5X```$\A@```E]E<G)N;P``````
  71717. +M!0``!7(```4Z```#^@```6(```%`@P```D!F<F5E`````````@``!<(```&@
  71718. +M@P```T!C:&MA8F]R=`````````$```.4@P```D!M86QL;V,``````0``!6:#
  71719. +M```#0%]A;&QO8U]F9````````0``!;2#```"7U]F86EL```````!```&9@``
  71720. +M``````/Q`````P````!/4%13``0`0````_(```/J````")LP('$``$9A:6QE
  71721. +M9"!T;R!I;FET:6%L:7-E($DO3P`````#\@```^D````G(&\`!")O``A(YR$6
  71722. +M)DDJ2$ZZ```B#20++&P``$ZN_[)*@&<$<`!@;$ZN_WPN`'(T1@&P@692(@).
  71723. +MKO^X2H!G#B(-3J[_LDJ`9P1P`&!&3J[_?"X`<F_2@;"!9BPB`G0`3J[_1DJ`
  71724. +M9QHB"TZN_[A*@&<0(@TD"TZN_[)*@&<$<`!@$DZN_WPN`"`'3KH``"E```!P
  71725. +M_TS?:(1.=0`````#[X,```-`8VAK86)O<G0````````!````$H8```)?1$]3
  71726. +M0F%S90````$````:@P``!$!C;VYV97)T7V]S97)R```````!````C(8```)?
  71727. +M97)R;F\```````$```"0`````````_$````#`````$]05%,`!`!````#\@``
  71728. +M`^D````.(&\`!"`O``@B+P`,GOP`#$C7`0-P`-[\``Q.=2`O``0B+P`(+V\`
  71729. +M#``$44](UP`#<`!03TYU``````/Q`````P````!/4%13``0``````_(```/I
  71730. +M````$"!O``0B;P`(("\`#$CG`10N`"9)*DAF!'``8!P@!R!+(DUR`$J`9PX2
  71731. +M&)(99@13@&;V2(%(P2`!3-\H@$YU``````/Q`````P````!/4%13``0`````
  71732. +M`_(```/I````!2!O``0@+P`(<@!@`A#!4X!D^DYU```#\0````,`````3U!4
  71733. +M4P`$``````/R```#Z0````P@+P`$(B\`"%E/+P<N`"]!``1.N@``2&\`!$AX
  71734. +M"`,O!TZZ``!/[P`,+A]83TYU``````/O@P```T!C:&MA8F]R=`````````$`
  71735. +M```4@P```E]I;V-T;````````0```"(````````#\0````,`````3U!44P`$
  71736. +M``````/R```#Z0````T@+P`$(B\`"%E/+P<N`"`!3KH``"]```1.N@``2&\`
  71737. +M!$AX"`0O!TZZ``!/[P`,+A]83TYU```#[X,```5`7VUA:V5?<')O=&5C=&EO
  71738. +M;@````````$````2@P```T!C:&MA8F]R=`````````$````:@P```E]I;V-T
  71739. +M;````````0```"@````````#\0````,`````3U!44P`$``````/R```#Z0``
  71740. +M`!`@;P`$("\`""(O``R>_``,2-<!`W#_*4```-[\``Q.=2!O``0@+P`((B\`
  71741. +M#)[\``Q(UP$#</\I0```WOP`#$YU```#[X8```)?97)R;F\```````(````X
  71742. +M````&`````````/Q`````P````!/4%13``0`0````_(```/I````#2`O``19
  71743. +M3R\'+@!.N@``2&\`!$AX"``O!TZZ``!/[P`,2H!G!'``8`0@+P`$+A]83TYU
  71744. +M``````/O@P```T!C:&MA8F]R=`````````$````,@P```E]I;V-T;```````
  71745. +M`0```!H````````#\0````,`````3U!44P`$``````/R```#Z0````\@+P`$
  71746. +M2.<&`$ZZ```L`'``3KH``&`&<`!.N@``*@`@!4ZZ``!*@&?N(`9.N@``<`0I
  71747. +M0```</],WP!@3G4```/O@P```T!S:6=S971M87-K``````(````L````"H,`
  71748. +M``1`7V-H96-K7W-I9VYA;',``````0```!*#```$0%]W86ET7W-I9VYA;',`
  71749. +M``````$````:@P``!$!?:&%N9&QE7W-I9VYA;',````!````(H8```)?97)R
  71750. +M;F\```````$````R`````````_$````#`````$]05%,`!`!````#\@```^D`
  71751. +M```H(&\`!$CG(Q8J2'X`0J<L;```<@(D#TZN_QQ/[P`$)D!*@&=2(@UT_DZN
  71752. +M_ZPN`&=&(@<D"TZN_YI*@&<Z(BL`!%[`1`!(@$C`+``B!TZN_Z9R`DZN_Q9*
  71753. +MAF<4(@U.KO^X2H!G!'``8#).N@``8"IP%"E```!@(DZN_WQ.N@``*4```$J'
  71754. +M9P8B!TZN_Z8@"V<()`MR`DZN_Q9P_TS?:,1.=0```^^&```"7T1/4T)A<V4`
  71755. +M```!````$(,```)`7W-E=&5R<@````$```!JA@```E]E<G)N;P```````@``
  71756. +M`(````!R@P``!$!C;VYV97)T7V]S97)R```````!````?`````````/Q````
  71757. +M`P````!/4%13``0`0````_(```/I```!ER!O``0@+P`((F\`#"]O`!``!"\'
  71758. +M+@`I2``>*4``&G(!L(%E'B\O``@O"6$``"103TJ`9PX@;``>0A`@!Y"L`!I@
  71759. +M`G``+A].=2!O``0B;P`(2.<`%"9)*DA@``3X$!5R);`!9@`$RE*-$!5(@$C`
  71760. +M2H!G``#6<B60@6<`!+1R')"!9P``S%.`9P`!)E.`9P`!@%.`9P`!HEF`9P`!
  71761. +M[%.`9P`"!%F`9P`"FEN`9P`##E.`9P`#,%.`9P`#6%.`9P`#>E6`9P`#H%.`
  71762. +M9P`#1E.`9P`$)E.`9P`$0E^`9P``HE.`9P``_%.`9P`!.E.`9P`!7%.`9P`!
  71763. +M=%>`9P``Y%6`9P`!TE.`9P`![E.`9P`"!E.`9P`"3%.`9P`":%6`9P`"=E6`
  71764. +M9P`"JE.`9P`"U%.`9P`"]%>`9P`#9E.`9P`#?E.`9P`#C&```^A3C6```^(@
  71765. +M*P`8:P9R!K"!;P9P`&```_XB*P`8Y8%![`!V+S`8`&$`!,983TJ`9@`#V&``
  71766. +M`^`@*P`8:P9R!K"!;P9P`&```\XB*P`8Y8%![``<+S`8`&$`!)983TJ`9@`#
  71767. +MJ&```[`@*P`0:P9R"["!;P9P`&```YXB*P`0Y8%![`%.+S`8`&$`!&983TJ`
  71768. +M9@`#>&```X`@*P`0:P9R"["!;P9P`&```VXB*P`0Y8%![`#"+S`8`&$`!#98
  71769. +M3TJ`9@`#2&```U!![`%^(DMA`/XZ2H!F``,T8``#/$'L`90B2V$`_B9*@&8`
  71770. +M`R!@``,H0>P!IB)+80#^$DJ`9@`##&```Q1(>``P2'@``B\K``QA``-Z3^\`
  71771. +M#$J`9@`"[F```O9(>``@2'@``B\K``QA``-<3^\`#$J`9@`"T&```MA(>``P
  71772. +M2'@``B\K``AA``,^3^\`#$J`9@`"LF```KH@*P`(<@Q.N@``<`Q*@6<"(`%(
  71773. +M>``P2'@``B\`80`#$$_O``Q*@&8``H1@``*,("L`'%*`2'@`,$AX``,O`&$`
  71774. +M`NY/[P`,2H!F``)B8``":DAX`"!(>``"+RL`"&$``M!/[P`,2H!F``)$8``"
  71775. +M3"`K``AR#$ZZ``!P#$J!9P(@`4AX`"!(>``"+P!A``*B3^\`#$J`9@`"%F``
  71776. +M`AY(>``P2'@``B\K``1A``*$3^\`#$J`9@`!^&```@`@*P`04H!(>``P2'@`
  71777. +M`B\`80`"8D_O``Q*@&8``=9@``'>2&P!L&$``K!83TJ`9@`!PF```<H,JP``
  71778. +M``P`"&T&0>P!LF`$0>P!MB\(80`"BEA/2H!F``&<8``!I$'L`;HB2V$`_(Y*
  71779. +M@&8``8A@``&00>P!P")+80#\>DJ`9@`!=&```7Q(>``P2'@``B\380`!Y$_O
  71780. +M``Q*@&8``5A@``%@+PMA``%D6$]*@&8``49@``%.0>P!S")+80#\.$J`9@`!
  71781. +M,F```3I(;`'680`"#%A/2H!F``$>8``!)B`K`!Q>@)"K`!AR!TZZ``!(>``P
  71782. +M2'@``B\`80`!?D_O``Q*@&8``/)@``#Z("L`&&<$4X!@`G`&(BL`'%Z!DH`@
  71783. +M`7('3KH``$AX`#!(>``"+P!A``%&3^\`#$J`9@``NF```,)(>``P2'@``2\K
  71784. +M`!AA``$H3^\`#$J`9@``G&```*1![`'8(DMA`/N.2H!F``"(8```D"`\```'
  71785. +M;-"K`!1R9$ZZ``!(>``P2'@``B\!80``Z$_O``Q*@&9<8&8@/```!VS0JP`4
  71786. +M2'@`,$AX``0O`&$``,9/[P`,2H!F.F!$("L`*&<,+P!A``$46$]*@&8F<`!@
  71787. +M+DJL`!I7P$0`2(!(P%.L`!I*@&<$<`!@%B!L`!X0U2E(`!Y2C4H59@#[!B`L
  71788. +M`!I,WR@`3G4@;P`$GOP`+$CG`1!#[P`(<`HBV%'(__Q![P`(3KH``"X`1^P`
  71789. +M#6`:(`=R"DZZ``!P,-*`%H%3BR`'<@I.N@``+@!*AV\(0>P``+?(8MI(:P`!
  71790. +M80``@%A/3-\(@-[\`"Q.=2`O``0B+P`(+V\`#``$2.<'!!HO`!<L`2X`2^P`
  71791. +M%V`<(`=R"DZZ``!P,-*`&H%3C2`'<@I.N@``+@!3ADJ';PY![``/N\ABV&`$
  71792. +M&H53C4'L``^[R&,((`93ADJ`;NQ(;0`!80``#EA/3-\@X$YU(&\`!"\-*D@@
  71793. +M+``:9Q@2'2!L`!X0@68$<`%@"E*L`!Y3K``:8.(J7TYU```#^`````\````!
  71794. +M```$O```!"8```02```#T````[P```.F```#H````X(```(X```")````A``
  71795. +M``'X```!R````9@```%H````$@````(```94```&4```!D0```8\```&%```
  71796. +M!@8```7@```%J@``!88```5:```%3@``!4@```4\```%,````#X````V````
  71797. +M'````!@````````#[X,```)?7T-81#,S``````D```7Z```%Z@``!:````60
  71798. +M```$W```!'X```1&```#&@```JR#```"0&UK=&EM90`````!```%@```````
  71799. +M``/Q`````P````!/4%13``0`0````_(```/J````>5-U;@!-;VX`5'5E`%=E
  71800. +M9`!4:'4`1G)I`%-A=```````````!`````@````,````$````!0````84W5N
  71801. +M9&%Y``!-;VYD87D``%1U97-D87D`5V5D;F5S9&%Y`%1H=7)S9&%Y``!&<FED
  71802. +M87D``%-A='5R9&%Y```````X````0````$@```!0````6@```&0```!L2F%N
  71803. +M`$9E8@!-87(`07!R`$UA>0!*=6X`2G5L`$%U9P!397``3V-T`$YO=@!$96,`
  71804. +M````D@```)8```":````G@```*(```"F````J@```*X```"R````M@```+H`
  71805. +M``"^2F%N=6%R>0!&96)R=6%R>0``36%R8V@`07!R:6P`36%Y`$IU;F4``$IU
  71806. +M;'D``$%U9W5S=```4V5P=&5M8F5R`$]C=&]B97(`3F]V96UB97(``$1E8V5M
  71807. +M8F5R``````#R````^@```00```$*```!$````10```$:```!(````2@```$R
  71808. +M```!.@```40E82`E8B`E92`E2#HE33HE4R`E60``)6TO)60O)7D@)4@Z)4TZ
  71809. +M)5,`)6TO)60O)7D```H`4$T``$%-```E2#HE30`E23HE33HE4R`E<``E2#HE
  71810. +M33HE4P``"0`E;2\E9"\E>0````````/L````)@````$```%Z```!=@```7(`
  71811. +M``%N```!:@```68```%B```!7@```5H```%6```!4@```4X```#N````Z@``
  71812. +M`.8```#B````W@```-H```#6````T@```,X```#*````Q@```,(```".````
  71813. +MB@```(8```""````?@```'H```!V````-````#`````L````*````"0````@
  71814. +M````'`````````/R```#ZP````D```/R```#Z0```!8@;P`$("\`"$CG)P(N
  71815. +M`"((+&P``"0\```#[4ZN_^(L`$ZZ``!*AF<<(`8B!TZZ```J`"(&3J[_W$J`
  71816. +M9@1*A6<$(`5@#DZN_WQ.N@``*4```'#_3-]`Y$YU```#[X8```)?1$]30F%S
  71817. +M90````$````2@P```T!C:&MA8F]R=`````````$````B@P``!$!?9&]?=')U
  71818. +M;F-A=&4````````!````+H,```1`8V]N=F5R=%]O<V5R<@```````0```$J&
  71819. +M```"7V5R<FYO```````!````3@````````/Q`````P````!/4%13``0`0```
  71820. +M`_(```/I````U2!O``0B;P`(("\`#"(O`!`O;P`4``0O;P`8``@O;P`<``R>
  71821. +M_``P2.<O-BXO`%@O2``L*@`H`7Q`Y8XO0``D+T$`*"])`#!P0.6(3KH``"I`
  71822. +M+T``1"`%4H!F$BQL``!.KO_*+T``0$*O`%!@)DAO`$!(>`@!+P5.N@``3^\`
  71823. +M#%*`9@1"KP!`<`$O0`!0(`5.N@``(`12@&82+&P``$ZN_\0O0``\0J\`3&!&
  71824. +MNH1F#"]O`$``/$*O`$Q@-DAO`#Q(>`@!+P1.N@``3^\`#%*`9@9P`"]``#PB
  71825. +M+P`\LJ\`0%;`1`!(@$C`+T``3"`$3KH``'#_OH!F$"!L```O:`#@`#A"KP!(
  71826. +M8%!P_KZ`9@PO;P`\`#A"KP!(8#Y(;P`X2'@(`2\'3KH``$_O``Q2@&8&<``O
  71827. +M0``X("\`."(O`#RR@&<*L*\`0&<$<`%@`G``+T``2"`'3KH``$JO`$!G``%D
  71828. +M2J\`/&<``5Q*KP`X9@92AV8``5`@#6<``40F37@`+V\`,``T8```K$J$9@8@
  71829. +M;P`L8`(@521(>@,J2&`:4H40%7(JL`%G#'(BL`%G!G(*L`%F`E*%4HU*%6;B
  71830. +M*F\`1"!-T<8B2]/%3>D``;W(920@!M"&T(4L`"!-3KH``"I`2H!G``#:(`N0
  71831. +MKP!$)DW7P"]-`$0@2Q"\`"!4BQ%\`"(``2I*8"`0%7(BL`%G!G(JL`%F!A;\
  71832. +M`"I@"G(*L`%F!!;\`"L6W4H59MP6_``B4H18KP`T*F\`-$J59@#_3D(3*F\`
  71833. +M7"`-9Q`B#2QL``!T_DZN_ZPH`&`">`!*A&8$(`UF/"IO`$0O+P!@+P0O+P!0
  71834. +M+R\`1"\O`%PO+P!0("\`6"(O`&@@34ZZ``!/[P`8*@!2@&<:($U.N@``(`5@
  71835. +M>"QL``!.KO]\3KH``"E```!*A&<2(@0L;```3J[_IF`&<`PI0```("\`0&<0
  71836. +M2J\`4&<*(@`L;```3J[_W"`O`#QG$$JO`$QG"B(`+&P``$ZN_]P@+P`X9Q!*
  71837. +MKP!(9PHB`"QL``!.KO_<*F\`1"`-9P8@34ZZ``!P_TS?;/3>_``P3G4@;P`$
  71838. +M(F\`""`O``PB+P`0+V\`%``$+V\`&``(+P4J+P`,+P4O+P`,2'C__V$`_-A/
  71839. +M[P`,*A].=0```^^#```"0&UA;&QO8P`````!````3(8```)?1$]30F%S90``
  71840. +M``@```+\```"Y@```M````*R```"G````D@```":````7(,```)?:6]C=&P`
  71841. +M``````,```$D````Q@```'B#```$0%]P<V5U9&]?8VQO<V4```````,```%4
  71842. +M````[@```)"&```!7U]U<P````$```#X@P```D!R96%L;&]C`````0```=B#
  71843. +M```$0%]S=&%R=%]P<F]C97-S``````$```*$@P```D!F<F5E`````````@``
  71844. +M`PX```*4@P``!$!C;VYV97)T7V]S97)R```````!```"I(8```)?97)R;F\`
  71845. +M``````(```*^```"J`````````/Q`````P````!/4%13``0`0````_(```/I
  71846. +M`````G`!3G5P`4YU```#\0````,`````3U!44P`$``````/R```#Z0````X@
  71847. +M+P`$+P<N`$ZZ```@!R!L``!R`$ZZ``!@#"`L``!.N@``3KH``"!L``!.N@``
  71848. +M2H!GZ'``+A].=0```^^#```#0&-H:V%B;W)T`````````0````J&```#7U]O
  71849. +M9&1?=&EM97(``````@```"@````0@P``!$!?=&EM97)?<W1A<G0````````!
  71850. +M````%H8```-?7V]D9%]S:6<````````!````'(,```1`7W=A:71?<VEG;F%L
  71851. +M<P```````0```""#```$0%]H86YD;&5?<VEG;F%L<P````$````D@P``!$!?
  71852. +M=&EM97)?97AP:7)E9``````!````+`````````/Q`````P````!/4%13``0`
  71853. +M0````_(```/I````#R!O``0@+P`(2.<!!"X`*DA.N@``+P=(>`,!+PU.N@``
  71854. +M3^\`#$S?((!.=2!O``0@+P`(2.<!!$S?((!@S````^^#```#0&-H:V%B;W)T
  71855. +M`````````0```!*#```"7V]P96X````````!````'@````````/Q`````P``
  71856. +M``!/4%13``0``````_(```/I````(R`O``0@;P`((B\`#%E/2.<#-"P!+@`J
  71857. +M2$ZZ```@!TZZ```F0$J`9T0(*P`!``-G-@@K``,``V<6(&L`&"](`!0@:P`$
  71858. +M<`!R`B)O`!1.D2!K`!0O2``4(`8@:P`$(DTD;P`43I)@"'`-*4```'#_3-\L
  71859. +MP%A/3G4@+P`$(&\`""(O``Q(YP,$3-\@P&"````#[X,```-`8VAK86)O<G0`
  71860. +M```````!````&H,```-`7V9I;F1?9F0````````!````((8```)?97)R;F\`
  71861. +M``````$```!J`````````_$````#`````$]05%,`!`!````#\@```^D````,
  71862. +M(&\`!%%/+PTJ2$'O``1.N@``2H!J!'#_8`X@#6<&("\`!"J`("\`!"I?4$].
  71863. +M=0`````#[X,```-`7V=E='1I;64````````!````$`````````/Q`````P``
  71864. +M``!/4%13``0``````_(```/I````'2!O``2>_`!`2.<[%BI(3KH``"`-9U)*
  71865. +M%6=.(@U![P`@)`@L;```=D!X`$ZN_'8N`&TV3J[_?"P`4H!.N@``)D!*@&<D
  71866. +MOH9G%"8&4H,B#20+3J[\=DJ`;Q`@`F`.($(B2Q+89OP@"V`"<`!,WVC<WOP`
  71867. +M0$YU```#[X,```-`8VAK86)O<G0````````!````$(8```)?1$]30F%S90``
  71868. +M``$````D@P```D!M86QL;V,``````0```#P````````#\0````,`````3U!4
  71869. +M4P`$`$````/R```#Z0```!,@;P`$(F\`"$CG,Q(F22((+&P``'3^3J[_K"X`
  71870. +M3KH``$J'9QHB"R0'=@!.KOY$+``B`DZN_Z9*AF<$(`-@!DZZ``!P_TS?2,Q.
  71871. +M=0`````#[X8```)?1$]30F%S90````$````2@P```T!C:&MA8F]R=```````
  71872. +M``$````>@P```D!?<V5T97)R`````0```$`````````#\0````,`````3U!4
  71873. +M4P`$`$````/R```#Z0```"0@;P`$GOP`#$CG`10J2$H89OQ3B)'-(`@F3=?`
  71874. +M78M^84ZZ```O+```2&P``$AO`!=.N@``3^\`#$'O``\B2$H99OQ3B9/((`ER
  71875. +M!;"!;PA![P`*T<!@!$'O``\O"$AL``0O"TZZ``!/[P`,%H<@37``3KH``$J`
  71876. +M9@I2!W!ZO@!OZD(5(`U,WRB`WOP`#$YU``````/X`````@````$```!>````
  71877. +M*@````````/O@P```T!C:&MA8F]R=`````````$````BA@```5]?=7,````!
  71878. +M````)H,```-?7W-P<FEN=&8````````"````9````#*#```#0%]?86-C97-S
  71879. +M`````````0```'(````````#\0````,`````3U!44P`$`$````/R```#Z@``
  71880. +M``(E;'@`825S`````_(```/I````!B!O``0O#2I(3KH``"!-<$#IB"I?3OH`
  71881. +M`````^^#```#0&-H:V%B;W)T`````````0````J#```"0&=E=&-W9``````!
  71882. +M````%@````````/Q`````P````!/4%13``0``````_(```/I````#R!O``0@
  71883. +M+P`(2.<A!BX`*DA.N@``(`=.N@``)``B#2QL``!.KO]&2H!G!'``8`9.N@``
  71884. +M</],WV"$3G4``````^^#```#0&-H:V%B;W)T`````````0```!*#```%0%]M
  71885. +M86ME7W!R;W1E8W1I;VX````````!````&(8```)?1$]30F%S90````$````@
  71886. +M@P```D!?<V5T97)R`````0```#`````````#\0````,`````3U!44P`$`$``
  71887. +M``/R```#Z0```!P@+P`$(B\`""]O``P`!%%/2.<'`"HO`!@L`2X`3KH``"`'
  71888. +M3KH``$J`9QHB0"!I`!@O2``0(`8B!2!I``0B;P`03I%@`G#_3-\`X%!/3G4@
  71889. +M+P`$(B\`""]O``P`!$CG!P`J+P`0+T4`$$S?`.!@H``````#[X,```-`8VAK
  71890. +M86)O<G0````````!````'H,```-`7V9I;F1?9F0````````!````)```````
  71891. +M``/Q`````P````!/4%13``0``````_(```/I````'"`O``0@;P`((B\`#%E/
  71892. +M2.<#-"P!+@`J2$ZZ```@!TZZ```F0$J`9R8(*P````-G&"!K`!`O2``4(`8@
  71893. +M:P`$(DTD;P`43I)@"'`-*4```'#_3-\LP%A/3G4@+P`$(&\`""(O``Q(YP,$
  71894. +M3-\@P&">``````/O@P```T!C:&MA8F]R=`````````$````:@P```T!?9FEN
  71895. +M9%]F9`````````$````@A@```E]E<G)N;P```````0```$P````````#\0``
  71896. +M``,`````3U!44P`$`$````/R```#Z0```($@+P`$(&\`"")O``PO;P`0``0O
  71897. +M;P`4``B>_``L2.<_-B9)*D@O0`!`)&\`7"`*9PY*DF8*2JH`!&8$<`%@`G``
  71898. +M<@`O0``T)`UG`B(5=``O00`L)@MG`B03>@!^`2]"`#!@4B@O`"S(ARPO`##,
  71899. +MATZZ``!*A&8$2H9G-B`%3KH``"1`2H!F!G#_8``!;DJ$9P@(*@````-G#$J&
  71900. +M9Q0(*@`!``-F#'`-*4```'#_8``!2E*%WH>ZKP!`;:@D;P!<(`IG$"`2(BH`
  71901. +M!"!L``!.N@``8`@@;```3KH``'H`(`5"KP!0>@!^`2]``"A@.B@O`"S(ARPO
  71902. +M`##,ATJ$9@1*AF<B(`5.N@``(D`@:0`(+T@`/"`$(@8@:0`$(F\`/$Z1@:\`
  71903. +M4%*%WH>ZKP!`;<`H+P!0(`12@&<&2J\`-&<(<`!.N@``8`H@+```@(1.N@``
  71904. +M+T``3'P`>`$N+P`P*B\`*&!P("\`+,"$+T``2"('PH0O00!$2H!F!$J!9U(@
  71905. +M!DZZ```B0"!I``Q(;P!$+T@`/"!I``1#[P!,+&\`/$Z66$\@+P!(9@HB#6<&
  71906. +M(@1&@<.5("\`1&8*(@MG!B($1H'#DTJO`$AF!DJO`$1G`E*%4H;8A+RO`$!M
  71907. +MBB`O`$Q.N@``2H5F%"!L``!.N@``2H!F"$JO`#1G`/[H(`5,WVS\WOP`+$YU
  71908. +M``````/O@P```T!C:&MA8F]R=`````````$```!P@P```T!?9FEN9%]F9```
  71909. +M``````,```%^```!!````'Z&```"7V5R<FYO```````!````J(8```-?7V]D
  71910. +M9%]T:6UE<@`````#```!Y````-0```#*@P``!$!?=&EM97)?<W1A<G0`````
  71911. +M```!````SH,```1`7W1I;65R7V%B;W)T`````````0```-B#```$0%]C:&5C
  71912. +M:U]S:6=N86QS``````$```%`A@```U]?;V1D7W-I9P````````$```%&@P``
  71913. +M!$!?=V%I=%]S:6=N86QS```````!```!3(,```1`7VAA;F1L95]S:6=N86QS
  71914. +M`````0```=R#```$0%]T:6UE<E]E>'!I<F5D``````$```'H`````````_$`
  71915. +M```#`````$]05%,`!`!````#\@```^D````@44](YR,D+B\`($ZZ```L+P`H
  71916. +M(`=.N@``*D!*@&=8("\`)%>`9PQ3@&<.<!8I0```8$1P#,"58$`@%70,S((D
  71917. +M``)"__.$ABJ"<@3"@G0$P(*P@6<>+T$`&"!M`"`O2``4(&T`!$/O`!AP`"1O
  71918. +M`!1.DF`&<`!@`G#_3-\DQ%!/3G4```/O@P```T!C:&MA8F]R=`````````$`
  71919. +M```,@P```T!?9FEN9%]F9`````````$````6A@```E]E<G)N;P```````0``
  71920. +M`"X````````#\0````,`````3U!44P`$`$````/R```#Z0````````/Q````
  71921. +M`P````!/4%13``0``````_(```/J````WF%M:6=A('-P96-I9FEC(&5R<F]R
  71922. +M````````56YK;F]W;B!E<G)O<@!N;W0@;W=N97(`;F\@<W5C:"!F:6QE(&]R
  71923. +M(&1I<F5C=&]R>0!N;R!S=6-H('!R;V-E<W,`:6YT97)R=7!T960@<WES=&5M
  71924. +M(&-A;&P`:2]O(&5R<F]R`&YO('-U8V@@9&5V:6-E(&]R(&%D9')E<W,`87)G
  71925. +M=6UE;G0@;&ES="!T;V\@;&]N9P``97AE8R!F;W)M870@97)R;W(`8F%D(&9I
  71926. +M;&4@;G5M8F5R`&YO(&-H:6QD('!R;V-E<W,``&YO(&UO<F4@<')O8V5S<V5S
  71927. +M`&YO="!E;F]U9V@@;65M;W)Y`'!E<FUI<W-I;VX@9&5N:65D`&)A9"!A9&1R
  71928. +M97-S`&)L;V-K(&1E=FEC92!R97%U:7)E9`!M;W5N="!D979I8V5S(&)U<WD`
  71929. +M`&9I;&4@97AI<W1S`&-R;W-S+61E=FEC92!L:6YK`&YO('-U8V@@9&5V:6-E
  71930. +M``!N;W0@82!D:7)E8W1O<GD`:7,@82!D:7)E8W1O<GD``&EN=F%L:60@87)G
  71931. +M=6UE;G0``&9I;&4@=&%B;&4@;W9E<F9L;W<`=&]O(&UA;GD@;W!E;B!F:6QE
  71932. +M<P!N;W0@82!T>7!E=W)I=&5R``!T97AT(&9I;&4@8G5S>0``9FEL92!T;V\@
  71933. +M8FEG``!N;R!S<&%C92!L969T(&]N(&1E=FEC90!I;&QE9V%L('-E96L``')E
  71934. +M860M;VYL>2!F:6QE('-Y<W1E;0!T;V\@;6%N>2!L:6YK<P``8G)O:V5N('!I
  71935. +M<&4`;6%T:"!A<F=U;65N=`!R97-U;'0@=&]O(&QA<F=E``!)+T\@<W1R96%M
  71936. +M(&5M<'1Y``!F:6QE(&YA;64@=&]O(&QO;F<``&1I<F5C=&]R>2!N;W0@96UP
  71937. +M='D`=&]O(&UA;GD@<V]F="!L:6YK<R`H;&]O<#\I`````!H````H````,@``
  71938. +M`$P```!<````=````'X```"8````L````,(```#2````Y````/8```$(```!
  71939. +M&@```28```$\```!4````5P```%N```!?@```8X```&>```!L````<0```'8
  71940. +M```!Z@```?H```((```"(````BX```)$```"5````F````)N```"@````I(`
  71941. +M``*F```"N@```"8``````^P````H`````0```VX```-J```#9@```V(```->
  71942. +M```#6@```U8```-2```#3@```TH```-&```#0@```SX```,Z```#-@```S(`
  71943. +M``,N```#*@```R8```,B```#'@```QH```,6```#$@```PX```,*```#!@``
  71944. +M`P(```+^```"^@```O8```+R```"[@```NH```+F```"X@```MX```+:```"
  71945. +MU@```!8````````#\@```^D```!%("\`!"E```!*@&<``(9R9Y"!9P``@E6`
  71946. +M9P``@'()D(%G?%.`9WA3@&=T4X!G<%.`9VQ3@&=H4X!G:%.`9VAR49"!9V93
  71947. +M@&=F4X!G9E.`9V93@&=F4X!G9E6`9V93@&=F4X!G9E.`9V95@&=F4X!G9E.`
  71948. +M9V93@&=F4X!G9E.`9V95@&=F4X!G9E.`9V93@&=F8&AP`&!F<`Q@8G`+8%YP
  71949. +M%F!:<`=@5G`(8%)P$&!.<!%@2G`"8$9P`F!"<!9@/G`'8#IP%F`V<"1@,G`6
  71950. +M8"YP%F`J<!Y@)G`28")P)6`><"9@&G`38!9P%F`2<!Q@#G`-8`IP#6`&<`U@
  71951. +M`G#_3G4O#BQL``!.KO]\80#^^BE````L7TYU```#^`````$````!```!#@``
  71952. +M``````/OA@```E]?3U-%4E(``````0````:&```"7T1/4T)A<V4````!```!
  71953. +M`@````````/Q`````P````!/4%13``0`0````_(```/K`````0```_(```/I
  71954. +M````!4ZZ``!.N@``3KH``'(&3OH````````#[X,```-`8VAK86)O<G0`````
  71955. +M```!`````H,```-`7V-L;W-E7V%L;``````!````!H,```)`9V5T<&ED````
  71956. +M``$````*@P```D!K:6QL`````````0```!`````````#\0````,`````3U!4
  71957. +M4P`$``````/R```#Z0```%D@;P`$("\`"%E/2.<!%BX`+T@`$"!O`!`J4&!D
  71958. +M<`VP+0`(9EH@+0"L9P;E@"!`8`*1R"9(("T`G+"'9S0@+0"@L(=G+"`M`."P
  71959. +MAV<D(`MG+B`K`!RPAV<8("L`(+"'9Q`@*P`XL(=G""`K`#"PAV8.(DUP8.^(
  71960. +M+'@`!$ZN_KPJ54J59IA,WVB`6$].=2`O``0B+P`(2.<!`BX`(`%3@&<,4X!G
  71961. +M"%.`9P1=@&8L+'@`!$ZN_WP@;```T/P!EB`'80#_2"!L``#0_`&D(`=A`/\Z
  71962. +M3J[_=G``8`AP%BE```!P_TS?0(!.=2`O``0B+P`(2.<&!"P!*@!.N@``2H5J
  71963. +M`D2%NJP``&8.2H9G!B`&3KH``'``8$@@!4ZZ```J0$J`9P9*K0`49PIP`RE`
  71964. +M``!P_V`L(`9G*"(M`!#!06$`_U@B`'`)O(!F%'(!*T$`%"M``!AP%$ZZ``!P
  71965. +M`&`"(`%,WR!@3G4``````^^&```"7U-Y<T)A<V4````"````Q````+:&```"
  71966. +M7V5R<FYO```````"```!*@```-R#```#0&-H:V%B;W)T`````````0```/B&
  71967. +M```#7U]O=7)?<&ED`````````0```0*#```$0%]S:6=?9&ES<&%T8V@`````
  71968. +M``(```%4```!#H,```-`7V9I;F1?<&ED```````!```!&`````````/Q````
  71969. +M`P````!/4%13``0`0````_(```/I````0R!O``1(YP`&*D@B32QX``1.KO\$
  71970. +M($U,WV``3OH``"`O``1(YP$$+@`J;``(8`X@+0`,L(=F!"`-8`@J54J59NYP
  71971. +M`$S?((!.=4CG(`)![``(3KH``"`L```B+```)`"S@@*"`'___RE"``12@BE"
  71972. +M```O`2\`2&P``$AL`!1.N@``3^\`$"QX``1.KOUF*4``.&<00>P`%'``3KH`
  71973. +M`"E``#1F"DAL``Y.N@``6$],WT`$3G5(YP`&("P`.&<*($`L>``$3J[]8$JL
  71974. +M`#1G."QX``1.KO]\8`PB37`<+'@`!$ZN_RX@;``T+'@`!$ZN_HPJ0$J`9N(@
  71975. +M;``T3KH``"QX``1.KO]V3-]@`$YU``````/X`````@````$```"D````=@``
  71976. +M``P````"````]@```.0```#(````N````)X```"4````C@```'H```!N````
  71977. +M:````$X````J`````````^^#```"0&9R964````````!````'(,```)`3F5W
  71978. +M3&ES=`````$```!2A@```5]?=7,````!````5H8```1?7W-T87)T=7!?=&EM
  71979. +M90```````0```%J#```#7U]S<')I;G1F`````````0```'Z#```#0$-R96%T
  71980. +M95!O<G0``````0```)J#```"7U]F86EL```````!````J(,```-`1&5L971E
  71981. +M4&]R=``````!````^@````````/Q`````P````!/4%13``0`0````_(```/J
  71982. +M````!F1O;W(N)6QX+B5L>```3F\@;65M;W)Y`````_(```/K````#P```_(`
  71983. +M``/I````+R!O``0@+P`((B\`#")O`!`O;P`4``0O;P`8``A93TCG#S8H+P`L
  71984. +M*B\`*"P!+@`J22](`"`L>``$3J[]9B9`2H!G,"!+(`1.KOUR)$!*@&<B(`UG
  71985. +M""5-`"@E10`D(&\`("`'(DHB!DZN_D1*`&8$(`I@%B`*9P8@2DZN_6P@"V<&
  71986. +M($M.N@``<`!,WVSP6$].=2!O``1(YP`&*D@@#6<8(DTL>``$3J[^/B!M``Y.
  71987. +MN@``($U.KOUL3-]@`$YU```#[X,```-`1&5L971E4&]R=``````"````K@``
  71988. +M`(0````````#\0````,`````3U!44P`$``````/R```#Z0```!0@;P`$("\`
  71989. +M"$CG(08N`"I(3KH``"(-+&P``$ZN_XA*@&<B(@!.KO^F(`=.N@``(`=.N@``
  71990. +M)``B#4ZN_T9*@&<$<`!@!DZZ``!P_TS?8(1.=0```^^#```#0&-H:V%B;W)T
  71991. +M`````````0```!*&```"7T1/4T)A<V4````!````&(,```5`7VUA:V5?<')O
  71992. +M=&5C=&EO;@````````(````R````+(,```)`7W-E=&5R<@````$```!&````
  71993. +M`````_$````#`````$]05%,`!`!````#\@```^D```!U(&\`!")O``@O;P`,
  71994. +M``0@+P`0+V\`%``(2.<'-"X`)&\`("9)*D@L*P!T)*\`'$*J`!(U?``!``Y"
  71995. +M:@`0)7P```(``#(U?``"``PE:P"``#8@*P!\9A`B*P`$;PHE?```"```%F`$
  71996. +M)4``%B53``1!ZP"$3KH``"5``"(E0``:)4``*B`K``1:@&<^58!G4%F`9T!5
  71997. +M@&9F(`UG'$AX`/](;```+PU.N@``3^\`#"H`;P8E10`68`@E?````0``%B5\
  71998. +M``"@```(8$HE?```$```"&!`)7P``$````A\`&`T2I-F$$HK``AF"B5\```@
  71999. +M```(8"`E?```@```"&`6("L`!&\&<$#AB&`&(#P``(``)4``"$J'9P)\`"`&
  72000. +M3KH``(&J``A,WRS@3G4@;P`$(F\`"%E/2.<C%BI(?@`O20`80J<L;```<@(D
  72001. +M#TZN_QQ/[P`$)D!*@&=0(@UT_DZN_ZPN`&=$(@<D"TZN_YI*@&<X(@=.KO\N
  72002. +M2H!7QD0&2(9(QDJ`9P8B`$ZN_Z8@!^6`+R\`&"!`+R@`#")"(`8@36$`_GI0
  72003. +M3WP`8`Y\_TZN_WQ.N@``*4```$J'9P8B!TZN_Z8@"V<()`MR`DZN_Q8@!DS?
  72004. +M:,183TYU```#^`````$````!````H`````````/O@P```T!?86UI9V$R9VUT
  72005. +M``````$```!T@P```U]R96%D;&EN:P````````$```"F@P```T!?;6%K95]M
  72006. +M;V1E``````$```$<A@```E]$3U-"87-E`````0```4*#```$0&-O;G9E<G1?
  72007. +M;W-E<G(```````$```&NA@```E]E<G)N;P```````0```;(````````#\0``
  72008. +M``,`````3U!44P`$`$````/R```#ZP```$````/R```#^P``")L11`!?<V5T
  72009. +M:FUP`'1E>'0`0%]L;VYG:FUP`$!?<V5T:FUP`%]?;&]N9VIM<`!?7W-E=&IM
  72010. +M<`!S<')I;G1F`%],5D]287=$;T9M=`!?06)S17AE8T)A<V4`7U]S<')I;G1F
  72011. +M`'1M<&YA;2YC`%]M:W1E;7``0'1M<&YA;0!?=&UP;F%M`%]?34521T5$`'!O
  72012. +M<&5N+F,`7W=A:71P:60`0&9C;&]S90!`9G)E90!`7W-T87)T7W!R;V-E<W,`
  72013. +M0%]S971E<G(`7V5R<FYO`%]$3U-"87-E`$!F;W!E;@!?7V9I9F]?8F%S90!?
  72014. +M7V9I9F]?;V9F<V5T`$!M86QL;V,`0'!C;&]S90!?<&-L;W-E`$!P;W!E;@!?
  72015. +M<&]P96X`<W1A<G0N8P!`8V]N=F5R=%]O<V5R<@!?7W!R;V-E<W-E<P!?7W-T
  72016. +M86-K7W-I>F4`7U]N97AT7W!I9`!?7V1O;W)?;F%M90!?7W-T87)T=7!?<&]R
  72017. +M=`!?3&EN:V5R1$(`7U]S=&%R=%]P<F]C97-S`%]?8VAI;&1?9&]O<E]N86UE
  72018. +M`%]?8VAI;&1?8V]M;6%N9%]L96X`7U]C:&EL9%]C;VUM86YD`%]?8VAI;&1?
  72019. +M97AI=`!?7V-H:6QD7V5N=')Y`&=E='!I9"YC`%]?;W5R7W!I9`!`8VAK86)O
  72020. +M<G0`0&=E='!I9`!?9V5T<&ED`'-I9VYA;"YC`%]?<VEG7VAA;F1L97)S`$!S
  72021. +M:6=N86P`7W-I9VYA;`!`<VEG=F5C`%]S:6=V96,`<VEG<V5T;6%S:RYC`$!?
  72022. +M<VEG7V1I<W!A=&-H`%]?<VEG7W!E;F1I;F<`7U]S:6=?;6%S:P!`<VEG8FQO
  72023. +M8VL`7W-I9V)L;V-K`$!S:6=S971M87-K`%]S:6=S971M87-K`'-T870N8P!?
  72024. +M<F5A9&QI;FL`0%]F:6)S=&%T`$!?;&9I8G-T870`7U]T96UP7V9N86UE`%]L
  72025. +M87-T7V5N=')Y`$!?9V5T7V-D`%]L87-T7V1I<@!`;'-T870`7VQS=&%T`$!S
  72026. +M=&%T`%]S=&%T`&1I<BYC`$!S965K9&ER`%]S965K9&ER`$!T96QL9&ER`%]T
  72027. +M96QL9&ER`$!R96%D9&ER`%]R96%D9&ER`$!C;&]S961I<@!?8VQO<V5D:7(`
  72028. +M0&]P96YD:7(`7V]P96YD:7(`9&ER7V1A=&$N8P!?7V=E=%]C9`!A8V-E<W,N
  72029. +M8P!`86-C97-S`%]A8V-E<W,`0%]?86-C97-S`%]?7V%C8V5S<P!F<W1A="YC
  72030. +M`%]I;V-T;`!`9G-T870`7V9S=&%T`'-Y;6QI;FLN8P!`<WEM;&EN:P!?<WEM
  72031. +M;&EN:P!M97-S86=E+F,`0&5X:70`7U]0<F]G<F%M3F%M90!?7U="96YC:$US
  72032. +M9P!?7W5S`%]?9F%I;`!?7VUE<W-A9V4`86QL;V-D;W,N8P!?06QL;V-$;W-/
  72033. +M8FIE8W1486=S`'-E=&IM<"YC`$!L;VYG:FUP`%]L;VYG:FUP`$!S971J;7``
  72034. +M9V5T:&]S=&YA;64N8P!?<W1R;F-P>0!?7W-Y<W1E;5]N86UE`$!G971H;W-T
  72035. +M;F%M90!?9V5T:&]S=&YA;64`<&5R<F]R+F,`7U]/4T524@!?<WES7V5R<FQI
  72036. +M<W0`7W-Y<U]N97)R`$!W<FET90!`<&5R<F]R`%]P97)R;W(`<VEG;&ES="YC
  72037. +M`%]S>7-?<VEG;&ES=`!W86ET-"YC`$!?:&%N9&QE7W-I9VYA;',`0%]W86ET
  72038. +M7W-I9VYA;',`0%]F<F5E7V5N=')Y`$!W86ET<&ED`$!W86ET`%]W86ET`$!W
  72039. +M86ET,P!?=V%I=#,`0'=A:70T`%]W86ET-`!P<V5U9&]?8RYC`$!?9G)E95]F
  72040. +M9`!`7V9I;F1?9F0`0%]P<V5U9&]?8VQO<V4`7U]P<V5U9&]?8VQO<V4`<FEN
  72041. +M9&5X+F,`0'-T<G)C:'(`0')I;F1E>`!?<FEN9&5X`&EN9&5X+F,`0'-T<F-H
  72042. +M<@!`:6YD97@`7VEN9&5X`'1I;65R<RYC`$!?9&5V:6-E7V-L;W-E`$!?9&5V
  72043. +M:6-E7V]P96X`0%]T:6UE<E]E>'!I<F5D`%]?=&EM97)?97AP:7)E9`!`7W1I
  72044. +M;65R7W-T87)T`%]?=&EM97)?<W1A<G0`0%]T:6UE<E]S:6<`7U]T:6UE<E]S
  72045. +M:6<`0%]T:6UE<E]A8F]R=`!?7W1I;65R7V%B;W)T`$!?9G)E95]T:6UE<@!?
  72046. +M7V9R965?=&EM97(`0%]A;&QO8U]T:6UE<@!?7V%L;&]C7W1I;65R`&9I9F]F
  72047. +M9"YC`%]?<W1A<G1U<%]T:6UE`$!?8VQE86YU<%]F:69O`%]?8VQE86YU<%]F
  72048. +M:69O`$!?:6YI=%]F:69O`%]?:6YI=%]F:69O`%]?9FEF;U]S:6<`7U]F:69O
  72049. +M7V]K`%]?1FEF;T)A<V4`8VQO<V4N8P!`8VQO<V4`7V-L;W-E`$!?7V-L;W-E
  72050. +M`%]?7V-L;W-E`&9I;&5S+F,`0%]L87-T7V9D`%]?;&%S=%]F9`!?7V9I;F1?
  72051. +M9F0`7U]F<F5E7V9D`$!?86QL;V-?9F0`7U]A;&QO8U]F9`!U=&EM92YC`$!?
  72052. +M9VUT,F%M:6=A`$!T:6UE`$!U=&EM90!?=71I;64`8F-O<'DN8P!`;65M;6]V
  72053. +M90!`8F-O<'D`7V)C;W!Y`&%M:6=A=&EM92YC`%]D87EL:6=H=`!?='IN86UE
  72054. +M`%]?0UA$,S,`0&QO8V%L=&EM90!`7V=E='1I;64`0&9T:6UE`%]F=&EM90!`
  72055. +M9V5T=&EM96]F9&%Y`%]G971T:6UE;V9D87D`=&EM96-O;G9E<G0N8P!?5&EM
  72056. +M97)"87-E`$!?86UI9V$R9VUT`%]?86UI9V$R9VUT`%]?9VUT,F%M:6=A`%]?
  72057. +M9V5T=&EM90!P=V0N8P!`9V5T;&]G:6X`7V=E=&QO9VEN`$!G971P=VYA;0!?
  72058. +M9V5T<'=N86T`0&=E='!W=6ED`%]G971P=W5I9`!?7V%M:6=A7W5S97(`<F5A
  72059. +M9&QI;FLN8P!?<W1R;&5N`$!R96%D;&EN:P!A;&QO8V$N8P!?;6%L;&]C`%]F
  72060. +M<F5E`%]A;&QO8V$`=6YL:6YK+F,`0'5N;&EN:P!?=6YL:6YK`'!I<&4N8P!`
  72061. +M<W1R8V%T`$!.97=,:7-T`$!S;V-K971P86ER`%]S;V-K971P86ER`$!P:7!E
  72062. +M`%]P:7!E`&=R<"YC`$!G971G<FYA;0!?9V5T9W)N86T`0&=E=&=R9VED`%]G
  72063. +M971G<F=I9`!S:6=N86QS+F,`7U]&4$524@!`7U]E>&ET`$!?9FEN9%]P:60`
  72064. +M0%]C;&5A;G5P7W!R;V-E<W-E<P!?7V-H:6QD<F5N7V5X:70`0%]I;FET7W!R
  72065. +M;V-E<W-E<P!`7V-L96%N=7!?<VEG;F%L<P!?7V-L96%N=7!?<VEG;F%L<P!`
  72066. +M7VEN:71?<VEG;F%L<P!?7VEN:71?<VEG;F%L<P!`0VAK7T%B;W)T`%]#:&M?
  72067. +M06)O<G0`7V-H:V%B;W)T`$!#6$9%4E(`7T-81D524@!?7VAA;F1L95]S:6=N
  72068. +M86QS`%]?=V%I=%]S:6=N86QS`$!?8VAE8VM?<VEG;F%L<P!?7V-H96-K7W-I
  72069. +M9VYA;',`7U]S:6=?9&ES<&%T8V@`0&%L87)M`%]A;&%R;0!?;6%I;BYC`$!M
  72070. +M86EN`$!?7V=E=&5N=@!`='%S;W)T`$!S=')N8W!Y`%]?7V-T>7!E`$!?:6YI
  72071. +M=%]U;FEX:6\`7U]?:6]B`%]?6$-%6$E4`%]3>7-"87-E`$!R96%L;&]C`%]?
  72072. +M7VUA:6X`0&UA:V5?96YV:7)O;@!?;6%K95]E;G9I<F]N`%]E;G9I<F]N`%]?
  72073. +M;V1D7W-I9P!?7V]D9%]T:6UE<@!U;6%S:RYC`$!U;6%S:P!?=6UA<VL`<')O
  72074. +M=&5C=&EO;BYC`$!?;6%K95]M;V1E`%]?;6%K95]M;V1E`$!?;6%K95]P<F]T
  72075. +M96-T:6]N`%]?;6%K95]P<F]T96-T:6]N`%]U<V5?86UI9V%?9FQA9W,`9VED
  72076. +M+F,`0&=E=&5G:60`7V=E=&5G:60`0&=E=&=I9`!?9V5T9VED`%]E>&ET+F,`
  72077. +M0%]E>&ET`%]?97AI=`!?7U]E>&ET`$!?8VQO<V5?86QL`%]?8VQO<V5?86QL
  72078. +M`&EO8W1L+F,`0&EO8W1L`&]P96XN8P!`7V%L;&]C7V%M:6=A9F0`0'-T<FEC
  72079. +M;7``7V]P96X`7U]?;W!E;@!C=&EM92YC`%]S<')I;G1F`$!R96%D`$!?='IS
  72080. +M970`7U]T>G-E=`!`;6MT:6UE`%]M:W1I;64`0&-T:6UE`%]C=&EM90!`87-C
  72081. +M=&EM90!?87-C=&EM90!`9VUT:6UE`%]G;71I;64`7VQO8V%L=&EM90!`='IS
  72082. +M971W86QL`%]T>G-E='=A;&P`0'1Z<V5T`%]T>G-E=`!?=&EM97IO;F4`86UI
  72083. +M9V%D;W,N8P!?7VEN:71?=6YI>&EO`%]?86QL;V-?86UI9V%F9`!`7V1O7W1R
  72084. +M=6YC871E`%]?9&]?=')U;F-A=&4`<F5N86UE+F,`0')E;F%M90!?<F5N86UE
  72085. +M`&-H;W=N+F,`0&9C:&]W;@!?9F-H;W=N`$!C:&]W;@!?8VAO=VX`8F-M<"YC
  72086. +M`$!B8VUP`%]B8VUP`&)Z97)O+F,`0&)Z97)O`%]B>F5R;P!F=')U;F-A=&4N
  72087. +M8P!`9G1R=6YC871E`%]F=')U;F-A=&4`9F-H;6]D+F,`0&9C:&UO9`!?9F-H
  72088. +M;6]D`&UK9FEF;RYC`$!M:VYO9`!?;6MN;V0`0&UK9FEF;P!?;6MF:69O`&ES
  72089. +M871T>2YC`$!I<V%T='D`7VES871T>0!S:6=P875S92YC`$!S:6=P875S90!?
  72090. +M<VEG<&%U<V4`<FUD:7(N8P!`<FUD:7(`7W)M9&ER`'-T<F9T:6UE+F,`0'-T
  72091. +M<F9T:6UE`%]S=')F=&EM90!T<G5N8V%T92YC`$!T<G5N8V%T90!?=')U;F-A
  72092. +M=&4`97AE8RYC`$!E>&5C`%]E>&5C`$!E97AE8P!?965X96,`=6ED+F,`0&=E
  72093. +M=&5U:60`7V=E=&5U:60`0&=E='5I9`!?9V5T=6ED`'-L965P+F,`0'-L965P
  72094. +M`%]S;&5E<`!C<F5A="YC`$!C<F5A=`!?8W)E870`0%]?8W)E870`7U]?8W)E
  72095. +M870`=W)I=&4N8P!?=W)I=&4`0%]?=W)I=&4`7U]?=W)I=&4`=&EM92YC`%]T
  72096. +M:6UE`&=E=&5N=BYC`%]?7V=E=&5N=@!L:6YK+F,`0&QI;FL`7VQI;FL`;6MT
  72097. +M96UP+F,`0&UK=&5M<`!G971W9"YC`$!G971C=V0`0&=E='=D`%]G971W9`!C
  72098. +M:&UO9"YC`$!C:&UO9`!?8VAM;V0`;'-E96LN8P!`;'-E96L`7VQS965K`$!?
  72099. +M7VQS965K`%]?7VQS965K`')E860N8P!?<F5A9`!`7U]R96%D`%]?7W)E860`
  72100. +M<V5L96-T+F,`0'-E;&5C=`!?<V5L96-T`&9C;G1L+F,`7V9C;G1L`&5R<F]R
  72101. +M7VUS9RYC`&5R<F]R+F,`7U]S971E<G(`7V-O;G9E<G1?;W-E<G(`86)O<G0N
  72102. +M8P!`:VEL;`!`86)O<G0`7V%B;W)T`&MI;&PN8P!?:VEL;`!P<F]C97-S97,N
  72103. +M8P!`1&5L971E4&]R=`!`0W)E871E4&]R=`!?7V-L96%N=7!?<')O8V5S<V5S
  72104. +M`%]?:6YI=%]P<F]C97-S97,`7U]F:6YD7W!I9`!?7V9R965?96YT<GD`9&5V
  72105. +M:6-E<RYC`%]?9&5V:6-E7V-L;W-E`%]?9&5V:6-E7V]P96X`;6MD:7(N8P!`
  72106. +M;6MD:7(`7VUK9&ER`&9I8G-T870M:&%R9"YC`%]?9FEB<W1A=`!?7VQF:6)S
  72107. +M=&%T`````0````$`"0`)`^D````$``X`%@`!`!@`!``!`"$`#@`!`"L````!
  72108. +M`#0`#``!``D`#`/I``(`/`!)``$`5@````$`8``I``,`"0`*`^D``0!H``(`
  72109. +M<0`$``$`>0````$`@0`$`^H``````($`"0/K``````"*`%0``P`)`&\#Z0`,
  72110. +M`)$`F@"B`*@`N`#"`,D`T0!5`-D`Y0#R``0`^P%>``$!`P%:``$!"P`(``$!
  72111. +M$@````$`@0`%`^H``````($``0/K``````$9`2T``P`)`,4#Z0`+`*(`P@$@
  72112. +M`3`!/`%)`50`\@%@`,D!;P`"`*D`Y@`!`7D`M@`!`($`!@/J``````"!``H#
  72113. +MZP````4!B0`D``$!FP`@``$!KP`<``$!OP`8``$!S`````$!V@)M``$`"0`#
  72114. +M`^D``@'C`>P``@'W`````0'_`````0('`H8``0`)`",#Z0`#`,("$`'L``0"
  72115. +M'P!B``$")P!:``$"+P`,``$"-P````$"/P+&``$`"0`5`^D`!`)+`EL![`)I
  72116. +M``0"=`!&``$"?@!"``$"B``$``$"E`````$"H`,"``(`"0":`^D`"0*F`K`!
  72117. +M[`*Z`,D"Q@+3`MX"Z``$`O(!U@`!`OD!S@`!`P`!G@`!`P8!E@`!`($`00/K
  72118. +M``````,,`_4``0`)`-`#Z0`)`M,"W@'L`,(!(`#)`/("Z`"B``H#$@,@``$#
  72119. +M&P,8``$#)`,(``$#+0,$``$#-@*0``$#/P*,``$#2`).``$#4@)*``$#7`%>
  72120. +M``$#90%:``$#;@48``(`"0`(`^D``0#)``("WP````$#>0````$`@0`"`^L`
  72121. +M```"`M,`!``!`N@````!`X(%,@`!``D`&P/I``,`P@*P`>P`!`.+`&```0.3
  72122. +M`%@``0.;``@``0.E`````0.O!6@``0`)`$$#Z0`&`,(!(`*Z`,D#M@'L``(#
  72123. +MO@`(``$#Q0````$#S`77``$`"0`.`^D``P"X`,D![``"`]8`"``!`]\````!
  72124. +M`^@%_P`"``D`/@/I``4#\0/X`,D$!@02``($%P#B``$$'@#4``$`@0`/`^H`
  72125. +M````!"@&A@`!``D`!P/I``$`R0`!!#,````!!$<&G``!``D`#P/I``0`#0*'
  72126. +M`!<":0`$!%``'@`!!%D`%@`!!&(`!``!``$````!!&H&S``!``D`!P/I``($
  72127. +M=P2!``($CP`(``$$G`````$$J0;I``(`"0`I`^D`!@#)!+($N@3'`,($T``"
  72128. +M!-@`!``!!.`````!`($`"`/J``````3H!U(``@`)```#Z0``````@0#&`^H`
  72129. +M```!!/("F``!!/\(1P`!``D`.@/I``4%!@47`,(%)@$P``@%-`#```$`D@"T
  72130. +M``$%/0"F``$%0P"B``$%20"2``$%4`"&``$%5P`0``$%7@````$%90BJ``$`
  72131. +M"0`2`^D``P5O!7D![``"!80`!``!!9,````!!:((V``!``D``P/I``$%J@`"
  72132. +M!;0`"``!!;P````!!<0(Z@`!``D``P/I``$%RP`"!=0`"``!!=L````!!>((
  72133. +M_``"``D`30/I``(%Z@7Y``P&"`$$``$&&`$```$&*`#(``$&-@"\``$&1`"H
  72134. +M``$&4`"D``$&7`!^``$&:@!Z``$&>`!2``$&A0!.``$&D@````$&H`````$`
  72135. +M@0`$`^H`````!JX);0`#``D`'@/I``($$@:W``0&Q@!4``$&U0!4``$&Y```
  72136. +M``$&\`````$`@0`%`^H````!!OP````!`($`!`/K````!`<'``P``0#E``@`
  72137. +M`0#9``0``0<1`````0<<";H``0`)`!8#Z0`#!6\%>0'L``0')`!0``$'*P!,
  72138. +M``$',@`$``$'.P````$'1`GL``(`"0!B`^D``P"B`,(`\@`(!TP!@``!!U8!
  72139. +M@``!!7H!3``!!V`!2``!!7`!+``!!VH!*``!!W0`,``!!W\````!`($``@/K
  72140. +M``````>*"H```0`)`!H#Z0`%`+@`R0>1!YT![``"!Z0`"``!!ZL````!![(*
  72141. +MOP`!``D`!P/I``$'N0`"!\,`#``!!\H````!!]$*U0`"``D`4@/I``8'W0?G
  72142. +M!^X']@@!`>P`!`@,`0X``0@3`0H``0@:``@``0@H`````0"!``P#Z@`````(
  72143. +M-@MU``$`"0`P`^D``@?N"$0`!@A/`'@``0A;`'0``0>2`"@``0AG`"```0@"
  72144. +M``0``0AS`````0A]"[X``@`)``L#Z0````8(@P`D``$(C0`D``$(EP`6``$(
  72145. +MH0`2``$(JP`$``$(M0````$`@0`)`^H````!"+\`!``!",P+Z@`!``D`*@/I
  72146. +M``8`P@$@"-8`N`#)`>P``@C?``P``0*G`````0CI#$```P`)`"P#Z0`""/$(
  72147. +M^0`!"0``+@`!`($`!P/J``````"!``$#ZP`````)"`R=``$`"0`V`^D`!@$@
  72148. +M`>P#M@=+`,(`R0`""1$`9``!"1D`8``!"2$-`P`"``D"&@/I`!4%>0#9`.4'
  72149. +M!P'L!6\'<P#R`+@`50)+"2<%!@47`,D`P@"B!Q$)+P02!OP`!`DY!]0``0E%
  72150. +M!\(``0E1!S8``0E7!S(``0"!`!4#Z@`````)70_\``(`"0`)`^D````$"6,`
  72151. +M%@`!"6T`$@`!"7<`!``!"8$````!`($`"0/J``````F+$"<``P`)`*D#Z0`-
  72152. +M"94$'0F<":0)KPG$"=,&=P9#!!8&D08G!@<`%`GE`IH``0GW`IH``0H)`EP`
  72153. +M`0H8`EP``0HG`EH``0HR`EH``0'M`E(``0H]`E(``0I'`D0``0I/`D```04'
  72154. +M`>H``0I7`>8``048`=```0IH`<P``0IW`;8``0J'`;(``0),`0P``0J7`0@`
  72155. +M`0JF`"@``0JM`"0``0"!``H#Z@``````@0!$`^L````#`EL!"``!`FD!!``!
  72156. +M`A``!``!"K0170`#``D"'0/I`!4#\0J["+\*P0K+"M,*W00&"N4`R0H(!N,&
  72157. +M0P:1"O0*^@L$`*(+#`#R!!8``PL6`WH``0L>`'@``0LL`'@``0"!`"P#Z@``
  72158. +M````@0`(`^L````(!($`'``!"SH`&``!"$0`%``!`3P`$``!!K<`#``!"T,`
  72159. +M"``!"TT`!``!!!(````!"UD4>P`!``D`!`/I`````@MA``0``0MH`````0MO
  72160. +M%(<``@`)`#X#Z0````0+?`!^``$+B`!Z``$+E``$``$+I@````$`@0`!`^L`
  72161. +M```!"[@````!"\D4U@`!``D``@/I````!`O/``0``0O8``0``0OA`````0OI
  72162. +M`````0OQ%.```0`)`!4#Z0`'"OH&=PM-">0&Q0<J!TL`!@OY`$P``0P``$@`
  72163. +M`0F=`"8``0P'`"(``0P/`````0P;`````0PG%2H``0`)`!,#Z0`"!7D![``"
  72164. +M#"\`#``!`[<````!##854P`"``D`F`/I``H,/`"X`,(+DP2R`2``R0Q,`>P$
  72165. +M$@`"#%8"2``!#%P````!`($``@/J``````QD%D0``P`)!6@#Z0`*#&L*P0K3
  72166. +M!^X*W0<C#'0,50DG!<L`$`Q[%9(``0R#%9(``0R+%80``0R3%8```0R;$/0`
  72167. +M`0RB$/```0RI$)0``0RR$)```0R[#I@``0S##I0``0?W#C```0S+#BP``0S6
  72168. +M#38``0SA#38``0SL#,8``0SS#,8``0"!`$@#Z@````,'W0`8``$,^@`4``$'
  72169. +MYP`,``$`@03V`^L`````#00<K``"``D!G`/I``L$%@=S`/(![`"B`,(!(`4&
  72170. +M"G8`N`#)``8*Y@7L``$-#P7,``$,/056``$-'05(``$-+0+8``$-.P+0``$`
  72171. +M@0`(`^H`````#4D>O``!``D`)P/I``0`P@$@`,D![``"#5(`"``!#5H````!
  72172. +M#6(?!``!``D`#@/I````!`UJ`"H``0UR`!P``0UZ``P``0V!`````0V('QH`
  72173. +M`0`)`!`#Z0````(-CP`,``$-E0````$-FQ\R``$`"0`%`^D````"#:,`"``!
  72174. +M#:H````!#;$?/P`!``D`#`/I``(#M@'L``(-O0`(``$-R`````$-TQ]@``$`
  72175. +M"0`-`^D``P.V`>P+DP`"#=P`"``!#>0````!#>P?B@`!``D`$`/I``$`P@`$
  72176. +M#?4`+``!#?P`(``!#@,`#``!#@L````!#A,?J@`!``D`#0/I``(#M@'L``(.
  72177. +M'``$``$.)`````$.+!_,``$`"0`/`^D`!0#"!08%%PIV`H<``@XW``0``0Y!
  72178. +M`````0Y+(`8``0`)`"@#Z0`$`2``P@"X`,D``@Y3``0``0Y:`````0YA($\`
  72179. +M`P`)`9<#Z0`"#(H'[@`"#FP`$@`!#G8````!`($`>0/J``````"!``D#ZP``
  72180. +M```.@"+2``$`"0`6`^D`!0#"`2`-+`'L`,D``@Z+``@``0Z5`````0Z?(Q``
  72181. +M`0`)`-4#Z0`*`,(!(`"B`*@+#`02!8,#M@#)`/(`!`ZF`S@``0ZL`QP``0ZR
  72182. +M`"(``0ZY`````0[`)#,``0`)``(#Z0````0.Q@`$``$.SP`$``$.V`````$.
  72183. +MX`````$.Z"0]``$`"0`.`^D`!P8'!08%%PM#!B<+30'L``(.\``$``$.]P``
  72184. +M``$._B2$``$`"0`/`^D``@Q5`>P`!`\&`#(``0\-`"H``0\4``@``0\=````
  72185. +M`0\F)*@``0`)`",#Z0`#`,(%>0'L``0$T0""``$/+@!V``$/-0`,``$//@``
  72186. +M``$/1R3F``$`"0`,`^D``0@!``('G@`$``$/3@````$/5"4"``$`"0`=`^D`
  72187. +M`P#R`,D![``""L(`!``!#UT````!#V<E.0`!``D`$P/I``,`N`'L`,D``@]N
  72188. +M``@``0]T`````0]Z)68``@`)`"0#Z0`$`YH`5002`>P``@^#``0``0!I````
  72189. +M`0"!``(#Z@`````/BR6V``$`"0`&`^D``@^2`>P``@^;``0``0^B`````0^I
  72190. +M)=$``0`)``\#Z0`$`+@`R0N3`>P``@^Q``@``0^X`````0^_)@(``0`)`!P#
  72191. +MZ0`"!7D![``$#\<`7``!#\X`3@`!#]4`#@`!#]X````!#^<F-``!``D`'`/I
  72192. +M``,`P@5Y`>P`!`QU`&0``0_N`%@``0_T``P``0_\`````1`$)FL``0`)`($#
  72193. +MZ0`+!@<%!@47"T,*=@9;!B<+30#"!7D![``"$`T`&``!$!4````!$!TG00`!
  72194. +M``D`(`/I``,`P@5Y`>P``1`E`````1`L)WP``@`)```#Z0``````@0#>`^H`
  72195. +M```"!,<#<@`!!+H"U@`!$#@HD0`"``D`10/I``(`R02R``0`N0#^``$00`#^
  72196. +M``$!(0`$``$020````$`@0`!`^L````!`,(````!$%@H\@`!``D`!0/I``00
  72197. +M7P'V#`X![``"$&8````!$&T````!$'0I%P`!``D`60/I``8)I`)+`>,![`#"
  72198. +M"P0``A!@`.X``1![`.8``1"!*:```P`)`$,#Z0`($(P$%A"8`%4&MP02"2\`
  72199. +MH@`(";``L@`!$*4`L@`!"=0`2``!$+D`2``!":4`(@`!$,H`'@`!!2<`!``!
  72200. +M$-4````!`($`!@/J``````"!``\#ZP````8!8``X``$)Q``T``$!5``4``$!
  72201. +M,``(``$!XP`$``$!20````$0XBHY``$`"0`O`^D``1",``0%ZP"4``$0[`"0
  72202. +M``$%^@`<``$0^P````$1"2IY``$`"0`4`^D`!`"X"Y,`R0'L``(1$0`(``$1
  72203. +M&`````$1'RJP``(`"0!U`^D`!@#"`2``R0M[`J8(3@`$`K$!,``!$2X!*``!
  72204. +>`KL`&``!$3@````!`($`0`/K`````0+&`````0``
  72205. +`
  72206. +end
  72207. diff -ru --new-file baseline/fsf/emacs/unixlib/src/unix.lib.uue amiga/fsf/emacs/unixlib/src/unix.lib.uue
  72208. --- baseline/fsf/emacs/unixlib/src/unix.lib.uue    Wed Dec 31 17:00:00 1969
  72209. +++ amiga/fsf/emacs/unixlib/src/unix.lib.uue    Sun Oct 15 17:18:35 1995
  72210. @@ -0,0 +1,1186 @@
  72211. +begin 666 unix.lib
  72212. +M```#^@``*UH```/I````"2!O``0@UTC0_/QP`$YU(&\`!"`O``AF`G`!(EA,
  72213. +MT/S\6(].T0```_(```/I````#$CG(#(@;P`80^\`'$7Z`!PF;P`4)`LL>0``
  72214. +M``!.K@``(`N0@DS?3`1.=1;`3G4``````^^!```#7T%B<T5X96-"87-E````
  72215. +M`0```!B&```#7TQ63U)A=T1O1FUT`````0```!X````````#\@```^D````*
  72216. +M(&\`!"\-*D@@#68$2^P``$'L```B31+89OPO#4ZZ``!83RI?3G4``````_@`
  72217. +M```!`````0```!(````!`````@````X````````#[X,```)?;6MT96UP````
  72218. +M``$````>`````````_$````#`````$]05%,`!`!````#\@```^H````$=#IT
  72219. +M;7!?6%A86%A8`````````_(```/K````"0```_(```/I````;R!O``0B;P`(
  72220. +MGOP`($CG+Q8F22](`"`O20`D<`Q.N@``*D`@+```4JP``"(L``#2@"\!2&P`
  72221. +M`$AO`#!.N@``3^\`#'!WL!-F-DHK``%F,$'O`"A#[``03KH``"9`+&P``$ZN
  72222. +M_\0N`'P`0>\`*"(()#P```/M3J[_XBH`>`%@1G!RL!-F-DHK``%F,$'O`"A#
  72223. +M[``23KH``"9`+&P``$ZN_\HJ`'@`0>\`*"(()#P```/N3J[_XBX`?`%@"G`6
  72224. +M*4```&```(Q*A6<$2H=F!$ZZ```@"V="2H5G/DJ'9SH@#6<V<``O`"\`+P!(
  72225. +M>/__+P8O!R`%(@0@;P`X3KH``$_O`!@K0``(9Q`JK```*4T``"M+``0@"V`Z
  72226. +M(`UG!B!-3KH``$J%9PY*A&<*(@4L;```3J[_W$J'9PY*AF<*(@<L;```3J[_
  72227. +MW"`+9P8@2TZZ``!P`$S?:/3>_``@3G4@;P`$44](YP$T)DA+[```+T@`$&`Z
  72228. +M(&H`!+'+9C`F52XK``@JDR!K``1.N@``($M.N@``0J=(;P`8+P=.N@``3^\`
  72229. +M#$J`:PX@+P`48`HJ2B15(`IFP'#_3-\L@%!/3G4``````_@````#`````0``
  72230. +M`)````!4````-`````,````"```!:````0P```$(`````````^^#```"0&UA
  72231. +M;&QO8P`````!````'H8```1?7V9I9F]?;V9F<V5T`````````@```"@````D
  72232. +MA@```U]?9FEF;U]B87-E``````$````L@P```U]?<W!R:6YT9@````````$`
  72233. +M```\@P```D!F;W!E;@```````@```)0```!8A@```E]$3U-"87-E````!```
  72234. +M`3X```$L````F@```%Z&```"7V5R<FYO```````!````OH,```)`7W-E=&5R
  72235. +M<@````$```#.@P``!$!?<W1A<G1?<')O8V5S<P`````!````^H,```)`9G)E
  72236. +M90````````(```&,```!'H,```)`9F-L;W-E``````(```&&```!3(,```)?
  72237. +M=V%I='!I9`````$```&8`````````_$````#`````$]05%,`!`!````#\@``
  72238. +M`^H````%<&EP93IU>&]P96XN)6QX`'<`<@````/R```#ZP````$```/R```#
  72239. +MZ0```,6>_``82.<A/DGY`````$7L`!@J6B!:+AHF;``D+T@`()/)+'@`!$ZN
  72240. +M_MHD;```($!#Z`!*($DB;```3J[_"B!L``!#[``$3J[^DD/O`"0B_(```"1P
  72241. +M`2+`0IDB+P`@0>\`)"0(+$I.KOVBX8`K0``8+'@`!$ZN_WPB2TZN_GI*@&<*
  72242. +M($`B34ZN_I)@"")-<!Q.KO\N3J[_=B)+<"!.KO\N(F\`("`'3J[_+DS??(3>
  72243. +M_``82H!.=2!O``0@+P`((B\`#"]O`!``!"]O`!0`""]O`!@`#"]O`!P`$"]O
  72244. +M`"``%"]O`"0`&%E/2.</%BHO`#@L+P`T+@`J2"]!`!QP'$ZZ```F0"!-2AAF
  72245. +M_%.(D<T@"%*`*4``('(!+'@`!$ZN_SHI0``<(D`2W6;\<!QR`4ZN_SHI0``8
  72246. +M<"!R`4ZN_SHI0``D<`$I0``00?K_G"`(0_K^L)")*4``%$'L``!.KO\B*4``
  72247. +M`"(+9P`!2DJL`!QG``%"2JP`&&<``3I*K``D9P`!,DJ`;P`!+"!L```@*``4
  72248. +M0?K^;B)L```B:0`08`(2V%.`9/I![```(FP`)!+89OP@+```4JP``"=```PG
  72249. +M1P`03>P`%CS\`!1P!1E```P@5C%\`!P`$A%```@@7B%K``P`%"`\@``#\DJ&
  72250. +M9@)P`2@`2H5O!"`%8`0@+```0J=(>``!+SR```/Z+P`O/(```_,O!B\$+R\`
  72251. +M3"\\@``#\2\O`%`O/(```_`O+P!4+SR```/O+R\`6"\\@``#[2\O`%@O/(``
  72252. +M`^XO!R\\@``#["!L```O*``0+SR```/K+&P``"(/3J[^#D_O`%0G0``(9S0@
  72253. +M;```+'@`!$ZN_H`@;```+'@`!$ZN_HQ*@&?D0JL`%$'L```B2RQX``1.KO\0
  72254. +M("L`#&!H+&P``$ZN_WQ.N@``8`)P#"E````@"V<&($M.N@``("P`'&<.(D`@
  72255. +M+``@+'@`!$ZN_RX@+``89PPB0'`<+'@`!$ZN_RX@+``D9PPB0'`@+'@`!$ZN
  72256. +M_RX@+```;PH@0"QX``1.KO\<</],WVCP6$].=0```_@````#`````0```5H`
  72257. +M``%6```!1@```!<````"```"_````NH```+8```"S````L0```)0```!S```
  72258. +M`<(```&J```!E@```8H```%\```!=````6P```%B```!0````30```$B```!
  72259. +M%````$0````X````&@```!`````````#[X$```-?3&EN:V5R1$(````````!
  72260. +M````"H8```)?1$]30F%S90````,```*F```"7@```"R&```$7U]S=&%R='5P
  72261. +M7W!O<G0```````,```)^```"<@```$"#```"0&UA;&QO8P`````!```!`(8`
  72262. +M``-?7V1O;W)?;F%M90`````!```!IH8```-?7VYE>'1?<&ED```````"```!
  72263. +MM@```;*&```#7U]S=&%C:U]S:7IE`````0```?J&```#7U]P<F]C97-S97,`
  72264. +M`````0```I*#```$0&-O;G9E<G1?;W-E<G(```````$```*NA@```E]E<G)N
  72265. +M;P```````0```K:#```"0&9R964````````!```"P`````````/Q`````P``
  72266. +M``!/4%13``0`0````_(```/J````!@````````````````````$`````````
  72267. +M`````_(```/K````"@```_(```/I`````TZZ```@+```3G4``````^^#```#
  72268. +M0&-H:V%B;W)T`````````0````*&```#7U]O=7)?<&ED`````````0````8`
  72269. +M```````#\0````,`````3U!44P`$`$````/R```#Z0```",@+P`$(&\`"")O
  72270. +M``Q(YP$4+@`F22I(3KH``'`!OH!M+'`@OH!L)B`+9PX@!^>`0^P``-/`)MDF
  72271. +MV2`-9PSGAT'L``#1QR#=(-UP`&`(<!8I0```</],WRB`3G4@+P`$(&\`")[\
  72272. +M`!`O2``(0J\`#$'O``A#UV&62H!G"#!\__\@"&`"(!?>_``03G4``````^^#
  72273. +M```#0&-H:V%B;W)T`````````0```!B&```$7U]S:6=?:&%N9&QE<G,`````
  72274. +M``(```!`````,(8```)?97)R;F\```````$```!0`````````_$````#````
  72275. +M`$]05%,`!`!````#\@```^D````5("\`!$CG#P`N`"PL``!.N@``*4<``'H`
  72276. +M>`$@+```P(1G#B`L``#`A&8&(`5.N@``4H78A'`@NH!MX"`&3-\`\$YU("\`
  72277. +M!"\'(@`@+```@($N'V"P```#[X8```-?7W-I9U]M87-K```````$````3```
  72278. +M`"0````4````#(,```-`8VAK86)O<G0````````!````$(8```1?7W-I9U]P
  72279. +M96YD:6YG`````````0```!R#```$0%]S:6=?9&ES<&%T8V@```````$````N
  72280. +M`````````_$````#`````$]05%,`!`!````#\@```^D```":(&\`!"`O``@B
  72281. +M;P`,+V\`$``$64](YR$T+@`F;P`<*D@D22])`!1@`AK:2A)G!%.';O:U[P`4
  72282. +M8QH0*O__<B^P`6<0=#JP`F<*4X=O!AK!8`(:VTH39P13AV[V0A5*AU[`1`!(
  72283. +M@$C`3-\LA%A/3G4@+P`$(&\`"")O``Q93TCG)S8N`"I(+TD`($JL``!G``#^
  72284. +M(&P``"9H``Q.N@``(BL`!+*`9@``Z"!L``!(:``L0>P``")3<`!&`&$`_UA8
  72285. +M3TJ`9P``RD'L```B31`8L!EF``"\2@!F]&8``+1*AV80(&P``"`H`!AR`["!
  72286. +M9P``H"!L```@*``8<ORP@6<$68!F/B)L```B$2QL``!.KO^"+``@;```T/P`
  72287. +M+"((=/Y.KO^L*@!G$B(%0>P``"0(3J[_FB(%3J[_IB(&3J[_@F`&*6@`(```
  72288. +M(&P``"EH``0`@"EH``@`?$/H``Q%[`"$)-DDV239(&P``"EH`!@`!"EH`!P`
  72289. +M="\O`"`O*P$8($U#[```<`!.N@``4$]P`6`"<`!,WVSD6$].=2!O``0B;P`(
  72290. +M2.<`%"9)*DA.N@``($TB2W``80#^R$J`9P1P`&`,($TB2TS?*`!.^@``3-\H
  72291. +M`$YU(&\`!")O``A(YP`4)DDJ2$ZZ```@32)+<`%A`/Z02H!F<$AX`/](;```
  72292. +M+PU.N@``3^\`#$J`:@P@32)+3-\H`$[Z``!+TT*=0JL`$G`!-T``#D)K`!`G
  72293. +M?````@``,C=```Q"JP`V0>P``")(2AEF_%.)D\@G20`60IT@/`\,/P`G0``B
  72294. +M)T``&B=``"HJ_```H?]P`$S?*`!.=0```_@````(`````0```7X```%P```!
  72295. +M:@```5H```%2```!3````4(```$H`````````^^&```#7VQA<W1?9&ER````
  72296. +M`````P```0(```"2````BH,```)`7V=E=%]C9`````$```":A@```U]L87-T
  72297. +M7V5N=')Y``````8```%D```!1@```1(```#P````X````*B&```#7U]T96UP
  72298. +M7V9N86UE````!````C8```'V````Q@```+"&```"7T1/4T)A<V4````!```!
  72299. +M"(,```-`7VQF:6)S=&%T```````!```!A(,```-`8VAK86)O<G0````````"
  72300. +M```!X````:B#```#0%]F:6)S=&%T`````````@```A````'&@P```U]R96%D
  72301. +M;&EN:P````````$```'\`````````_$````#`````$]05%,`!`!````#\@``
  72302. +M`^L```!!```#\@```^D```#0(&\`!%E/2.<`%"](``@@;P`(*F@!#&`*)E4@
  72303. +M34ZZ```J2R`-9O),WR@`6$].=2!O``2>_``02.<@-BI()FT`#$/K`0PO2``<
  72304. +M+TD`("!+8;1"K```0JL!#$*M``0@%>6`($`G:``,`1A!ZP`(+T@`&&```)Y!
  72305. +MZP`0(DA*&6;\4XF3R"`)D<C0_``L<@`R`-*(4H%T`#0!/T``%C]!`!0@`DZZ
  72306. +M```D0$J`9@9P#&```)Q-TD*>(&\`(""*+U``("SK`(@LZP"$0>L`C$/J``PB
  72307. +MV"+8(M@E:P`,`!@E:P!\`!Q+Z@`@.V\`%``$.V\`%@`&(&\`'"`H``12J``$
  72308. +M*T``"$'J`"Q#ZP`0$-EF_"JK``@J;P`<(A4D+P`8+&P``$ZN_Y1*@&8`_TXG
  72309. +M:P$,`1!"K0`$+&P``$ZN_WQR=-*!L(%F!'`!8`I.N@``*4```'``3-]L!-[\
  72310. +M`!!.=2!O``193TCG(#8O2``4<!!.N@``*D!P1^6(3KH``"9`(&\`%"`(2AAF
  72311. +M_%.(D<`@"%*`3KH``"1`3KH``"`-9P``@B`*9WP@"V=X*TL`#"M\```!'``(
  72312. +MD<@G2`$0)T@!#"=(`10FBB!O`!04V&;\3KH``"=```0B+P`4+&P``'3^3J[_
  72313. +MK"J`9R)!ZP`((@`D""QL``!.KO^:2H!G#B!-80#^.$J`9Q0@#6`^+&P``$ZN
  72314. +M_WQ.N@``*4```"!-80``-F`D<`PI0```(`UG!B!-3KH``"`*9P8@2DZZ```@
  72315. +M"V<&($M.N@``<`!,WVP$6$].=2!O``1(YP`6*D@F;0`,3KH``$*L```@2V$`
  72316. +M_:`@4TZZ```@%6<*(@`L;```3J[_IB!M``Q.N@``($U,WV@`3OH``"!O``19
  72317. +M3TCG`S0O2``4(&\`%"IH``R7RTZZ``!*K0$49R1^`"1M`0P@;P`4+"@`!&`$
  72318. +M4H<D4KZ&;`0@"F;T*TH!$$*M`10@+0$09R(F0-;\`"`I;P`4``!%[0$0(%(I
  72319. +M2```(%(DT"!O`!12J``$(`M,WRS`6$].=2!O``0O#2I(3KH``"`M``0J7TYU
  72320. +M(&\`!"`O``A(YP$4+@`J2"9M``Q.N@``<`$G0`$4*T<`!$S?*(!.=0```^^#
  72321. +M```"0&9R964````````'```"B@```H````)J```"/@```C0```(J````'H8`
  72322. +M``-?;&%S=%]D:7(````````#```"X@```EX```!2@P```D!M86QL;V,`````
  72323. +M!````8X```%V```!;````**&```"7T1/4T)A<V4````&```"=````@8```'L
  72324. +M```!U@```30```$<@P``!$!C;VYV97)T7V]S97)R```````"```"#@```4B&
  72325. +M```"7V5R<FYO```````#```"(````A(```%,@P```T!C:&MA8F]R=```````
  72326. +M``4```,N```##@```J8```):```!E(,```)`7V=E=%]C9`````$```'*A@``
  72327. +M`U]L87-T7V5N=')Y``````$```+L`````````_$````#`````$]05%,`!`!`
  72328. +M```#\@```^D````(2.<!`BQL``!R`$ZN_X(N`"(`3J[_@B`'3-]`@$YU````
  72329. +M``/OA@```E]$3U-"87-E`````0````8````````#\0````,`````3U!44P`$
  72330. +M`$````/R```#ZP````(```/R```#Z0```!L@;P`$("\`")[\`$1(YP,$+@`J
  72331. +M2'S_3KH``"!-0^\`#DZZ``!*@&8D<!#`KP`6YH!R4.6)PJ\`%NR!@H#"A[*'
  72332. +M9@1\`&`&<`TI0```(`9,WR#`WOP`1$YU(&\`!"`O``A(YP$$3-\@@&">````
  72333. +M``/O@P```T!C:&MA8F]R=`````````$````8@P```T!?9FEB<W1A=```````
  72334. +M``$````BA@```E]E<G)N;P```````0```$H````````#\0````,`````3U!4
  72335. +M4P`$`$````/R```#Z0```$$@+P`$(&\`"%E/2.<G%BX`*DA.N@``2&\`'$AX
  72336. +M"`$O!TZZ``!/[P`,4H!F!G#_8```RD*G+&P``'(")`].KO\<3^\`!"9`2H!G
  72337. +M+"(O`!PD"TZN_GI*0&<>("\`'.6`+PT@0"\H``@B0G``D<A.N@``4$]\`&!@
  72338. +M3J[_?"H`<BY&`;"!9D9\`"`O`!SE@"!`*J@`"$WM``1"GBS\```A_W`!/,`\
  72339. +MP$)>*WP```(``#)"K0`V0JT`%B`\#PP_`"M``"(K0``:*T``*F`,?/\@!4ZZ
  72340. +M```I0```(`MG#"0++&P``'("3J[_%DAO`!Q(>`@"+P=.N@``3^\`#"`&3-]H
  72341. +MY%A/3G4``````^^#```#0&-H:V%B;W)T`````````0```!2#```"7VEO8W1L
  72342. +M```````"````\@```"*&```"7T1/4T)A<V4````"````W@```#:#```#0%]L
  72343. +M9FEB<W1A=````````0```&Z#```$0&-O;G9E<G1?;W-E<G(```````$```#0
  72344. +MA@```E]E<G)N;P```````0```-0````````#\0````,`````3U!44P`$`$``
  72345. +M``/R```#Z0````X@;P`$(F\`"$CG,!8F22I(3KH``"(+)`TL;```=@%.KOY$
  72346. +M2H!G!'``8`9.N@``</],WV@,3G4``````^^#```#0&-H:V%B;W)T````````
  72347. +M`0```!*&```"7T1/4T)A<V4````!````&H,```)`7W-E=&5R<@````$````L
  72348. +M`````````_$````#`````$]05%,`!`!````#\@```^D````^(&\`!")O``A9
  72349. +M3TCG,S8J2'X`(&P``"PH`.`O20`@2H9F($JL``!F&D'L`!@B""QL```D/```
  72350. +M`^U.KO_B+`!G`GX!2H9G-B(&0>P`(B0(0>P``"8(+&P``$ZN_IXB!B0-)B\`
  72351. +M($ZN_IXB!G0*3J[^R$J'9U@B!DZN_]Q@4"!L```F:`"X,'S__[?(9T!#[``H
  72352. +M<"4L>``$3J[]V"1`2H!G+"EL````#"E-`!`O"B!++$I#[``$E<HF;P`D3J[]
  72353. +MM$S?!``B2BQX``1.KOYB3-]LS%A/3G4@;P`$0^\`"&$`_RI.=2!O``1#[P`(
  72354. +M80#_''`43KH``$YU``````/X````!@````$```"R````J````*0```".````
  72355. +M2@```"H````````#[X8```%?7W5S`````@```'X````4A@```U]?5T)E;F-H
  72356. +M37-G``````$````DA@```E]$3U-"87-E`````@```%8````PA@``!%]?4')O
  72357. +M9W)A;4YA;64````````"````H@```%"#```"0&5X:70````````!````\@``
  72358. +M``````/Q`````P````!/4%13``0`0````_(```/J````#T]K```````4````
  72359. +M`````````````````&-O;G-O;&4Z```E<SH@``!I;G1U:71I;VXN;&EB<F%R
  72360. +M>0```````^P````!`````0```!0````````#\@```^D````'2.<@`B(O``Q!
  72361. +M[P`0)`@L;```3J[_'$S?0`1.=0```^^&```"7T1/4T)A<V4````!````$```
  72362. +M``````/Q`````P````!/4%13``0`0````_(```/I````#R!O``0O#2I(*JP`
  72363. +M`$'M``0J7T[Z```@;P`$("\`"$CG`00N`"I((!5.N@``0>T`!"`'3-\@@$[Z
  72364. +M`````````^^&```#7U]S:6=?;6%S:P```````0````J#```"0%]S971J;7``
  72365. +M```!````%(,```-`<VEG<V5T;6%S:P`````!````*H,```-`7VQO;F=J;7``
  72366. +M```````!````.`````````/Q`````P````!/4%13``0`0````_(```/I````
  72367. +M!R!O``0@+P`(+P`O+```+PA.N@``3^\`#'``3G4```/OA@``!%]?<WES=&5M
  72368. +M7VYA;64````````!````#(,```)?<W1R;F-P>0````$````2`````````_$`
  72369. +M```#`````$]05%,`!`!````#\@```^D````I(&\`!)[\`%1(YS@6*D@@#6<D
  72370. +M2A5G("!-2AAF_%.(D<TB""!-<`).N@``0>P``'`"(@!.N@``("P``&\2L*P`
  72371. +M`&X,Y8!![```)G`(`&`L4H!F)"(L``!![P`;)@@L;```=`!X44ZN_BQ*0&<$
  72372. +M)D-@"D?L``1@!$?L``@@2TH89OQ3B)'+(@@@2W`"3KH``$'L`!QP`G(!3KH`
  72373. +M`$S?:!S>_`!43G4```/X````!`````$```"0````>````'(````L````````
  72374. +M`^^#```"0'=R:71E```````$````F````(P````T````*(8```)?97)R;F\`
  72375. +M``````$````XA@```U]S>7-?;F5R<@````````$````^A@```U]S>7-?97)R
  72376. +M;&ES=`````$```!&A@```E]?3U-%4E(``````0```%2&```"7T1/4T)A<V4`
  72377. +M```!````7@````````/Q`````P````!/4%13``0`0````_(```/J````"#H@
  72378. +M```T,@``56YK;F]W;B!E<G)O<B!C;V1E```*```````#\@```^D````````#
  72379. +M\0````,`````3U!44P`$``````/R```#Z@```,9N;R!S:6=N86P`:&%N9W5P
  72380. +M``!I;G1E<G)U<'0`<75I=```:6QL96=A;"!I;G-T<G5C=&EO;@!T<F%C92!T
  72381. +M<F%P``!A8F]R=`!E;70@:6YS=')U8W1I;VX`9FQO871I;F<@<&]I;G0@97AC
  72382. +M97!T:6]N``!K:6QL``!B=7,@97)R;W(`<V5G;65N=&%T:6]N('9I;VQA=&EO
  72383. +M;@``8F%D(&%R9W5M96YT('1O('-Y<W1E;2!C86QL`'=R:71E(&]N(&$@<&EP
  72384. +M92!W:71H(&YO(&]N92!T;R!R96%D(&ET``!A;&%R;2!C;&]C:P!S;V9T=V%R
  72385. +M92!T97)M:6YA=&EO;B!S:6=N86P@9G)O;2!K:6QL`'-T871U<R!S:6=N86P`
  72386. +M<V5N9&%B;&4@<W1O<"!S:6=N86P@;F]T(&9R;VT@='1Y`'-T;W`@<VEG;F%L
  72387. +M(&9R;VT@='1Y``!C;VYT:6YU92!A('-T;W!P960@<')O8V5S<P``8VAI;&0@
  72388. +M<W1A='5S(&AA<R!C:&%N9V5D``!B86-K9W)O=6YD(')E860@871T96UP=&5D
  72389. +M(&9R;VT@8V]N=')O;"!T='D``&)A8VMG<F]U;F0@=W)I=&4@871T96UP=&5D
  72390. +M(&9R;VT@8V]N=')O;"!T='D`:6YP=70@<F5C;W)D(&%V86EL86)L92!A="!C
  72391. +M;VYT<F]L('1T>0!E>&-E961E9"!#4%4@=&EM92!L:6UI=`!E>&-E961E9"!F
  72392. +M:6QE('-I>F4@;&EM:70``'5N:VYO=VX@<VEG;F%L``!U;FMN;W=N('-I9VYA
  72393. +M;```=VEN9&]W(&-H86YG960``'5N:VYO=VX@<VEG;F%L``!U<V5R('-I9VYA
  72394. +M;"`Q`'5S97(@<VEG;F%L(#(```````````H````2````'````"(````V````
  72395. +M0@```$@```!8````<@```'@```""````F@```+8```#>````Z@```1````$>
  72396. +M```!0````58```%R```!C````;@```'D```""@```B(```(\```"3````EP`
  72397. +M``)L```"?````HH```/L````(`````$```,4```#$````PP```,(```#!```
  72398. +M`P````+\```"^````O0```+P```"[````N@```+D```"X````MP```+8```"
  72399. +MU````M````+,```"R````L0```+````"O````K@```*T```"L````JP```*H
  72400. +M```"I````J````*<```"F`````````/R```#Z0```#H@+P`$(&\`""(O``PB
  72401. +M;P`064](YP<4+`$N`"I(+TD`%'H`)FP``&`N2H=G""`K``R^@&8@>@%P`;"K
  72402. +M`!1F%BHK``P@#6<$*JL`&"!+3KH``"`%8"HF4TJ39LX(!@``9P1P`&`:2H5F
  72403. +M"G`**4```'#_8`QP`$ZZ``!.N@``8*),WRC@6$].=2!O``0@+P`((F\`#$CG
  72404. +M`10B`'``3-\H@&``_W`@;P`$+PUP`"(`D\DJ7V``_UX@+P`$(&\`""(O``Q(
  72405. +MYP,$+`$N`"I(4H!F`GX`2H=J`D2'(`<B!B!-D\E,WR#`8`#_+``````#[X8`
  72406. +M``-?7W!R;V-E<W-E<P`````!````)(,```-`7V9R965?96YT<GD````!````
  72407. +M3H8```)?97)R;F\```````$```!L@P``!$!?=V%I=%]S:6=N86QS```````!
  72408. +M````=H,```1`7VAA;F1L95]S:6=N86QS`````0```'H````````#\0````,`
  72409. +M````3U!44P`$`$````/R```#Z0```!(@+P`$44](YP,`+@!.N@``(`=.N@``
  72410. +M2H!G(B)`(&D`'"](``P@:0`$<`$B;P`,3I$L`"`'3KH``"`&8`)P_TS?`,!0
  72411. +M3TYU``````/O@P```T!C:&MA8F]R=`````````$````.@P```T!?9FEN9%]F
  72412. +M9`````````$````4@P```T!?9G)E95]F9`````````$````V`````````_$`
  72413. +M```#`````$]05%,`!``````#\@```^D````#(&\`!"`O``A.^@`````#[X,`
  72414. +M``)`<W1R<F-H<@````$````*`````````_$````#`````$]05%,`!``````#
  72415. +M\@```^D````#(&\`!"`O``A.^@`````#[X,```)`<W1R8VAR``````$````*
  72416. +M`````````_$````#`````$]05%,`!``````#\@```^D```!-2.<`!G`(<@`L
  72417. +M>``$3J[_.BI`2H!F!'``8"Y"K0`$2'@`*'``+P!![```<@&3R<%!3KH``%!/
  72418. +M*H!F#")-<`A.KO\N<`!@`B`-3-]@`$YU(&\`!$CG``8J2"`-9Q@@36$``!X@
  72419. +M54ZZ```B37`(+'@`!$ZN_RY,WV``3G4@;P`$2.<`!BI(2JT`!&<4(E4L>``$
  72420. +M3J[^(")53J[^)D*M``1,WV``3G4@;P`$(%`B:``.<``0*0`/<@'AH2`!3G4@
  72421. +M;P`$("\`""(O``Q(YP,&+`$N`"I(8:I*AV8$2H9G'B)5(T<`("-&`"0S?``)
  72422. +M`!PL>``$3J[^,G`!*T``!$S?8,!.=2!O``1(YP`&*DA*K0`$9QPB52QX``1.
  72423. +MKOXL2D!G#B)53J[^)D*M``1P`6`"<`!,WV``3G4```/X`````0````$````H
  72424. +M`````````^^#```$0%]D979I8V5?;W!E;@````````$````R@P``!$!?9&5V
  72425. +M:6-E7V-L;W-E```````!````9@````````/Q`````P````!/4%13``0`0```
  72426. +M`_(```/J````!'1I;65R+F1E=FEC90````````/R```#Z0```!XO#B`L```B
  72427. +M`$A!0D'2@"`L``"S@"E```1"K``(0^P`!'``+'@`!$ZN_=@I0```</].KOZV
  72428. +M2(!(P"E```!*K```9PA*@&L$<`%@`G``*4``#"Q?3G4O#B`L``!K""QX``1.
  72429. +MKOZP("P``&<*(D`L>``$3J[^8BQ?3G4```/X`````P````$```!8````.@``
  72430. +M`!X````&`````@```&8```!.````/@```"P````:````%@````````/OA@``
  72431. +M!%]?<W1A<G1U<%]T:6UE```````!````!(8```%?7W5S`````0```!``````
  72432. +M```#\0````,`````3U!44P`$`$````/R```#Z@````7_____9FEF;RYL:6)R
  72433. +M87)Y`````````_(```/K````!````_(```/I````%B`O``113TCG`P`N`$ZZ
  72434. +M```@!TZZ``!*@&<H(D`@:0`<<D#EB<*1+T@`#"`!(&D`!")O``Q.D2P`(`=.
  72435. +MN@``(`9@`G#_3-\`P%!/3G4@+P`$+P<N'V"N``````/O@P```T!C:&MA8F]R
  72436. +M=`````````$````.@P```T!?9FEN9%]F9`````````$````4@P```T!?9G)E
  72437. +M95]F9`````````$````\`````````_$````#`````$]05%,`!``````#\@``
  72438. +M`^D```!B(&\`!"`O``@B;P`,+V\`$``$+V\`%``(+V\`&``,+V\`'``0+V\`
  72439. +M(``4+V\`)``844](YP<4+@!([P,``!1\`"IL``!@%DJM``1F"C!\``$K2``$
  72440. +M8`Q2AMK\`"2\K``$;>0@+``$O(!F>'(*TZP`!"`L``0B`.>!TH#E@2`!3KH`
  72441. +M`"I`2H!F#'`,*4```'#_8```CG#VT*P`!"(`YX'2@.6!(&P``")-8`(2V%.!
  72442. +M9/H@+```9P8@0$ZZ```I30``>O;:K``$(`7G@-"%Y8#;P)?+*TL`!%*%VOP`
  72443. +M)+JL``1M\"`&YX#0AN6`(&P``"&O`!0(!"&'"``AKP`8"`A+[P`@(9T(#"&=
  72444. +M"!`AG0@42^\`+"&="!@AG0@<(9T(("`&3-\HX%!/3G4@+P`$(@!K%K*L``1L
  72445. +M$"`!YX#0@>6`(&P``$*P"`1.=2`O``1(YP$$+@!K'KZL``1L&"`'YX#0A^6`
  72446. +M*FP``-O`2JT`!&<$(`U@"'`)*4```'``3-\@@$YU("P`!$YU``````/X````
  72447. +M$0````$```&"```!9````58```%````!,@```.P```#>````Q````+X```"R
  72448. +M````I````)@```!R````;@```&0```!>````0@````````/O@P```D!M86QL
  72449. +M;V,``````0```("&```"7V5R<FYO```````"```!=@```(R#```"0&9R964`
  72450. +M```````!````N@````````/Q`````P````!/4%13``0`0````_(```/K````
  72451. +M`@```_(```/I````&B!O``0B;P`(GOP`#$CG(18F22I(3KH``"`+9P8N*P`$
  72452. +M8`B1R$ZZ```N`'#_OH!F!'``8"@@!T'O`!1.N@``(@U![P`4)`@L;```3J[^
  72453. +M=$J`9P1P`&`&3KH``'#_3-]HA-[\``Q.=0`````#[X,```-`8VAK86)O<G0`
  72454. +M```````!````%H,```)`=&EM90````````$````F@P```T!?9VUT,F%M:6=A
  72455. +M``````$````\A@```E]$3U-"87-E`````0```$B#```"0%]S971E<G(````!
  72456. +M````6`````````/Q`````P````!/4%13``0`0````_(```/I````!R!O``0B
  72457. +M;P`(("\`#"\+)DDB2"!+)E].^@````````/O@P```D!M96UM;W9E`````0``
  72458. +M`!@````````#\0````,`````3U!44P`$``````/R```#Z0```%(@;P`$(F\`
  72459. +M"%%/2.<!%"9)*DA.N@``0>\`#$ZZ```@#6<(0>\`#"K8*M@@"V<``-)![P`,
  72460. +M3KH``"!`("@`)$2`<CQ.N@``)H!^`"!L``1#[```$!BP&68,2@!F]F8&?@1@
  72461. +M``":(&P`!$/L``@0&+`99@Q*`&;V9@9^`V```(`@;``$0^P`$!`8L!EF"DH`
  72462. +M9O9F!'X%8&8@;``$0^P`&!`8L!EF!DH`9O9G4"!L``1#[``<$!BP&68&2@!F
  72463. +M]F<\(&P`!$/L`"`0&+`99@9*`&;V9R@@;``$0^P`)!`8L!EF!DH`9O9G%"!L
  72464. +M``1#[``H$!BP&68(2@!F]F8"?@$G1P`$<`!,WRB`4$].=2!O``2>_``0+PTJ
  72465. +M2$'O``Q#[P`$80#^Z"JO``P@+P`00^T`!#+`("\`!#+`("P``#+`<``J7][\
  72466. +M`!!.=0`````#^`````@````!````[````-@```#$````L````)P```"$````
  72467. +M:@```%`````````#[X,```-`8VAK86)O<G0````````!````%(,```-`7V=E
  72468. +M='1I;64````````!````'(,```-`;&]C86QT:6UE```````!````-H,```)?
  72469. +M7T-81#,S``````$```!$A@```E]T>FYA;64`````"````.@```#4````P```
  72470. +M`*P```"8````@````&8```!,A@```U]D87EL:6=H=`````````$```$X````
  72471. +M`````_$````#`````$]05%,`!`!````#\@```^H````,3454($135`!7150@
  72472. +M1%-4`$5%5"!$4U0`1414`$-$5`!-1%0`4$14`$%+1%0````````#\@```^D`
  72473. +M```P(&\`!$CG``8J2"QL``!.KO^^!I4/##\`<`!,WV``3G4@+P`$(&\`"%E/
  72474. +M!(`/##\`(CP``5&`+H!.N@``((`@%R(\``%1@$ZZ```@`2Z!<CQ.N@``(4``
  72475. +M!"`7<CQ.N@``(`'E@)"!YX#0@="`(4``"%A/3G4@;P`$64](YR`$2]`@'2(`
  72476. +MZ8&2@"`!YX#0@2(`Y8'2@.^!(!TD`.F"E(#E@B`=+T$`"'(R3KH``-""T*\`
  72477. +M"`:`#PP_`$S?(`183TYU```#[X8```-?5&EM97)"87-E```````!````#(,`
  72478. +M``)?7T-81#,S``````4```"J````7@```%(```!(````.@````````/Q````
  72479. +M`P````!/4%13``0`0````_(```/I````"R`O``193RZ`0>P`!"`(6$].=2!O
  72480. +M``193RZ(0>P`!"`(6$].=2`L``1.=0`````#^`````,````!````)@```!P`
  72481. +M```*`````````_$````#`````$]05%,`!`!````#\@```^H````)````````
  72482. +M``````````$````````````"```````````````````#[`````(````!````
  72483. +M%`````@````````#\@```^D````J(&\`!")O``@@+P`,64](YS\V+@`J2"])
  72484. +M`"B7RTZZ```B#20++&P``$ZN_7XF0"("3J[]>"`+9@9.N@``8%XD;P`H0A(J
  72485. +M!U*%(A,D*P`$)@TH"BQL``!.KOY*2H!G&"(+3J[]>$H29@1P`F`L+P1.N@``
  72486. +M6$]@*$ZN_WPL`'(R1@&P@68(""L``0`+9I0B"TZN_7@@!DZZ```I0```</],
  72487. +MWVS\6$].=0`````#[X,```-`8VAK86)O<G0````````!````'H8```)?1$]3
  72488. +M0F%S90````(```!4````)H,```)`7W-E=&5R<@````$````Z@P```E]S=')L
  72489. +M96X``````0```'"#```$0&-O;G9E<G1?;W-E<G(```````$```"6A@```E]E
  72490. +M<G)N;P```````0```)H````````#\0````,`````3U!44P`$`$````/R```#
  72491. +MZ0```"Q93TJL`!)F#$'O``,I2``28>Y@%D'O``,B;``2L\AD!'`!8`)P_RE`
  72492. +M``!83TYU64](YP$4+B\`%$JL``!F`F'`*FP`%F`N("P``&\,0>\`#R)M``2S
  72493. +MR&(02H!J'$'O``\B;0`$L\AD$"95+PU.N@``6$\J2R`-9LXI30`62H=F!'``
  72494. +M8")0AR\'3KH``"!`(*P`%D/O`!,A20`$0^@`"%A/*4``%B`)3-\H@%A/3G4`
  72495. +M`````_@````'`````0```*(```"0````>@```$(````:````#@````0````#
  72496. +M`````@```$@````Z````*`````````/O@P```E]F<F5E`````````0```&Z#
  72497. +M```"7VUA;&QO8P`````!````B@````````/Q`````P````!/4%13``0`0```
  72498. +M`_(```/J````!T`H(REA;&QO8V$N8PDQ+C$```````````````````/R```#
  72499. +MZP````$```/R```#Z0```#8@;P`$64](YR,"(@@L;```=/Y.KO^L+T``$&<Z
  72500. +M+BP``$ZZ```L`&`>2&\`$$AX"`4O!DZZ``!/[P`,2H!F""E'``!P`&`24X9L
  72501. +MWB(O`!`L;```3J[_IG#_3-]`Q%A/3G4@;P`$2.<A!BI(3KH``"(-+&P``$ZN
  72502. +M_[A*@&<$<`!@4$ZN_WPN`')OTH&P@68@(@UT`$ZN_T9*@&<.(@U.KO^X2H!G
  72503. +M!"`"8"A.KO]\+@!P9="`OH!F#B!-80#_2DJ`9@1P`&`,(`=.N@``*4```'#_
  72504. +M3-]@A$YU``````/OA@```E]$3U-"87-E`````P```'(```!0````#H8```)?
  72505. +M97)R;F\```````,```#,````0````!Z#```#0%]L87-T7V9D`````````0``
  72506. +M`"*#```"7VEO8W1L```````!````-(,```-`8VAK86)O<G0````````!````
  72507. +M;(,```1`8V]N=F5R=%]O<V5R<@```````0```,@````````#\0````,`````
  72508. +M3U!44P`$`$````/R```#Z0```AI(YP`&<"(B/``!``$L>``$3J[_.BI`2H!F
  72509. +M!'``8"`;?``$``A-[0`.0AX@+```',`L[```0>T`%$ZZ```@#4S?8`!.=2!O
  72510. +M``0O#B)(<"(L>``$3J[_+BQ?3G4@;P`$2.<`!BI(("T`(&<*+&P``'(`3J[_
  72511. +MW"`M`"1G#"QL``!R0.&)3J[_W"`M`#1G!B!`3KH``"`M`#AG!B!`3KH``"!M
  72512. +M`#QAI"!-3-]@`$[Z``!(YP(&+`$J2$J`9Q0@+0`@(BT`-"QL```P?``!3J[_
  72513. +MRDJ&9Q0@+0`D(BT`."QL```P?``"3J[_RG`!(BP``..@3-]@0$YU2.<#-B9)
  72514. +M*D@N$R!O`!PL$&`4(&T`-+'*9@1^`&`(M>T`.&8"?``@;0`\+'@`!$ZN_HPD
  72515. +M0$J`9MI*AV<60I,@+0`@(BT`-"QL```P?``#3J[_RDJ&9U(@;P`<0I`@+0`D
  72516. +M(BT`."QL```P?``#3J[_RF`V<`$B+```XZ`L>``$3J[^PB!M`#PL>``$3J[^
  72517. +MC"1`2H!GWB!M`#2QRF8$?@!@"+7M`#AF`GP`2H=FUDJ&9M)P`2(L``#CH"(`
  72518. +M<``L>``$3J[^SDS?;,!.=5E/2.<#%BX`)DDJ2&```(9"K0`L""T``@`S9PQP
  72519. +M(RE```!P_V```*PL;```<@%.KO\Z("T`("(M`#0L;```,'P``4ZN_\H@;0`\
  72520. +M<``0*``/<@'AH2`!3KH``"P`("T`("(M`#0P?``#3J[_RF`0<`$B+```XZ`L
  72521. +M>``$3J[^PB!M`#PL>``$3J[^C$J`9^`@!DZZ```@+0`@0>\`%"(((&T`+"QL
  72522. +M``!.KO_6+`!G`/]B(`92@&8"?`"\AV,"+`<@!B!O`!1@`A;84X!D^B`&*T``
  72523. +M+$S?:,!83TYUGOP`2$CG#Q8N`"I()DDO20`<2H=F``"*("T`)"QL``!R0.&)
  72524. +M3J[_W"!-0^\`(!+89OQ![P`@0^P``$ZZ```@34/O`$(2V&;\0>\`0D/L``1.
  72525. +MN@``""T````S9P@(+0`/`#)G!D'O`"!@!$'O`$(@"')`Z8D@?```C@!.KO_B
  72526. +M*T``)&<``.PL;```3J[_Q$J`:@)2@.*`*T``*'``8```X$JM`"1G``#*+"T`
  72527. +M*'H`8```M+R'8P``CBP'8```B`@M``(`,V<02H5G!B`%8```L'`C8```I"`M
  72528. +M`"0B+0`X+&P``#!\``).KO_*(&T`/'``$"@`#W(!X:$@`4ZZ```H`"`M`"0B
  72529. +M+0`X,'P``TZN_\I@$'`!(BP``..@+'@`!$ZN_L(@;0`\+'@`!$ZN_HQ*@&?@
  72530. +M(`1.N@``2H!G"$J%9P0@!6`Z("T`)"(+($8L;```3J[_T"@`9P#_9DJ$:Q+:
  72531. +MA)Z$U\1P`+Z`8@#_2"`%8`YP#4ZZ``!P("E```!P_TS?:/#>_`!(3G6>_``,
  72532. +M2-<!`W`=*4```'#_WOP`#$YU64\N@&$`_")P`%A/3G6>_``L2.<@%B9)*DA*
  72533. +M@&<2!(````@!9R)3@&<``)Q@``"J2I-G"`CM``(`,V`&"*T``@`S<`!@``":
  72534. +M<`/`K0`P5X!F*`@M``\`,F<&0>P`&&`$0>P`&B\(+PU(;``(2&\`'$ZZ``!/
  72535. +M[P`08"H(+0```#-G$"\-2&P`'$AO`!A.N@``8`XO#4AL`"9(;P`83KH``$_O
  72536. +M``Q![P`0(@@L;```)#P```/M3J[_XB:`9P1P`&`@3KH``&`8(!-G"B(`+&P`
  72537. +M`$ZN_]QP`&`(<!8I0```</],WV@$WOP`+$YU(&\`!"`O``@B+P`,+V\`$``$
  72538. +MGOP`3$CG#S8J+P!P+`$N`$*O`&B;S9?++T@`('!`3KH``"1`2H!G``&@80#Z
  72539. +MHB]``&AG``&4<!1.N@``*D!*@&<``89P%$ZZ```F0$J`9P`!>'`%&T``""!O
  72540. +M`&@K2``.<A0[00`2%T``""=(``XW00`2)4@`/"5-`#0E2P`XD<@E2``D)4@`
  72541. +M("5(`#!*AV<&".H````S2H9G!@CJ``$`,TAZ_G!(>OY>2'K^1$AZ_+A(>OO:
  72542. +M2'K[#"`J`#`@2D/Z^KQ.N@``3^\`&"@`9P``\$J%9P8(Z@`/`#(@;P`@(DH2
  72543. +MV&;\($I#[P`D$MAF_$'O`"1#[``T3KH``"!*0^\`1A+89OQ![P!&0^P`.$ZZ
  72544. +M``!*AV<H2H9G!$J%9@9![P`D8`1![P!&(`@L;```<D#IB3!\#0!.KO_B)4``
  72545. +M($J&9RI*AV<$2H5G!D'O`"1@!$'O`$8@""QL``!R0.F)('P``(X`3J[_XB5`
  72546. +M`"1*J@`@9@1*AV8J("H`)&8$2H9F($J`9Q0L;```3J[_Q$J`:@)2@.*`)4``
  72547. +M*$*J`"P@!&!8("H`(&<*+&P``'(`3J[_W"`J`"1G"BQL``!R`$ZN_]Q*A&L&
  72548. +M(`1.N@``(`UG!B!-3KH``"`+9P8@2TZZ```J;P!H(`UG!B!-80#Y+B`*9P8@
  72549. +M2DZZ``!P_TS?;/#>_`!,3G4@;P`$GOP`("\-*DA.N@``2JP``&8(<`8I0```
  72550. +M8&@@+```4JP``"(L``#2@"\!2&P`/$AO``Q.N@``<``N@$'O`!!R`<%!80#]
  72551. +MN$_O``PJ@<<``O`$'O``AR`6$`_:)83RM```1K!'``8!P@%4ZZ``!*@&<*
  72552. +M($`@:``$80#XKB`53KH``'#_*E_>_``@3G4@+P`$(B\`""]O``P`!"!O`!">
  72553. +M_``H+PTJ2$CO``,`!$ZZ``!*K```9@AP!BE```!@:"`L``!2K```(BP``-*`
  72554. +M+P%(;`!(2&\`%$ZZ``!P`2Z`(@!![P`8P4%A`/T43^\`#"J`:S1"IT'O`!!P
  72555. +M`2(`80#\_EA/*T``!&L$<`!@'"`53KH``$J`9PH@0"!H``1A`/@*(!5.N@``
  72556. +M</\J7][\`"A.=0`````#^`````L````!```(!@``!V(```8\```&)@``!,P`
  72557. +M``2\```$H```!)@```22```"Y@```M`````````#[X8```-?7V9I9F]?<VEG
  72558. +M```````&```#K@```C````&H```!:@```.H````LA@```5]?=7,````!````
  72559. +M,H,```)`3F5W3&ES=`````$````ZA@```U]?1FEF;T)A<V4``````!$```;H
  72560. +M```&V```!K8```:(```&7````^8```-X```#(````K8```)B```!^@```5H`
  72561. +M``$\````W````,0```!\````;(,```)`9G)E90````````8```<D```'#```
  72562. +M!P(```"L````G````)"&```"7V5R<FYO```````&```'\```!TP```42```$
  72563. +M+```!!(```'>A@```E]$3U-"87-E`````P``!00```3B```!Z(,```1`7W=A
  72564. +M:71?<VEG;F%L<P```````@```Y0```(6@P``!$!?:&%N9&QE7W-I9VYA;',`
  72565. +M```"```#S@```E"#```"0'-T<F-A=``````$```&0```!BH```+J```"U(,`
  72566. +M``1`7W-I9U]D:7-P871C:````````0``!`R#```#7U]S<')I;G1F````````
  72567. +M!0``"`X```=J```$U```!,0```2H@P```D!?<V5T97)R`````0``!/B#```"
  72568. +M0&UA;&QO8P`````#```%>@``!6P```52@P```T!?86QL;V-?9F0```````$`
  72569. +M``7V@P```T!?9G)E95]F9`````````,```A:```'M@``!OB#```#0&-H:V%B
  72570. +M;W)T`````````@``!^0```=`A@```U]?9FEF;U]O:P````````(```?H```'
  72571. +M1(8```1?7V9I9F]?;V9F<V5T````````!```!_H```?V```'5@``!U*&```#
  72572. +M7U]F:69O7V)A<V4``````@``!_X```=:@P```T!?9FEN9%]F9`````````(`
  72573. +M``A&```'H@````````/Q`````P````!/4%13``0`0````_(```/J````%5]M
  72574. +M``!?<P``9FEF;SHE<R]R=V5S2R5S`&T```!F:69O.B5S+W(`9FEF;SHE<R]M
  72575. +M=V5+``!?;0``7W,``'5X9FEF;RXE;'@``'5X9FEF;RXE;'@``````_(```/I
  72576. +M````"2`O``193RZ`0>P`%B`(6$].=2!O``193RZ(0>P`%B`(6$].=0```_@`
  72577. +M```"`````0```!P````*`````````_$````#`````$]05%,`!`!````#\@``
  72578. +M`^H````)=7-E<@````````````!W:&5E;`````````X````4```````&```#
  72579. +M[`````0````!````(````!H````6````!@````````/R```#Z0```*D@+P`$
  72580. +M64\N@"`L`0QG#B!`3KH``$J`9P1R`6`"<@`@`5A/3G4@+P`$(&P!#'(`3OH`
  72581. +M`$ZZ```I0`$,9@I(;```3KH``%A/(&P!#$ZZ``"!K```3G4@;`$,3OH```CL
  72582. +M``P``DYU("\`!`@```Q6P$0`2(!(P$YU".P`#0`"3G4@+P`$"```#5;`1`!(
  72583. +M@$C`3G5.N@``<``@;```$"@`#W(!X:&#K```3G5.^@``("\`!%E/2.<!%B]`
  72584. +M`!!^`&`N("T`%$ZZ```F0$J`9Q1*JP`49@Y^`7`!)T``%"=M`!@`&")-<!PL
  72585. +M>``$3J[_+B!L```L>``$3J[^C"I`2H!FP"`'3-]H@%A/3G4@+P`$2.</!"X`
  72586. +M<`'OH"P`<`F^@&8&<`!.N@``("P!!,"&9P:-K`$(8'HJ!D:%RZP!"$J':V9P
  72587. +M(+Z`;&`@!^>`0>P`!"IP"``P?``!N\AF+"`'58!G%%.`9Q!R#9"!9SQ9@&<X
  72588. +M48!G-&`*2&P`&$ZZ``!83W``3KH``&`@(`UG'"`'YX`H!D'L``2(L`@$B:P!
  72589. +M!"`'3I5&A,FL`00@+`$(P(9FBDS?(/!.=2`O``0O#B(L``""@'``+'@`!$ZN
  72590. +M_LXL7TYU("\`!"\.(@`@+```@($L>``$3J[^PBQ?3G4@+P`$2.<#`"X`?`!A
  72591. +M`/X02H!G"'P!<`YA`/\,(`=A`/YB2H!G"'P!<`)A`/[Z(`=A`/YJ2H!G"'P!
  72592. +M<`-A`/[H(`=A`/Z&2H!G"'P!<!1A`/[6(`9,WP#`3G4@+P`$+P<I0```<`@N
  72593. +M'V``_KQP`&$`_V!@D&#V2.<!%'X`2^P`!#9\``$JBT*M``12AU"-<""^@&WP
  72594. +M0JP!"$*L`01"K```80#]U&$`_>IA`/VB3-\H@&``_?AA`/VX8`#^"``````#
  72595. +M^`````(````!```!=````#X````7`````@```H0```*````"?````F0```'6
  72596. +M```!N@```:8```&B```!F````9````%*```!.````2X```$F````I````'H`
  72597. +M``!@````5@```%````!(````.````"H````*`````````^^#```$0%]T:6UE
  72598. +M<E]E>'!I<F5D``````$````2@P``!$!?=&EM97)?<W1A<G0````````!````
  72599. +M,(,```1`7V%L;&]C7W1I;65R`````````0```#2#```"7U]F86EL```````!
  72600. +M````0H,```-`7W1I;65R7W-I9P`````!````3(,```-`7V9R965?=&EM97(`
  72601. +M```!````6H,```1`7VEN:71?<')O8V5S<V5S`````0```)*&```$7U]C:&EL
  72602. +M9')E;E]E>&ET``````(```#N````F(,```5`7V-L96%N=7!?<')O8V5S<V5S
  72603. +M``````$```"J@P```T!?9FEN9%]P:60```````$```#$@P```D!?7V5X:70`
  72604. +M`````@```8````$B@P```U]?;65S<V%G90````````$```%XA@```E]?1E!%
  72605. +M4E(``````0```D@````````#\0````,`````3U!44P`$`$````/R```#Z@``
  72606. +M``I&86EL960@=&\@8W)E871E('1I;65R``!U<V5R(&EN=&5R<G5P=``````#
  72607. +M\@```^L```!$```#\@```^D```(=2&P`!$ZZ``!83TYU("\`!"\-3KH``"I`
  72608. +M2H!F`F'B(`TJ7TYU(&\`!"`O``@O"TZZ```F0$J`9@)AQB`+)E].=2!O``0O
  72609. +M#2I((`UF!$OL``X@34H89OQ3B)'-(`A2@$ZZ```@0$J`9@1P`&`((D@2W6;\
  72610. +M(`@J7TYU64](YP,T?@!\`"!L```F:`#08"Q**P`(9B0P/`4`P&L`#F8:4H<@
  72611. +M:P`*(`A*&&;\4XB1P"`(W(#<JP`45(8F4TJ39M`@!U*`Y8#0AF$`_THI0``8
  72612. +MY8<@0")`T\=%Z0`$+T``%&8*0>P``"E(`!A@5B!L```J:`#08$)*+0`(9CHP
  72613. +M/`4`P&T`#F8P)FT`"BXM`!0@;P`4(,HO2``48`(4VTH39OH4_``])FT`$&`"
  72614. +M%-L@!U.'2H!F]D(:*E5*E6:Z(&\`%$*03-\LP%A/3G4@;P`$("\`""\-*D@J
  72615. +M@$*M``3E@&$`_K0K0``(*E].=2!O``0B;P`(("\`#$CG(C0F22I(2H!G"B!+
  72616. +M80#^PB1`8`(D2R`*9SXB%20M``2T@6TB+`'<AG00TH*\@6T"(@8J@2`!Y8`@
  72617. +M;0`(3KH``"M```AG$D?M``0B$U*;Y8$@6R&*&`!P`4S?+$1.=2!O``0B;P`(
  72618. +M("\`#&&22H!F!&$`_AI.=2!O``0B;P`(2.<`%"9)*D@@+0`$T*L`!+"5;Q+0
  72619. +M@"J`Y8`@;0`(80#^&BM```@B+0`$Y8$@;0`(T<$@*P`$(@#E@2)K``A@`A#9
  72620. +M4X%D^M&M``0@:P`(3-\H`$[Z```@;P`$(F\`""]O``P`!"`O`!`B+P`464](
  72621. +MYP(T+`$J221(+T@`$$J`9T13@&<*4X!G``"V8```]%.&9R(@+P`8(@V0@2!O
  72622. +M`!!",`@`($$B;P`08`(2V%.`9/I@``#.0>P`$")O`!`2V&;\8```OB9O`!A@
  72623. +M;G!<L!5F9DHM``%G8%2-<`&\@&8&%/P`86!4(`95@&9&$"W__TB`2,!R(Y"!
  72624. +M9RY5@&<J58!G)E.`9R)3@&<>4X!G&G(5D(%G%'(<D(%G#E6`9PIR'Y"!9P15
  72625. +M@&8$%/P`)Q3M__]@"!3M__]@`A3=N\MECF!`)F\`&&`V<"JP%68N2BT``6<H
  72626. +M5(T0+?__2(!(P')ED(%G#'()D(%F#!3\``I@#A3\`!M@"!3M__]@`A3=N\ME
  72627. +MQD(23-\L0%A/3G6>_`$L2.<_-BIO`5@@;```#&@`)0`49`I(>``43KH``%A/
  72628. +M0JP`''`!*4``&"E``#YP`BE``#HI0`!@*7P```"$`%R3R2QX``1.KO[:*4``
  72629. +M`$ZZ```I0``$9@I(;``23KH``%A/(&P`!$ZZ```I0``(+&P`!"!6+&@`%"E.
  72630. +M`!1![P$P3J[_OBEO`3``#$ZZ``!.N@``(&P``"`H`*QG$.6`(D`B*0`TY8$I
  72631. +M00`08`8I:`"$`!!*%68``.A![``J(@@L;```)#P```/N3J[_XBP`0>P`,"((
  72632. +M3J[_XBX`0>P`-B((3J[_XBH`2H9G"$J'9P1*A68B2H9G!B(&3J[_W$J'9P8B
  72633. +M!TZN_]Q*A6<&(@5.KO_<80#[<G`!+P`O!2\`+P<B!L%!3KH``"!L```@*``<
  72634. +M0>\!6&$`_)Y/[P`0?`!^`&!0(FP``"!I`"0@,'@`9SXB`$/O`#`D"2QL``!V
  72635. +M0.6+3J[^;DJ`9R8B;```(&D`)-''("@`!&<((@(D`$ZN_(Y![P%(0^\`,'`!
  72636. +M80#\V%*&4(<@;```O*@`'&VF8``"S"QL``!.KO_**`!.KO_$*@!^`"!L```L
  72637. +M*`#@9BA^`4'L`#PB""0\```#[4ZN_^(L`&820>P`/B((3J[_XBP`9@1A`/JD
  72638. +M+P<O!G``+P`O!2($P4%.N@``0>\!6'`!80#[UB`\```%&F$`^HX@0#%\!```
  72639. +M$B]``#QP0.6(80#Z>D_O`!!^0.6/+T`!.&`"4HT0%4B`2,!![``!"#```P@`
  72640. +M9NP0%6<``A9R(K`!9C!2C29-8!!P*K`59@A*+0`!9P)2C5*-$!5G!G(BL`%F
  72641. +MYB1-$!5R(K`!9@)2C7P"8%1P)[`59B!2C29-8`)2C1`59P9R)[`!9O0D37`G
  72642. +ML!5F`E*-?`%@+B9-8!!P7+`59@A*+0`!9P)2C5*-$!5G$G(@L`%G#'(*L`%G
  72643. +M!G()L`%FVB1-?``@2RH*FHL@!5*`+T@`*&$`^;8F0$JO`4QF("`%($LB;P`H
  72644. +M3KH``$(S6`!![P%((DMP`&$`^V!@`/\FVH5R$-J!NH=O%"!O`3A.N@``(`5A
  72645. +M`/EV+@4O0`$X+PH@!B!+(F\`+'(!80#[KEA/(@LD+P$X)@<L;```3J[\N"H`
  72646. +M;!!"$B\O`"A(;`!$3KH``%!/2H5F(B\*(`8@2R)O`"QR`&$`^W1![P%,(DMP
  72647. +M`&$`^NA83V``_JQZ`2!O`"Q"J``(0B@`$4(H`!`O"B`&($LB;P`L<@)A`/M`
  72648. +M0>\!0'`080#Z)EA/(@LD+P`L+&P``$ZN_,HH`&8\8"IZ`")O`"S2_`$80>\!
  72649. +M/'`!80#Z($J`9@1X9V`2(B\`+"QL``!.KOS$*`!*A&?2(B\`+"QL``!.KOR^
  72650. +M<'30@+B`9PI(;`!83KH``%A/2H5G(B\*(`8@2R)O`"QR`&$`^L!![P%,(DMP
  72651. +M`&$`^C183V``_?@@+P%`(&\!1$ZZ``!![P%(0^\!/&$`^BH@2TZZ``!@`/W6
  72652. +M(&\!.$ZZ```@;P`L3KH``&$`^))![`!R3KH``"E```!F"$'L`'@I2```0>P`
  72653. +M?DZZ```I0``49@8I;````!1![`"(3KH``"E``!AF"$'L`(XI2``80>P`DDZZ
  72654. +M```I0``<9@A![`"8*4@`'$'L`*!.N@``*4``'&8(0>P`JBE(`!P@+P%,(&\!
  72655. +M4")L`!A.N@``<`!.N@``3-]L_-[\`2Q.=0```_@````5`````0``"$X```A`
  72656. +M```(.```""H```@B```(%```"`````?X```'Z@``!X0```;0```%3@``!3H`
  72657. +M``18```$3```!#8```/6```"J````.````!.`````@```!(````"```(7@``
  72658. +M"%(```A(```%+@``!"P```0D```$$```!`0```/V```#[````^@```/@```#
  72659. +MT````\@```#J````Y````,H```"$`````````^^#```"7U]F86EL```````$
  72660. +M```'B```!M0```/:````!H,```)`;6%L;&]C``````(```!@````%(,```)`
  72661. +M<F5A;&QO8P````(```&R````,(,```)`9G)E90````````4```?B```'V@``
  72662. +M!\X```:4```"1H8```)?4WES0F%S90````$```.(@P```E]?6$-%6$E4````
  72663. +M`0```YB&```"7U]?:6]B```````&```#N@```[(```.N```#J````Z0```.>
  72664. +M@P``!$!?86QL;V-?=&EM97(````````!```#S(,```-`7W1I;65R7W-I9P``
  72665. +M```!```#Y(,```-`7VEN:71?9FEF;P`````!```$"(,```1`7VEN:71?<VEG
  72666. +M;F%L<P```````0``!`R&```"7T1/4T)A<V4````'```'=```!V(```<T```&
  72667. +MO@``!1P```34```$/(,```1`7VEN:71?=6YI>&EO`````````@``!6X```2@
  72668. +MA@```U]?5T)E;F-H37-G``````0```4.```$Y```!+X```2DA@```E]?7V-T
  72669. +M>7!E`````0``!;"#```"0'-T<FYC<'D````!```&;H,```)`='%S;W)T````
  72670. +M``$```>\@P```T!?7V=E=&5N=@````````4```A$```(+@``"!@```@$```'
  72671. +M[H8```-?7V%M:6=A7W5S97(````)```(/```"#(```@F```('```"!````@.
  72672. +M```("```!_P```?R@P```D!M86EN`````````0``"&*#```"0&5X:70`````
  72673. +M```!```(:`````````/Q`````P````!/4%13``0`0````_(```/J````+```
  72674. +M``!.;R!M96UO<GD```!A`$9A:6QE9"!T;R!C<F5A=&4@=&EM97(``$Y)3#H`
  72675. +M`$Y)3#H``$Y)3#H``"H`3DE,.@``26YV86QI9"!W:6QD8V%R9"`E<P!%<G)O
  72676. +M<B!E>'!A;F1I;F<@87)G=6UE;G1S`%5315(``'5S97(``%5315).04U%``!(
  72677. +M3TU%``!S.@``4TA%3$P`8FEN.G-H``!(3U-43D%-10``86UI9V$````#\@``
  72678. +M`^L````(```#\@```^D````$("\`!%E/+H!P`%A/3G4``````_$````#````
  72679. +M`$]05%,`!``````#\@```^D````^("\`!$CG`P`N`$JL``!G!"`'8&!\`"`'
  72680. +M`H````$D9P)\"`@'``=G!`!&``4(!P`$9P0(Q@`""`<``6<$",8```@'``-G
  72681. +M!`C&``$(!P``9P0(Q@`&(`=R2<"!<D"P@68$`$8`0@@'``EG!`C&``4@!@I`
  72682. +M``],WP#`3G4@+P`$2.<&`"P`2JP``&<((`8"0`__8%YZ``I&``\(!@`#9P1Z
  72683. +M2>6-(`9R!<"!6X!F!`C%``<(!@`"9P0(Q0`$"`8``&<$",4``2`&<D+`@6<$
  72684. +M",4`!@@&``%G!`C%``,(!@`&9P0(Q0``"`8`!6<$",4`"2`%3-\`8$YU````
  72685. +M``/X`````@````$```"&````#`````````/Q`````P````!/4%13``0`0```
  72686. +M`_(```/K`````0```_(```/I`````G``3G5P`$YU```#\0````,`````3U!4
  72687. +M4P`$``````/R```#Z0```!5(YP,`3KH``"X`?`!@"B\&3KH``%A/4H:\AVWR
  72688. +M3-\`P$YU("\`!"\'+@!AU$ZZ``!.N@``(&P``$ZZ```O!TZZ``!83RX?3G4@
  72689. +M+P`$+P<N'V#4``````/O@P```T!?;&%S=%]F9`````````$````&@P```E]C
  72690. +M;&]S90```````0```!*#```$0%]C;&5A;G5P7V9I9F\```````$````N@P``
  72691. +M!4!?8VQE86YU<%]S:6=N86QS`````````0```#*&```#7U]O9&1?=&EM97(`
  72692. +M`````0```#:#```#0%]F<F5E7W1I;65R`````0```#J#```"7U]80T58250`
  72693. +M```!````0`````````/Q`````P````!/4%13``0`0````_(```/I````$R`O
  72694. +M``0B+P`((&\`#%%/2.<#)"P!+@`J2$ZZ```@!TZZ``!*@&<:(D`@:0`@+T@`
  72695. +M%"`&(&D`!")-)&\`%$Z28`)P_TS?),!03TYU``````/O@P```T!C:&MA8F]R
  72696. +M=`````````$````:@P```T!?9FEN9%]F9`````````$````@`````````_$`
  72697. +M```#`````$]05%,`!``````#\@```^D```"8GOP`#$CG+S8J;P`T?@/.KP`X
  72698. +M?`$@;```)F@`N"H\```#[$ZZ``!*AV<*<`*^@&<$<@!@`G(!+T$`*'`!OH!G
  72699. +M"%6'9P1P`&`"<`$O0``L($U#[```3KH``$J`9@9X_V```51P_R!L```A0`"X
  72700. +M(@TL;```=/Y.KO^L+@`@;```(4L`N$J`9G@L;```3J[_?$ZZ```L`"`L``!R
  72701. +M+D8!L(%G!$J`9@I^`2H\```#[F`6(`95@&8,""\`"``Z9P1P`6`"<``N`$J'
  72702. +M9RQ\``@O``@`.F<<""\`#P`Z9P9X`F```-8@+P`\3KH``"@`8```R'C_8```
  72703. +MPBE&``!P_V```4)"IRQL``!R`B0/3J[_'$_O``0D0$J`9PPB!R0*3J[_FDJ`
  72704. +M9A8@"F<()`IR`DZN_Q9.N@``</]@``$(*"H`="0*<@).KO\6(@=.KO^F<%#I
  72705. +MB,"O`#@,@```!0!F#'`1*4```'#_8```VDJO`"AG!@@$``-F#$JO`"QG$@@$
  72706. +M``)G#'`-*4```'#_8```M@@O``D`.F<B(@TD/````^Y.KO_B2H!G""(`3J[_
  72707. +MW&`*3KH``'#_8```C`@O``@`.F<$(`5@!B`\```#[20`(@TL;```3J[_XBH`
  72708. +M9@A.N@``</]@8`@O``D`.F8$2H9F!"P$8`)\_WX`2J\`*&<"?@%*KP`L9P0(
  72709. +MQP`!""\``P`[9P0(QP`#+P<@!2(&3KH``%A/+@!L''#_(&P``"%``+@B!2QL
  72710. +M``!.KO_<(&P``"%+`+@@!TS?;/3>_``,3G4@;P`$+R\`#"\O``PO"&$`_:A/
  72711. +M[P`,3G4```/X`````0````$```!2`````````^^&```!7U]U<P````4```(V
  72712. +M```")````'P```!F````%H,```-`8VAK86)O<G0````````!````)(,```)`
  72713. +M<W1R:6-M<`````$```!6A@```E]$3U-"87-E````!0```BX```',```!`@``
  72714. +M`(@```!P@P``!$!C;VYV97)T7V]S97)R```````!````D(8```)?7T]315)2
  72715. +M``````$```"6@P``!4!?;6%K95]P<F]T96-T:6]N`````````0```.:&```"
  72716. +M7V5R<FYO```````#```!@@```5X```#V@P```D!?<V5T97)R`````P```=@`
  72717. +M``&L```!,(,```1`7V%L;&]C7V%M:6=A9F0``````0```A@````````#\0``
  72718. +M``,`````3U!44P`$`$````/R```#Z@````).24PZ`````````_(```/I```%
  72719. +M:"!O``1(YS@`</_`*``#<@`2`'#_P"@``G0`%`!P_\`H``%V`!8`</_`$'@`
  72720. +M&`#AA(B#X82(@N&$B($@!$S?`!Q.=4CG(S1+[`!R0>P`'$7L``PDR$'L`"`D
  72721. +MR$*L`!A"FGX`+"P`>D?L![Q@/"`K``0B`.6!($W1ZP`(0^@'ZD7L``PEB1@`
  72722. +M2H!G!G`!*4``&$J'9P9*JP`$9@@@$T2`*4``%%*'UOP`$+Z&;<!^`"PL`'9@
  72723. +M.G``(@<&@0``!=@0-1@`2,#I@"!-(@`&@0``!U+1]1@`!H````=.)#4(`.6"
  72724. +M0^@'ZD7L``PEB2@`4H>^AFW"3-\LQ$YU(&\`!")O``B>_`HH2.<[-B](`"@O
  72725. +M20`L(`AF"$WL`"0O3@`H<#H@;P`HL!!F!%*O`"@@;P`H<#I.N@``2H!F3G`*
  72726. +M(@`@;P`H(`A*&&;\4XB1P-*(4H%P0;*`909P_V```DQ![``P0^\`,1+89OQ!
  72727. +M[P`Q0^P`/$ZZ``!![P`Q(F\`*$ZZ``!![P`Q+T@`*$*G+R\`+$ZZ``!03RX`
  72728. +M4H!F!G#_8``"""`'0>\`<B(\```)VDZZ```L`"`'3KH``$J`9@9P++R`9`9P
  72729. +M_V```>!![P"*80#^."X`0>\`CF$`_BXJ;P`L*H!![P"280#^("M```1![P"6
  72730. +M80#^%"M```A![P":80#^""M```PB%6LP=#*R@FXJ)BT`"&\D>`JVA&X>*"T`
  72731. +M!&L8#(0```%R;A!*@&L,L()N"+:'9PI*AV<&</]@``%JTH'E@2`M``@D`-2"
  72732. +MU(#4@B`M``0F`.6#UH#6@M:M``S6@=:'<"S6@+R#9`9P_V```3A'[P">?``D
  72733. +M36`0($MA`/V()4``$%B+4H98BKRM``1MZGP`8"`0&R(&!H$```78&X`8`'(`
  72734. +M$@"RK0`(;09P_V```/92AKRM``1MVGP`0>T'2B1(+T@`)&!*($MA`/TZ)(!+
  72735. +MZP`%$"L`!'(`$@`E00`$9PI3@6<&</]@``"\1^T``1`5<@`2`"5!``AM"BIO
  72736. +M`"RRK0`,;P9P_V```)Q2AM3\`!"\K0`(;;!\`&`.(`8&@```!^H;FP@`4H:\
  72737. +MK0`,;>P@!@:````'ZD(U"`!\`-K\"!Y@'B!+80#\OBJ`1>L`!"!*80#\LBM`
  72738. +M``1'Z@`$4H90C2!O`"R\D&W:?``D;P`D*F\`+&`H2H=F!D*J``Q@&!`;2(!(
  72739. +MP"5```QR`;"!9PA*@&<$</]@#E*&U/P`$+RM``AMTG``3-]LW-[\"BA.=2!O
  72740. +M``193R\-*DA@`E*-$!4?0``$9R9(@$C`0>P``0@P``((`&86$"\`!'(LL`%G
  72741. +M#'(ML`%G!G(KL`%FT"`-*E]83TYU(&\`!")O``@@+P`,(B\`$%E/2.<'%"P!
  72742. +M+@`F22I((`UG$A`52(!(P$'L``$(,``""`!F!'``8$IZ`&`B$"\`%$B`2,`B
  72743. +M!>6!TH72@=*`*@%P,)J`NH9O!'``8"92C1`5'T``%&<02(!(P$'L``$(,``"
  72744. +M"`!FQKJ';`1P`&`$)H4@#4S?*.!83TYU(&\`!")O``A93TCG`!0F24/O``AP
  72745. +M`'(880#_;"I`2H!F!'``8&H@+P`((@#I@9*`(`'I@)"!Z8`F@'`ZL!5F3D'M
  72746. +M``%#[P`(<`!R.V$`_S@J0$J`9@1P`&`V("\`""(`Z8&2@.6!TY-P.K`59B!!
  72747. +M[0`!0^\`"'``<CMA`/\**D!*@&8$<`!@""`O``C1DR`-3-\H`%A/3G4@;P`$
  72748. +M(F\`"%E/2.<!%"I)+T@`#!`0<BVP`68(?@%2KP`,8#!(@$C`0>P``0@P``((
  72749. +M`&88<BL@;P`,LAA7P$0`2(!(P"](``Q*@&<$?@!@!'``8!P@;P`,(DUA`/\4
  72750. +M)D!*@&8$<`!@"$J'9P)$E2`+3-\H@%A/3G4@;P`$(F\`")[\``Q(YP`D*DDO
  72751. +M2``0<$JP$&8H0I5#Z``!0>T`!"](``P@22)O``QP`2(\```!;6$`_CPO0``0
  72752. +M8```M'!-L!!F?'`"*H!#Z``!0>T`#"](``P@22)O``QP`7(,80#^$")`2H!F
  72753. +M!G``8```P$7I``%P+K`19P9P`&```+!![0`((D@@2G`!<@5A`/WD(D!*@&8&
  72754. +M<`!@``"41>D``7`NL!%G!G``8```A$'M``0B2"!*<`!R!F$`_;@O0``08#`0
  72755. +M$$B`2,!#[``!"#$``@@`9QIP`2J`0^T`!'``(CP```%M80#]C"]``!!@!'``
  72756. +M8#P@+P`09@1P`&`R<"\@;P`0L!!F'$/H``%![0`0+T@`#"!)(F\`#&$`_=HO
  72757. +M0``08`@K?```'"``$"`O`!!,WR0`WOP`#$YU("\`!"(O``@@;P`,+V\`$``$
  72758. +MGOP`)$CG/Q0J2"H`+@$D!W8#Q(,O0``X+T$`/$J"9@P@!W)D3KH``$J!9A(@
  72759. +M!W)DY8E.N@``2H%G!'``8`)P`2P`(!5*@&<,4X!G2%.`9V9@``%^("T`!"(`
  72760. +M4X$D`=2"U($F`NF#EH(D`^F"E(/O@BX%WH(O1P!`2H9G``%4<CRP@6T``4P&
  72761. +MAP`!48`O1P!`8``!/B`M``0B`-*!TH`D`>F"E($B`NF!DH+O@=J!+T4`0&``
  72762. +M`1PH!7X`*BT`#%.%(`;0@-"&Z8!'[``^U\`O0``@8!H@&R(`TH'2@"0!Z8*4
  72763. +M@2("Z8&2@N^!V(%2A[Z%;>(N+P`\+T0`)"(M``QT`K*";@8F!U.#8`(F!R`#
  72764. +M<F1.N@``(@#2@4J`:@)6@.2`+T``+"`#+T$`,')D3KH``"`!:@)6@.2`=@G6
  72765. +MK0`,+T``-"`#+T$`*'(,3KH``%*!(`'G@)"!T("0@="`58!R"DZZ``!'[P`H
  72766. +MT)O0KP`TT)N0FU*`<@=.N@``+@%J`EZ'+"T`!)R':@)>AGH!*"T`"&`<+@9>
  72767. +MAR(M``SE@4'L`#K1[P`@OK`8`&P(+`=2A;J$;>`@!M"`T(8B`.F!DH`@`>F`
  72768. +MD('O@"(O`"32@"]!`$`@+P!`T*T`$-"O`$A,WRC\WOP`)$YU(&\`!")O``@@
  72769. +M+P`,GOP`6$CG/S8J2"Q-1^\`-";`)L@FR2].`#!*@&<<(`A*&&;\4XB1P"P(
  72770. +M(@C3KP`X<#.R@&4<?#)@&&$`^JHL`)R-+T``.'(#O(%L!G#_8``#>B]&`"P@
  72771. +M;P`X2A!F!G#_8``#:$/O`'1A`/OF+T``.&8&</]@``-4)F\`/$'L`*8B2V$`
  72772. +M][`N`&<"0I,@;P`X2A!G``*^*D@O2`!\80#Z2"(`DHTO0``X+T$`>'8#LH-L
  72773. +M!G#_8``#%"!O`#@0$&<@<BRP`6<:<CNP`6<40^\`<&$`^WXO0``X9A1P_V``
  72774. +M`NP@//__\?#0KP!T+T``<"!O`#@0$'(LL`%G"'([L`%F``%80^@``2!)0^\`
  72775. +M7&$`^[HJ0$J`9@9P_V```K!%[0`!<"RP%6<&</]@``*@($I#[P!(80#[E"]`
  72776. +M`#AF!G#_8``"BB!O`#A*$&<&</]@``)\($MP`B%```@A?````(@`!"`O`'!$
  72777. +M@$WH!THLP'`!+,!2ABS&("\`=$2`3>@'6BS`0IY"GM;\`!!%Z`78>@`L/```
  72778. +M![(@2B\O`'0O2``L(`4B!D'O`&!A`/QF+@`NKP!T(`4B!D'O`$QA`/Q46$\H
  72779. +M`$OJ``)%ZP`(OH!O&B!+((1P`2)O`"@2@"9*(4<`!"1-0BD``6`8($L@AR)O
  72780. +M`"A"$29*(40`!"1-$WP``0`!(`9R`\"!9@P@!G)D3KH``$J!9A(@!G)DY8E.
  72781. +MN@``2H%G!'``8`)P`2(`Y8%![`">(#`8`"(`TH'2@"8!Z8.6@20#Z8*4@^^"
  72782. +MVH)2A@R&```']6\`_T)@``$<(&\`.$H09P9P_V```69*AV<&</]@``%<>`!\
  72783. +M`'H`0J\`1'X`*DM@<$JM!TYG/B`O`$0B!^F!)"\`<`:!```'2B8S&`#6@B]#
  72784. +M`$1*AF<*L(-G!G#_8``!'$2"*T('2B`O`"Q2@"M`!U)\`6`F(`4B+P!T*BT'
  72785. +M2MJ!2H1G"K"%9P9P_V```.Y$@2M!!TI"K0=2>`%2A]K\`!"^JP`(;8I*AF<$
  72786. +M2H1F!G#_8```R'P`?@`J2R@O`$1@.G``(@<&@0``!=@0,Q@`2,#I@"!+T<!#
  72787. +MZ`=*+TD`0$J&9PI*J0`,9@0@!&`"(`71K0`0+"D`!%*'6(V^JP`$;<!@('``
  72788. +M<@$G00`()T``!"0O`'1$@DWK!THLPBS`+,`O0`!X*F\`/"XO`"P@!U*`*T``
  72789. +M#"PO`'AG"-"&4H`K0``,<C.P@6,$</]@,-K\!^H@!R!-(F\`,$ZZ```@3=''
  72790. +M2^@``4(02H9G$"`&($TB;P!\3KH``$(U:`!P`$S?;/S>_`!83G4@;P`$+PTJ
  72791. +M2$'L```B36$`]%!*@&<,0>P``")-<`%A`/P,*E].=2\-0>P`LDZZ```J0$J`
  72792. +M9@8J7V```%QP`2E`$\Y*%68>0JP`<D*L`'9"K`>\0JP'Q$'L``!#[`A<$MAF
  72793. +M_&`L($U#[`!R80#S]$J`9QYP.K`59Q`@34/L`')P`&$`^ZI*@&<(0>P`<F$`
  72794. +M_W8J7V``\PYP`2E`$\Y#[`!RD<AA`/.\2H!G"$'L`')A`/]48`#R[B!O``0@
  72795. +M+P`((F\`#)[\`!!(YP,4*DE([P$!`!`@;P`4+U``&$JL$\YF!&$`_T1*K`!V
  72796. +M9PH@+P`8L*P`@FP@?@!'[`!R8!!2A];\`!"^K`!Z;01^`&`R2JL'3F;J8"I^
  72797. +M`4?L`'8L+`!V8`X@+P`8L*L`$&T(4H=8B[Z&;>Y#[`!RT\=^`!XI!=?IAT'L
  72798. +M![S1QR\-+T@`("`00>\`'$/L`')A``#"(&\`("(H``0K00`@Y8%![`A<(F\`
  72799. +M(-'I``A#[``,(X@8`"M(`"A83TS?*,#>_``03G4@;P`$0^P``'``80#_*D'L
  72800. +M```@"$YU(&\`!"`O``@B;P`,2.<!%"X`)DDJ2$JL$])F#G`!*4`3TD'L"B!A
  72801. +M`/XZ+PL@!R!-0^P*(&$``$)83TJ'9P9![`"Z8`1![!(*)T@`*$S?*(!.=2!O
  72802. +M``1#[``L<`!AKD'L`"P@"$YU(&\`!"`O``@B;P`,+V\`$``$GOP`#$CG#S0N
  72803. +M`"9O`"PJ2'P`>@`H$2`$YX`O20`@T\!%Z0@>8$`O2@`D(!6PDFTV(&\`)+"0
  72804. +M9BA*A&8&("@`!&X:YX0B*``$(F\`(`:$```(&K*Q2`!N!'``8`)P`2H`+"@`
  72805. +M!&`&4X11BFRZ(!4B/``!48!.N@``*``@%2(\``%1@$ZZ``#2AY*&+`%@"`:&
  72806. +M``%1@%.$2H9K]&`(!(8``5&`4H0,A@`!48!L\"`&(CP```X03KH``"=```@@
  72807. +M!B(\```.$$ZZ```@`2]!`!QR/$ZZ```G0``$("\`''(\3KH``":!2H5G`E*3
  72808. +M(`18@'('3KH``"=!`!AL!%ZK`!@L/```![)*A&M`(`9R`\"!9@P@!G)D3KH`
  72809. +M`$J!9A(@!G)DY8E.N@``2H%G!'``8`)P`2H`(@#E@47L`)X@,A@`N(!M0%*&
  72810. +MF(!@P%.&(`9R`\"!9@P@!G)D3KH``$J!9A(@!G)DY8E.N@``2H%G!'``8`)P
  72811. +M`2H`Y8!![`">V+`(`$J$:\8$A@``!VPG1@`4)T0`'"`%T(#0A>F`1>P`/M7`
  72812. +M0JL`$&`.(BL`$.6!F+(8`%*K`!`B*P`0Y8&XLA@`;.92A"=$``Q"JP`@)T<`
  72813. +M)$S?+/#>_``,3G4@;P`$+PTJ2"`M`!@B`-*!TH!![`"^T<$@+0`0(@#2@=*`
  72814. +M0^P`T]/!(#P```=LT*T`%"\`+Q4O+0`$+RT`""\M``PO"2\(2&P`^$AL`%A.
  72815. +MN@``3^\`)$'L`%@@""I?3G4@;P`$+PUA`/TX($`J7V"4(&\`!")O``@@+P`,
  72816. +M+P<N`"`1L(=M%"('3KH``-&0(!$B!TZZ```B@6`J2H!J)E.0WY%L("`11(`B
  72817. +M!TZZ```B$)*`4X$@@2`11(`B!TZZ``">@2*'+A].=2!O``0B;P`(2.<!%"9)
  72818. +M*D@N+0`4GJL`%&8L+BT`$)ZK`!!F(BXM``R>JP`,9A@N+0`(GJL`"&8.+BT`
  72819. +M!)ZK``1F!"X5GI,@!TS?*(!.=2!O``0B;P`(("\`#"]O`!``!)[\`'!(YS\T
  72820. +M+@`J;P"8+TD`+$*5+T@`*$/O`%QP"B+84<C__"`O`%QR/K"!;`1*@&H.0>\`
  72821. +M8$/O`%QP/&$`_Q9![P!D0^\`8'`\80#_"$'O`&A#[P!D<!AA`/[Z0>\`<$/O
  72822. +M`&QP#&$`_NQ@3"`O`'!3KP!P!H````=K(@!T`\*"9@IR9$ZZ``!*@68:(#P`
  72823. +M``=LT*\`<')DY8E.N@``2H%G!'``8`)P`2(`Y8%![`">(#`8`-&O`&@@+P!H
  72824. +M;ZXL/```!VS<KP!P(`9R`\"!9@P@!G)D3KH``$J!9A(@!G)DY8E.N@``2H%G
  72825. +M!'``8`)P`20O`&SE@B8`UH/6@.F#0>P`/M'#+#`H`"`O`&BPAF\:1^\`:)V;
  72826. +M4I,,FP````QMGD*O`&Q2KP!P8)0@+P!<0J\`7'H`<@$O00"(+T``)%*%("\`
  72827. +MB-"`+T``B"`O`(AN[B`O`(AJ!'``8`1P`>N@+T``B$AO`#`O!TAO`)`@;P`X
  72828. +M3I!![P`\0^\`:&$`_BQ/[P`,*`!G+B`%4X5*@&H&</]@``$02H5J!E.O`(A@
  72829. +MQ'`!ZZ`L`$J$;P:=KP"(8+3=KP"(8*X@+P!\:P``Q"(O`%"R@&<``+I!^OGB
  72830. +M(F\`++/(9@9![`!R8`1![`H@?``F2"](`)!@``"(("L'3K"O`'QF=GH`)&\`
  72831. +MD&!D("H'3K"O`'QG5"`%Z8`B+P"((&\`D`:````'2M*P"`"2JP=*+T$`C$AO
  72832. +M`#`O!TAO`)0@;P`X3I!![P`\0^\`:&$`_6Q/[P`,2H!F$B`O`%"PKP!\9@@O
  72833. +M;P",`(A@)E*%U/P`$"!O`)"ZJ``(;9)2AM;\`!`@;P"0O*@`"&T`_W!P_V`D
  72834. +M("\`)-&O`(@O+P`H+P=(;P"0(&\`.$Z0<`$J@$_O``P@+P"(3-\L_-[\`'!.
  72835. +M=2!O``0B;P`(("\`#)[\``Q(YP<T+@`J2"])`!@,K0````$`(&\&<`$K0``@
  72836. +M2&\`'"`'($UA`/T>6$\L`$JO`!QF!B`M`"!J!B`&8```QD'Z^*XB;P`8L\AF
  72837. +M!D'L`')@!$'L"B!\`"9(+T@`(&```)8@*P=.L*T`(&8``(1Z`"1O`"!@<"`M
  72838. +M`"`B*@=.LH!G7B`%Z8`B%2!O`"`&@```!TK2L`@`DJL'2BJ!2JT`(%?`1`!(
  72839. +M@$C`*T``($AO`!P@!R!-(F\`'&$`_(Q83TJO`!QF0"`5D*H'2M"K!THJ@$JM
  72840. +M`"!7P$0`2(!(P"M``"!2A=3\`!`@;P`@NJ@`"&V&4H;6_``0(&\`(+RH``AM
  72841. +M`/]B</],WRS@WOP`#$YU(&\`!"\-0_KWVG``*E]@`/[@2JP3SF8$80#W+$YU
  72842. +M``````/X````'0````$``!*X```29@``$-@``!"T```0I```$%0``!`R```/
  72843. +M\@``#H(```X6```,^```#,H```RX```,J@``"O@```E*```(>```!Z0```%L
  72844. +M```!7````18```#F````H````(X```"`````7````%8```!0````3````"L`
  72845. +M```"```5E```%,8``!3````3D@``$XP``!#H```0W```#J(```Z:```.B```
  72846. +M#G0```YF```.8@``#EH```X\```.,@``#@H```WT```-X@``#=0```V\```-
  72847. +MN```#:0```V8```-D```#88```U\```-3```#3X```TZ```-*@``#1P```T(
  72848. +M```,_```#/0```SP```,[```#.@```S@````L````&@```!D````2```````
  72849. +M``/O@P```D!S=')C:'(``````0```3*#```"0'-T<F-A=``````"```!?```
  72850. +M`7"#```"7V]P96X````````!```!CH,```)`<F5A9`````````$```&L@P``
  72851. +M`D!C;&]S90```````0```;2&```"7U]?8W1Y<&4````%```&6@``!3X```1>
  72852. +M```$'````\J#```"7U]#6$0S,P`````<```2G```$HX``!)4```2/@``$4X`
  72853. +M`!$\```1)```$1H``!`@```0$@``#]X```_0```/K```#YH```^,```/@```
  72854. +M#W````\^```/,```"N8```K8```(4@``"#P```@F```("```!^P```<.```'
  72855. +M`(,```)`<W1R;F-P>0````(```R.```,=(,```-`7U]G971E;G8````````!
  72856. +M```,SH,```)?<W!R:6YT9@````$``!#@`````````_$````#`````$]05%,`
  72857. +M!`!````#\@```^H```!(1TU4`"`@(``@("``````!`````@``````````"`@
  72858. +M(``@("``<SIL;V-A;'1I;64`<SIZ;VYE:6YF;P``+P`````?````'````!\`
  72859. +M```>````'P```!X````?````'P```!X````?````'@```!\````?````'0``
  72860. +M`!\````>````'P```!X````?````'P```!X````?````'@```!\```%M```!
  72861. +M;G!O<VEX<G5L97,``%5.25A46@``("`@`%-U;DUO;E1U95=E9%1H=49R:5-A
  72862. +M=$IA;D9E8DUA<D%P<DUA>4IU;DIU;$%U9U-E<$]C=$YO=D1E8P`E+C-S("4N
  72863. +M,W,E,V0@)3`R+C)D.B4P,BXR9#HE,#(N,F0@)60*```````#[`````(````!
  72864. +M````$`````P````````#\@```^L```3V```#\@```^D```&<GOP`#$C7`0-P
  72865. +M_][\``Q.=5%/2-<#`%!/3G5(YS`"(A!**``-9P1P`&`<)`DF`"QL``!.KO_6
  72866. +M(@!2@&8(3KH``'#_8`(@`4S?0`Q.=5%/2.<_-BX`*DDF2"P3+T8`*"](`"Q*
  72867. +M*P`-9P9P`&```(Q**P`,9V8F3=?'>@!@6"1-8`)2BK7+9`9P"K`29O2WRF8$
  72868. +M*`I@!D'J``$H")B-(B\`*"0-)@0L;```3J[_T"P`4H!F"$ZZ``!P_V`^VH:V
  72869. +MAF8V2^H``9Z&<`!.N@``3KH``$J`9B)*AV:D8!PB!B0-)@<L;```3J[_T"H`
  72870. +M4H!F"$ZZ``!P_V`"(`5,WVS\4$].=5E/2.<_`BX`+!`O00`<2B@`#6<$<`!@
  72871. +M4E.!)@$B!B0'+&P``$ZN_[XJ`$ZN_WPH`%*%9P1*A&<.(`1.N@``*4```'#_
  72872. +M8"0B!G0`)@).KO^^+`!2@&<$2H1G#B`$3KH``"E```!P_V`"(`9,WT#\6$].
  72873. +M=9[\`0!(YS\&+@`J2"P5*BT`""`M``1G"B(`+&P``$ZN_Z88+0`-2(1(Q"!-
  72874. +M3KH``$J$9P1P`&!$(@9![P`@)`@L;```=D#EBTZN_F@H`$J'9@HB!DZN_]Q*
  72875. +M@&<:2H1G$G#_NH!G#"(")`5.KO]&2H!G!'``8`9.N@``</],WV#\WOP!`$YU
  72876. +M("\`!$CG(`(B`"QL``!T`$ZN_S1.KO]\="Y&`K""5\%$`4B!2,$@`4S?0`1.
  72877. +M=2`O``0@;P`((F\`#)[\`!!(YS<6+@`F22I(?`!AN$J`9GPB!RQL``!T`4ZN
  72878. +M_E9*@&=L(@=![```)`AV!$ZN_]!9@&92(@<D/```)Q!.KO\T2H!G0B('0>\`
  72879. +M("0(=A!.KO_6<@FP@6\N<)NP+P`@9B9![P`E(@@D"TZN_-`J`$'O`";1P"((
  72880. +M)`U.KOS04H!G!E*%9P)\`2('=`!.KOY6(`9,WVCLWOP`$$YU("\`!"(O``B>
  72881. +M_`(02.<_!BX`</\O0`(H+T$`)"('+&P``'0`=@%.KO^^+T``("('3J[_OBP`
  72882. +M3J[_?"H`+T`"+&8``,(H+P`D(@<D!';_3J[^.+""9@``KKR";```GBH$FH8H
  72883. +M!2`$<@%(02QX``1.KO\Z*D!*@&9J<@)(04ZN_RCBB"H`#(4```(`;1`@!7(!
  72884. +M2$%.KO\Z*D!*@&9&>D#GC4OO`"@P/`'_<@!![P`H$,%1R/_\8"RXA6\$(`5@
  72885. +M`B`$)@!.N@``(@<D#2QL``!.KO_0L(-G"DZN_WPO0`(L8`:8@TJ$;M!![P`H
  72886. +ML<UG#")-(`4L>``$3J[_+BHO`BQF!$*O`B@L+P`@O*\`)&P.(@<D!BQL``!V
  72887. +M_TZN_[XL+P(H9PH@!4ZZ```I0```(`9,WV#\WOP"$$YUGOP!"$CG-Q8N`"9)
  72888. +M*D@L%4HM``UF``$8(`<$@```!`!G(`2````$`&=*4X!G6%.`9UQ3@&=>4X!G
  72889. +M9E.`9VQ@``#N2BT`#&<F(`9![P$D0^\!(&$`_=9*@&<4("\!)#=```(@+P$@
  72890. +M-H!P`&```,IP&6```+XB!BQL``!.KO\H)H!P`&```+(FAG``8```JG``8```
  72891. +MI"`&(A-A`/XV8```F"M3``AP`&```(XJ$TJM``1F#B(5+&P``$ZN_HPK0``$
  72892. +M("T`!&=B)``B!2QL``!.KOY<2H!F4B(&0>\`("0(=D#EBTZN_FA*@&<^(@5.
  72893. +MKO^F(BT`!$ZN_Z8B!DZN_]PB`G0`3J[_1AM\``$`#2J"*T(`!$'O`"`B""QL
  72894. +M``!.KO^X2H!G!"`"8`Y.N@``8`9P%BE```!P_TS?:.S>_`$(3G4@+P`$(B\`
  72895. +M""]O``P`!$CG#P8J+P`<+`$N`'`.3KH``"I`2H!F"G`,*4```'#_8$Y#U2+'
  72896. +M0IDBQD(M``TB!RQL``!.KO\H&T``#$AZ_G1(>OO:2'K[9$AZ^JQ(>OIV2'KZ
  72897. +M:"`%($U#^OI03KH``$_O`!@H`&P&($U.N@``(`1,WV#P3G4@+P`$(B\`""]O
  72898. +M``P`!"]O`!``""]O`!0`#"]O`!@`$$CG#0`H+P`4*B\`$"X`<`!*@68$<$#E
  72899. +MB`!```$O`"`'<O]A`/]&6$]*@&9`<`!*A&8$<$#EB`!```(O`"`%<O]A`/\H
  72900. +M6$]3@&8B<`!*KP`<9@1P0.6(`$```B\`("\`''+_80#_!EA/58!G$$'L``8O
  72901. +M2``03-\`L$[Z``!,WP"P3G4``````_@````"`````0``!EH```)<````````
  72902. +M`^^&```"7T1/4T)A<V4````0```%B```!2(```34```$O@``!(````/D```#
  72903. +MG````O````),```"!````;0```&.```!(@```.(```"F````,(,```)`7W-E
  72904. +M=&5R<@````4```4R```!Z@```/````"T````/H,```1`7V-H96-K7W-I9VYA
  72905. +M;',``````0```,J#```$0%]H86YD;&5?<VEG;F%L<P````$```#.@P``!$!C
  72906. +M;VYV97)T7V]S97)R```````#```#]@```5X```$\A@```E]E<G)N;P``````
  72907. +M!0``!7(```4Z```#^@```6(```%`@P```D!F<F5E`````````@``!<(```&@
  72908. +M@P```T!C:&MA8F]R=`````````$```.4@P```D!M86QL;V,``````0``!6:#
  72909. +M```#0%]A;&QO8U]F9````````0``!;2#```"7U]F86EL```````!```&9@``
  72910. +M``````/Q`````P````!/4%13``0`0````_(```/J````")LP('$``$9A:6QE
  72911. +M9"!T;R!I;FET:6%L:7-E($DO3P`````#\@```^D````G(&\`!")O``A(YR$6
  72912. +M)DDJ2$ZZ```B#20++&P``$ZN_[)*@&<$<`!@;$ZN_WPN`'(T1@&P@692(@).
  72913. +MKO^X2H!G#B(-3J[_LDJ`9P1P`&!&3J[_?"X`<F_2@;"!9BPB`G0`3J[_1DJ`
  72914. +M9QHB"TZN_[A*@&<0(@TD"TZN_[)*@&<$<`!@$DZN_WPN`"`'3KH``"E```!P
  72915. +M_TS?:(1.=0`````#[X,```-`8VAK86)O<G0````````!````$H8```)?1$]3
  72916. +M0F%S90````$````:@P``!$!C;VYV97)T7V]S97)R```````!````C(8```)?
  72917. +M97)R;F\```````$```"0`````````_$````#`````$]05%,`!`!````#\@``
  72918. +M`^D````.(&\`!"`O``@B+P`,GOP`#$C7`0-P`-[\``Q.=2`O``0B+P`(+V\`
  72919. +M#``$44](UP`#<`!03TYU``````/Q`````P````!/4%13``0``````_(```/I
  72920. +M````$"!O``0B;P`(("\`#$CG`10N`"9)*DAF!'``8!P@!R!+(DUR`$J`9PX2
  72921. +M&)(99@13@&;V2(%(P2`!3-\H@$YU``````/Q`````P````!/4%13``0`````
  72922. +M`_(```/I````=2!O``0B;P`(+V\`#``$("\`$"]O`!0`"$CG!S0N`"1O`"`F
  72923. +M22I(+"L`="2O`!Q"J@`2<`$U0``.0FH`$"5\```"```R-4``#"5K`(``-B`K
  72924. +M`'QF$"(K``1O"B5\```(```68`0E0``6)5,`!$'K`(1.N@``)4``(B5``!HE
  72925. +M0``J("L`!%J`9SY5@&=068!G0%6`9F8@#6<<2'@`_TAL```O#4ZZ``!/[P`,
  72926. +M*@!O!B5%`!9@""5\```!```6)7P``*````A@2B5\```0```(8$`E?```0```
  72927. +M"'P`8#1*DV802BL`"&8*)7P``"````A@("5\``"````(8!8@*P`$;P9P0.&(
  72928. +M8`8@/```@``E0``(2H=G`GP`(`9.N@``@:H`"$S?+.!.=2!O``0B;P`(64](
  72929. +MYR,6*DA^`"])`!A"IRQL``!R`B0/3J[_'$_O``0F0$J`9U`B#73^3J[_K"X`
  72930. +M9T0B!R0+3J[_FDJ`9S@B!TZN_RY*@%?&1`9(ADC&2H!G!B(`3J[_IB`'Y8`O
  72931. +M+P`8($`O*``,(D(@!B!-80#^?%!/?`!@#GS_3J[_?$ZZ```I0```2H=G!B('
  72932. +M3J[_IB`+9P@D"W("3J[_%B`&3-]HQ%A/3G4``````_@````!`````0```)X`
  72933. +M```````#[X,```-`7V%M:6=A,F=M=``````!````<H,```-?<F5A9&QI;FL`
  72934. +M```````!````I(,```-`7VUA:V5?;6]D90`````!```!&H8```)?1$]30F%S
  72935. +M90````$```%`@P``!$!C;VYV97)T7V]S97)R```````!```!K(8```)?97)R
  72936. +M;F\```````$```&P`````````_$````#`````$]05%,`!`!````#\@```^L`
  72937. +M``!````#\@```^D````%(&\`!"`O``AR`&`"$,%3@&3Z3G4```/Q`````P``
  72938. +M``!/4%13``0``````_(```/I````#"`O``0B+P`(64\O!RX`+T$`!$ZZ``!(
  72939. +M;P`$2'@(`R\'3KH``$_O``PN'UA/3G4``````^^#```#0&-H:V%B;W)T````
  72940. +M`````0```!2#```"7VEO8W1L```````!````(@````````/Q`````P````!/
  72941. +M4%13``0``````_(```/I````#2`O``0B+P`(64\O!RX`(`%.N@``+T``!$ZZ
  72942. +M``!(;P`$2'@(!"\'3KH``$_O``PN'UA/3G4```/O@P``!4!?;6%K95]P<F]T
  72943. +M96-T:6]N`````````0```!*#```#0&-H:V%B;W)T`````````0```!J#```"
  72944. +M7VEO8W1L```````!````*`````````/Q`````P````!/4%13``0``````_(`
  72945. +M``/I````$"!O``0@+P`((B\`#)[\``Q(UP$#</\I0```WOP`#$YU(&\`!"`O
  72946. +M``@B+P`,GOP`#$C7`0-P_RE```#>_``,3G4```/OA@```E]E<G)N;P``````
  72947. +M`@```#@````8`````````_$````#`````$]05%,`!`!````#\@```^D````-
  72948. +M("\`!%E/+P<N`$ZZ``!(;P`$2'@(`"\'3KH``$_O``Q*@&<$<`!@!"`O``0N
  72949. +M'UA/3G4``````^^#```#0&-H:V%B;W)T`````````0````R#```"7VEO8W1L
  72950. +M```````!````&@````````/Q`````P````!/4%13``0``````_(```/I````
  72951. +M#R`O``1(YP8`3KH``"P`<`!.N@``8`9P`$ZZ```J`"`%3KH``$J`9^X@!DZZ
  72952. +M``!P!"E```!P_TS?`&!.=0```^^#```#0'-I9W-E=&UA<VL``````@```"P`
  72953. +M```*@P``!$!?8VAE8VM?<VEG;F%L<P`````!````$H,```1`7W=A:71?<VEG
  72954. +M;F%L<P```````0```!J#```$0%]H86YD;&5?<VEG;F%L<P````$````BA@``
  72955. +M`E]E<G)N;P```````0```#(````````#\0````,`````3U!44P`$`$````/R
  72956. +M```#Z0```"@@;P`$2.<C%BI(?@!"IRQL``!R`B0/3J[_'$_O``0F0$J`9U(B
  72957. +M#73^3J[_K"X`9T8B!R0+3J[_FDJ`9SHB*P`$7L!$`$B`2,`L`"('3J[_IG("
  72958. +M3J[_%DJ&9Q0B#4ZN_[A*@&<$<`!@,DZZ``!@*G`4*4```&`B3J[_?$ZZ```I
  72959. +M0```2H=G!B('3J[_IB`+9P@D"W("3J[_%G#_3-]HQ$YU```#[X8```)?1$]3
  72960. +M0F%S90````$````0@P```D!?<V5T97)R`````0```&J&```"7V5R<FYO````
  72961. +M```"````@````'*#```$0&-O;G9E<G1?;W-E<G(```````$```!\````````
  72962. +M`_$````#`````$]05%,`!`!````#\@```^D```&7(&\`!"`O``@B;P`,+V\`
  72963. +M$``$+P<N`"E(`!XI0``:<@&P@64>+R\`""\)80``)%!/2H!G#B!L`!Y"$"`'
  72964. +MD*P`&F`"<``N'TYU(&\`!")O``A(YP`4)DDJ2&``!/@0%7(EL`%F``3*4HT0
  72965. +M%4B`2,!*@&<``-9R)9"!9P`$M'(<D(%G``#,4X!G``$F4X!G``&`4X!G``&B
  72966. +M68!G``'L4X!G``($68!G``*:6X!G``,.4X!G``,P4X!G``-84X!G``-Z58!G
  72967. +M``.@4X!G``-&4X!G``0F4X!G``1"7X!G``"B4X!G``#\4X!G``$Z4X!G``%<
  72968. +M4X!G``%T5X!G``#D58!G``'24X!G``'N4X!G``(&4X!G``),4X!G``)H58!G
  72969. +M``)V58!G``*J4X!G``+44X!G``+T5X!G``-F4X!G``-^4X!G``.,8``#Z%.-
  72970. +M8``#XB`K`!AK!G(&L(%O!G``8``#_B(K`!CE@4'L`'8O,!@`80`$QEA/2H!F
  72971. +M``/88``#X"`K`!AK!G(&L(%O!G``8``#SB(K`!CE@4'L`!PO,!@`80`$EEA/
  72972. +M2H!F``.H8``#L"`K`!!K!G(+L(%O!G``8``#GB(K`!#E@4'L`4XO,!@`80`$
  72973. +M9EA/2H!F``-X8``#@"`K`!!K!G(+L(%O!G``8``#;B(K`!#E@4'L`,(O,!@`
  72974. +M80`$-EA/2H!F``-(8``#4$'L`7XB2V$`_CI*@&8``S1@``,\0>P!E")+80#^
  72975. +M)DJ`9@`#(&```RA![`&F(DMA`/X22H!F``,,8``#%$AX`#!(>``"+RL`#&$`
  72976. +M`WI/[P`,2H!F``+N8``"]DAX`"!(>``"+RL`#&$``UQ/[P`,2H!F``+08``"
  72977. +MV$AX`#!(>``"+RL`"&$``SY/[P`,2H!F``*R8``"NB`K``AR#$ZZ``!P#$J!
  72978. +M9P(@`4AX`#!(>``"+P!A``,03^\`#$J`9@`"A&```HP@*P`<4H!(>``P2'@`
  72979. +M`R\`80`"[D_O``Q*@&8``F)@``)J2'@`($AX``(O*P`(80`"T$_O``Q*@&8`
  72980. +M`D1@``),("L`"'(,3KH``'`,2H%G`B`!2'@`($AX``(O`&$``J)/[P`,2H!F
  72981. +M``(68``"'DAX`#!(>``"+RL`!&$``H1/[P`,2H!F``'X8``"`"`K`!!2@$AX
  72982. +M`#!(>``"+P!A``)B3^\`#$J`9@`!UF```=Y(;`&P80`"L%A/2H!F``'"8``!
  72983. +MR@RK````#``(;09![`&R8`1![`&V+PAA``**6$]*@&8``9Q@``&D0>P!NB)+
  72984. +M80#\CDJ`9@`!B&```9!![`'`(DMA`/QZ2H!F``%T8``!?$AX`#!(>``"+Q-A
  72985. +M``'D3^\`#$J`9@`!6&```6`O"V$``6183TJ`9@`!1F```4Y![`',(DMA`/PX
  72986. +M2H!F``$R8``!.DAL`=9A``(,6$]*@&8``1Y@``$F("L`'%Z`D*L`&'('3KH`
  72987. +M`$AX`#!(>``"+P!A``%^3^\`#$J`9@``\F```/H@*P`89P13@&`"<`8B*P`<
  72988. +M7H&2@"`!<@=.N@``2'@`,$AX``(O`&$``49/[P`,2H!F``"Z8```PDAX`#!(
  72989. +M>``!+RL`&&$``2A/[P`,2H!F``"<8```I$'L`=@B2V$`^XY*@&8``(A@``"0
  72990. +M(#P```=LT*L`%')D3KH``$AX`#!(>``"+P%A``#H3^\`#$J`9EQ@9B`\```'
  72991. +M;-"K`!1(>``P2'@`!"\`80``QD_O``Q*@&8Z8$0@*P`H9PPO`&$``1183TJ`
  72992. +M9B9P`&`N2JP`&E?`1`!(@$C`4ZP`&DJ`9P1P`&`6(&P`'A#5*4@`'E*-2A5F
  72993. +M`/L&("P`&DS?*`!.=2!O``2>_``L2.<!$$/O``AP"B+84<C__$'O``A.N@``
  72994. +M+@!'[``-8!H@!W(*3KH``'`PTH`6@5.+(`=R"DZZ```N`$J';PA![```M\AB
  72995. +MVDAK``%A``"`6$],WPB`WOP`+$YU("\`!"(O``@O;P`,``1(YP<$&B\`%RP!
  72996. +M+@!+[``78!P@!W(*3KH``'`PTH`:@5.-(`=R"DZZ```N`%.&2H=O#D'L``^[
  72997. +MR&+88`0:A5.-0>P`#[O(8P@@!E.&2H!N[$AM``%A```.6$],WR#@3G4@;P`$
  72998. +M+PTJ2"`L`!IG&!(=(&P`'A"!9@1P`6`*4JP`'E.L`!I@XBI?3G4```/X````
  72999. +M#P````$```2\```$)@``!!(```/0```#O````Z8```.@```#@@```C@```(D
  73000. +M```"$````?@```'(```!F````6@````2`````@``!E0```90```&1```!CP`
  73001. +M``84```&!@``!>````6J```%A@``!5H```5.```%2```!3P```4P````/@``
  73002. +M`#8````<````&`````````/O@P```E]?0UA$,S,`````"0``!?H```7J```%
  73003. +MH```!9````3<```$?@``!$8```,:```"K(,```)`;6MT:6UE``````$```6`
  73004. +M`````````_$````#`````$]05%,`!`!````#\@```^H```!Y4W5N`$UO;@!4
  73005. +M=64`5V5D`%1H=0!&<FD`4V%T```````````$````"`````P````0````%```
  73006. +M`!A3=6YD87D``$UO;F1A>0``5'5E<V1A>0!7961N97-D87D`5&AU<G-D87D`
  73007. +M`$9R:61A>0``4V%T=7)D87D``````#@```!`````2````%````!:````9```
  73008. +M`&Q*86X`1F5B`$UA<@!!<'(`36%Y`$IU;@!*=6P`075G`%-E<`!/8W0`3F]V
  73009. +M`$1E8P````"2````E@```)H```">````H@```*8```"J````K@```+(```"V
  73010. +M````N@```+Y*86YU87)Y`$9E8G)U87)Y``!-87)C:`!!<')I;`!-87D`2G5N
  73011. +M90``2G5L>0``075G=7-T``!397!T96UB97(`3V-T;V)E<@!.;W9E;6)E<@``
  73012. +M1&5C96UB97(``````/(```#Z```!!````0H```$0```!%````1H```$@```!
  73013. +M*````3(```$Z```!1"5A("5B("5E("5(.B5-.B53("59```E;2\E9"\E>2`E
  73014. +M2#HE33HE4P`E;2\E9"\E>0``"@!030``04T``"5(.B5-`"5).B5-.B53("5P
  73015. +M`"5(.B5-.B53```)`"5M+R5D+R5Y`````````^P````F`````0```7H```%V
  73016. +M```!<@```6X```%J```!9@```6(```%>```!6@```58```%2```!3@```.X`
  73017. +M``#J````Y@```.(```#>````V@```-8```#2````S@```,H```#&````P@``
  73018. +M`(X```"*````A@```((```!^````>@```'8````T````,````"P````H````
  73019. +M)````"`````<`````````_(```/K````"0```_(```/I````%B!O``0@+P`(
  73020. +M2.<G`BX`(@@L;```)#P```/M3J[_XBP`3KH``$J&9QP@!B('3KH``"H`(@9.
  73021. +MKO_<2H!F!$J%9P0@!6`.3J[_?$ZZ```I0```</],WT#D3G4```/OA@```E]$
  73022. +M3U-"87-E`````0```!*#```#0&-H:V%B;W)T`````````0```"*#```$0%]D
  73023. +M;U]T<G5N8V%T90````````$````N@P``!$!C;VYV97)T7V]S97)R```````!
  73024. +M````2H8```)?97)R;F\```````$```!.`````````_$````#`````$]05%,`
  73025. +M!`!````#\@```^D```#5(&\`!")O``@@+P`,(B\`$"]O`!0`!"]O`!@`""]O
  73026. +M`!P`#)[\`#!(YR\V+B\`6"](`"PJ`"@!?$#ECB]``"0O00`H+TD`,'!`Y8A.
  73027. +MN@``*D`O0`!$(`52@&82+&P``$ZN_\HO0`!`0J\`4&`F2&\`0$AX"`$O!4ZZ
  73028. +M``!/[P`,4H!F!$*O`$!P`2]``%`@!4ZZ```@!%*`9A(L;```3J[_Q"]``#Q"
  73029. +MKP!,8$:ZA&8,+V\`0``\0J\`3&`V2&\`/$AX"`$O!$ZZ``!/[P`,4H!F!G``
  73030. +M+T``/"(O`#RRKP!`5L!$`$B`2,`O0`!,(`1.N@``</^^@&80(&P``"]H`.``
  73031. +M.$*O`$A@4'#^OH!F#"]O`#P`.$*O`$A@/DAO`#A(>`@!+P=.N@``3^\`#%*`
  73032. +M9@9P`"]``#@@+P`X(B\`/+*`9PJPKP!`9P1P`6`"<``O0`!((`=.N@``2J\`
  73033. +M0&<``61*KP`\9P`!7$JO`#AF!E*'9@`!4"`-9P`!1"9->``O;P`P`#1@``"L
  73034. +M2H1F!B!O`"Q@`B!5)$AZ`RI(8!I2A1`5<BJP`6<,<B*P`6<&<@JP`68"4H52
  73035. +MC4H59N(J;P!$($W1QB)+T\5-Z0`!O<AE)"`&T(;0A2P`($U.N@``*D!*@&<`
  73036. +M`-H@"Y"O`$0F3=?`+TT`1"!+$+P`(%2+$7P`(@`!*DI@(!`5<B*P`6<&<BJP
  73037. +M`68&%OP`*F`*<@JP`68$%OP`*Q;=2A5FW!;\`")2A%BO`#0J;P`T2I5F`/].
  73038. +M0A,J;P!<(`UG$"(-+&P``'3^3J[_K"@`8`)X`$J$9@0@#68\*F\`1"\O`&`O
  73039. +M!"\O`%`O+P!$+R\`7"\O`%`@+P!8(B\`:"!-3KH``$_O`!@J`%*`9QH@34ZZ
  73040. +M```@!6!X+&P``$ZN_WQ.N@``*4```$J$9Q(B!"QL``!.KO^F8`9P#"E````@
  73041. +M+P!`9Q!*KP!09PHB`"QL``!.KO_<("\`/&<02J\`3&<*(@`L;```3J[_W"`O
  73042. +M`#AG$$JO`$AG"B(`+&P``$ZN_]PJ;P!$(`UG!B!-3KH``'#_3-]L]-[\`#!.
  73043. +M=2!O``0B;P`(("\`#"(O`!`O;P`4``0O;P`8``@O!2HO``PO!2\O``Q(>/__
  73044. +M80#\V$_O``PJ'TYU```#[X,```)`;6%L;&]C``````$```!,A@```E]$3U-"
  73045. +M87-E````"````OP```+F```"T````K(```*<```"2````)H```!<@P```E]I
  73046. +M;V-T;````````P```20```#&````>(,```1`7W!S975D;U]C;&]S90``````
  73047. +M`P```50```#N````D(8```%?7W5S`````0```/B#```"0')E86QL;V,````!
  73048. +M```!V(,```1`7W-T87)T7W!R;V-E<W,``````0```H2#```"0&9R964`````
  73049. +M```"```##@```I2#```$0&-O;G9E<G1?;W-E<G(```````$```*DA@```E]E
  73050. +M<G)N;P```````@```KX```*H`````````_$````#`````$]05%,`!`!````#
  73051. +M\@```^D````"<`%.=7`!3G4```/Q`````P````!/4%13``0``````_(```/I
  73052. +M````#B`O``0O!RX`3KH``"`'(&P``'(`3KH``&`,("P``$ZZ``!.N@``(&P`
  73053. +M`$ZZ``!*@&?H<``N'TYU```#[X,```-`8VAK86)O<G0````````!````"H8`
  73054. +M``-?7V]D9%]T:6UE<@`````"````*````!"#```$0%]T:6UE<E]S=&%R=```
  73055. +M``````$````6A@```U]?;V1D7W-I9P````````$````<@P``!$!?=V%I=%]S
  73056. +M:6=N86QS```````!````((,```1`7VAA;F1L95]S:6=N86QS`````0```"2#
  73057. +M```$0%]T:6UE<E]E>'!I<F5D``````$````L`````````_$````#`````$]0
  73058. +M5%,`!`!````#\@```^D````/(&\`!"`O``A(YP$$+@`J2$ZZ```O!TAX`P$O
  73059. +M#4ZZ``!/[P`,3-\@@$YU(&\`!"`O``A(YP$$3-\@@&#,```#[X,```-`8VAK
  73060. +M86)O<G0````````!````$H,```)?;W!E;@````````$````>`````````_$`
  73061. +M```#`````$]05%,`!``````#\@```^D````C("\`!"!O``@B+P`,64](YP,T
  73062. +M+`$N`"I(3KH``"`'3KH``"9`2H!G1`@K``$``V<V""L``P`#9Q8@:P`8+T@`
  73063. +M%"!K``1P`'("(F\`%$Z1(&L`%"](`!0@!B!K``0B321O`!1.DF`(<`TI0```
  73064. +M</],WRS`6$].=2`O``0@;P`((B\`#$CG`P1,WR#`8(````/O@P```T!C:&MA
  73065. +M8F]R=`````````$````:@P```T!?9FEN9%]F9`````````$````@A@```E]E
  73066. +M<G)N;P```````0```&H````````#\0````,`````3U!44P`$`$````/R```#
  73067. +MZ0````P@;P`$44\O#2I(0>\`!$ZZ``!*@&H$</]@#B`-9P8@+P`$*H`@+P`$
  73068. +M*E]03TYU``````/O@P```T!?9V5T=&EM90````````$````0`````````_$`
  73069. +M```#`````$]05%,`!``````#\@```^D````=(&\`!)[\`$!(YSL6*DA.N@``
  73070. +M(`UG4DH59TXB#4'O`"`D""QL``!V0'@`3J[\=BX`;39.KO]\+`!2@$ZZ```F
  73071. +M0$J`9R2^AF<4)@92@R(-)`M.KOQV2H!O$"`"8`X@0B)+$MAF_"`+8`)P`$S?
  73072. +M:-S>_`!`3G4```/O@P```T!C:&MA8F]R=`````````$````0A@```E]$3U-"
  73073. +M87-E`````0```"2#```"0&UA;&QO8P`````!````/`````````/Q`````P``
  73074. +M``!/4%13``0`0````_(```/I````$R!O``0B;P`(2.<S$B9)(@@L;```=/Y.
  73075. +MKO^L+@!.N@``2H=G&B(+)`=V`$ZN_D0L`"("3J[_IDJ&9P0@`V`&3KH``'#_
  73076. +M3-](S$YU``````/OA@```E]$3U-"87-E`````0```!*#```#0&-H:V%B;W)T
  73077. +M`````````0```!Z#```"0%]S971E<G(````!````0`````````/Q`````P``
  73078. +M``!/4%13``0`0````_(```/I````)"!O``2>_``,2.<!%"I(2AAF_%.(D<T@
  73079. +M""9-U\!=BWYA3KH``"\L``!(;```2&\`%TZZ``!/[P`,0>\`#R)(2AEF_%.)
  73080. +MD\@@"7(%L(%O"$'O``K1P&`$0>\`#R\(2&P`!"\+3KH``$_O``P6AR!-<`!.
  73081. +MN@``2H!F"E('<'J^`&_J0A4@#4S?*(#>_``,3G4``````_@````"`````0``
  73082. +M`%X````J`````````^^#```#0&-H:V%B;W)T`````````0```"*&```!7U]U
  73083. +M<P````$````F@P```U]?<W!R:6YT9@````````(```!D````,H,```-`7U]A
  73084. +M8V-E<W,````````!````<@````````/Q`````P````!/4%13``0`0````_(`
  73085. +M``/J`````B5L>`!A)7,````#\@```^D````&(&\`!"\-*DA.N@``($UP0.F(
  73086. +M*E].^@`````#[X,```-`8VAK86)O<G0````````!````"H,```)`9V5T8W=D
  73087. +M``````$````6`````````_$````#`````$]05%,`!``````#\@```^D````/
  73088. +M(&\`!"`O``A(YR$&+@`J2$ZZ```@!TZZ```D`"(-+&P``$ZN_T9*@&<$<`!@
  73089. +M!DZZ``!P_TS?8(1.=0`````#[X,```-`8VAK86)O<G0````````!````$H,`
  73090. +M``5`7VUA:V5?<')O=&5C=&EO;@````````$````8A@```E]$3U-"87-E````
  73091. +M`0```""#```"0%]S971E<G(````!````,`````````/Q`````P````!/4%13
  73092. +M``0`0````_(```/I````'"`O``0B+P`(+V\`#``$44](YP<`*B\`&"P!+@!.
  73093. +MN@``(`=.N@``2H!G&B)`(&D`&"](`!`@!B(%(&D`!")O`!!.D6`"</],WP#@
  73094. +M4$].=2`O``0B+P`(+V\`#``$2.<'`"HO`!`O10`03-\`X&"@``````/O@P``
  73095. +M`T!C:&MA8F]R=`````````$````>@P```T!?9FEN9%]F9`````````$````D
  73096. +M`````````_$````#`````$]05%,`!``````#\@```^D````<("\`!"!O``@B
  73097. +M+P`,64](YP,T+`$N`"I(3KH``"`'3KH``"9`2H!G)@@K`````V<8(&L`$"](
  73098. +M`!0@!B!K``0B321O`!1.DF`(<`TI0```</],WRS`6$].=2`O``0@;P`((B\`
  73099. +M#$CG`P1,WR#`8)X``````^^#```#0&-H:V%B;W)T`````````0```!J#```#
  73100. +M0%]F:6YD7V9D`````````0```""&```"7V5R<FYO```````!````3```````
  73101. +M``/Q`````P````!/4%13``0`0````_(```/I````@2`O``0@;P`((F\`#"]O
  73102. +M`!``!"]O`!0`")[\`"Q(YS\V)DDJ2"]``$`D;P!<(`IG#DJ29@I*J@`$9@1P
  73103. +M`6`"<`!R`"]``#0D#6<"(A5T`"]!`"PF"V<")!-Z`'X!+T(`,&!2*"\`+,B'
  73104. +M+"\`,,R'3KH``$J$9@1*AF<V(`5.N@``)$!*@&8&</]@``%N2H1G"`@J````
  73105. +M`V<,2H9G%`@J``$``V8,<`TI0```</]@``%*4H7>A[JO`$!MJ"1O`%P@"F<0
  73106. +M(!(B*@`$(&P``$ZZ``!@""!L``!.N@``>@`@!4*O`%!Z`'X!+T``*&`Z*"\`
  73107. +M+,B'+"\`,,R'2H1F!$J&9R(@!4ZZ```B0"!I``@O2``\(`0B!B!I``0B;P`\
  73108. +M3I&!KP!04H7>A[JO`$!MP"@O`%`@!%*`9P9*KP`T9PAP`$ZZ``!@"B`L``"`
  73109. +MA$ZZ```O0`!,?`!X`2XO`#`J+P`H8'`@+P`LP(0O0`!((@?"A"]!`$1*@&8$
  73110. +M2H%G4B`&3KH``")`(&D`#$AO`$0O2``\(&D`!$/O`$PL;P`\3I983R`O`$AF
  73111. +M"B(-9P8B!$:!PY4@+P!$9@HB"V<&(@1&@<.32J\`2&8&2J\`1&<"4H52AMB$
  73112. +MO*\`0&V*("\`3$ZZ``!*A684(&P``$ZZ``!*@&8(2J\`-&<`_N@@!4S?;/S>
  73113. +M_``L3G4``````^^#```#0&-H:V%B;W)T`````````0```'"#```#0%]F:6YD
  73114. +M7V9D`````````P```7X```$$````?H8```)?97)R;F\```````$```"HA@``
  73115. +M`U]?;V1D7W1I;65R``````,```'D````U````,J#```$0%]T:6UE<E]S=&%R
  73116. +M=`````````$```#.@P``!$!?=&EM97)?86)O<G0````````!````V(,```1`
  73117. +M7V-H96-K7W-I9VYA;',``````0```4"&```#7U]O9&1?<VEG`````````0``
  73118. +M`4:#```$0%]W86ET7W-I9VYA;',```````$```%,@P``!$!?:&%N9&QE7W-I
  73119. +M9VYA;',````!```!W(,```1`7W1I;65R7V5X<&ER960``````0```>@`````
  73120. +M```#\0````,`````3U!44P`$`$````/R```#Z0```"!13TCG(R0N+P`@3KH`
  73121. +M`"PO`"@@!TZZ```J0$J`9U@@+P`D5X!G#%.`9PYP%BE```!@1'`,P)5@0"`5
  73122. +M=`S,@B0``D+_\X2&*H)R!,*"=`3`@K"!9QXO00`8(&T`("](`!0@;0`$0^\`
  73123. +M&'``)&\`%$Z28`9P`&`"</],WR3$4$].=0```^^#```#0&-H:V%B;W)T````
  73124. +M`````0````R#```#0%]F:6YD7V9D`````````0```!:&```"7V5R<FYO````
  73125. +M```!````+@````````/Q`````P````!/4%13``0`0````_(```/I````````
  73126. +M`_$````#`````$]05%,`!``````#\@```^H```#>86UI9V$@<W!E8VEF:6,@
  73127. +M97)R;W(```````!5;FMN;W=N(&5R<F]R`&YO="!O=VYE<@!N;R!S=6-H(&9I
  73128. +M;&4@;W(@9&ER96-T;W)Y`&YO('-U8V@@<')O8V5S<P!I;G1E<G)U<'1E9"!S
  73129. +M>7-T96T@8V%L;`!I+V\@97)R;W(`;F\@<W5C:"!D979I8V4@;W(@861D<F5S
  73130. +M<P!A<F=U;65N="!L:7-T('1O;R!L;VYG``!E>&5C(&9O<FUA="!E<G)O<@!B
  73131. +M860@9FEL92!N=6UB97(`;F\@8VAI;&0@<')O8V5S<P``;F\@;6]R92!P<F]C
  73132. +M97-S97,`;F]T(&5N;W5G:"!M96UO<GD`<&5R;6ES<VEO;B!D96YI960`8F%D
  73133. +M(&%D9')E<W,`8FQO8VL@9&5V:6-E(')E<75I<F5D`&UO=6YT(&1E=FEC97,@
  73134. +M8G5S>0``9FEL92!E>&ES=',`8W)O<W,M9&5V:6-E(&QI;FL`;F\@<W5C:"!D
  73135. +M979I8V4``&YO="!A(&1I<F5C=&]R>0!I<R!A(&1I<F5C=&]R>0``:6YV86QI
  73136. +M9"!A<F=U;65N=```9FEL92!T86)L92!O=F5R9FQO=P!T;V\@;6%N>2!O<&5N
  73137. +M(&9I;&5S`&YO="!A('1Y<&5W<FET97(``'1E>'0@9FEL92!B=7-Y``!F:6QE
  73138. +M('1O;R!B:6<``&YO('-P86-E(&QE9G0@;VX@9&5V:6-E`&EL;&5G86P@<V5E
  73139. +M:P``<F5A9"UO;FQY(&9I;&4@<WES=&5M`'1O;R!M86YY(&QI;FMS``!B<F]K
  73140. +M96X@<&EP90!M871H(&%R9W5M96YT`')E<W5L="!T;V\@;&%R9V4``$DO3R!S
  73141. +M=')E86T@96UP='D``&9I;&4@;F%M92!T;V\@;&]N9P``9&ER96-T;W)Y(&YO
  73142. +M="!E;7!T>0!T;V\@;6%N>2!S;V9T(&QI;FMS("AL;V]P/RD`````&@```"@`
  73143. +M```R````3````%P```!T````?@```)@```"P````P@```-(```#D````]@``
  73144. +M`0@```$:```!)@```3P```%0```!7````6X```%^```!C@```9X```&P```!
  73145. +MQ````=@```'J```!^@```@@```(@```"+@```D0```)4```"8````FX```*`
  73146. +M```"D@```J8```*Z````)@`````#[````"@````!```#;@```VH```-F```#
  73147. +M8@```UX```-:```#5@```U(```-.```#2@```T8```-"```#/@```SH```,V
  73148. +M```#,@```RX```,J```#)@```R(```,>```#&@```Q8```,2```##@```PH`
  73149. +M``,&```#`@```OX```+Z```"]@```O(```+N```"Z@```N8```+B```"W@``
  73150. +M`MH```+6````%@````````/R```#Z0```$4@+P`$*4```$J`9P``AG)GD(%G
  73151. +M``""58!G``"`<@F0@6=\4X!G>%.`9W13@&=P4X!G;%.`9VA3@&=H4X!G:')1
  73152. +MD(%G9E.`9V93@&=F4X!G9E.`9V93@&=F58!G9E.`9V93@&=F4X!G9E6`9V93
  73153. +M@&=F4X!G9E.`9V93@&=F4X!G9E6`9V93@&=F4X!G9E.`9V9@:'``8&9P#&!B
  73154. +M<`M@7G`68%IP!V!6<`A@4G`08$YP$6!*<`)@1G`"8$)P%F`^<`=@.G`68#9P
  73155. +M)&`R<!9@+G`68"IP'F`F<!)@(G`E8!YP)F`:<!-@%G`68!)P'&`.<`U@"G`-
  73156. +M8`9P#6`"</].=2\.+&P``$ZN_WQA`/[Z*4```"Q?3G4```/X`````0````$`
  73157. +M``$.`````````^^&```"7U]/4T524@`````!````!H8```)?1$]30F%S90``
  73158. +M``$```$"`````````_$````#`````$]05%,`!`!````#\@```^L````!```#
  73159. +M\@```^D````%3KH``$ZZ``!.N@``<@9.^@````````/O@P```T!C:&MA8F]R
  73160. +M=`````````$````"@P```T!?8VQO<V5?86QL``````$````&@P```D!G971P
  73161. +M:60``````0````J#```"0&MI;&P````````!````$`````````/Q`````P``
  73162. +M``!/4%13``0``````_(```/I````62!O``0@+P`(64](YP$6+@`O2``0(&\`
  73163. +M$"I08&1P#;`M``AF6B`M`*QG!N6`($!@`I'()D@@+0"<L(=G-"`M`*"PAV<L
  73164. +M("T`X+"'9R0@"V<N("L`'+"'9Q@@*P`@L(=G$"`K`#BPAV<(("L`,+"'9@XB
  73165. +M37!@[X@L>``$3J[^O"I52I5FF$S?:(!83TYU("\`!"(O``A(YP$"+@`@`5.`
  73166. +M9PQ3@&<(4X!G!%V`9BPL>``$3J[_?"!L``#0_`&6(`=A`/]((&P``-#\`:0@
  73167. +M!V$`_SI.KO]V<`!@"'`6*4```'#_3-]`@$YU("\`!"(O``A(YP8$+`$J`$ZZ
  73168. +M``!*A6H"1(6ZK```9@Y*AF<&(`9.N@``<`!@2"`%3KH``"I`2H!G!DJM`!1G
  73169. +M"G`#*4```'#_8"P@!F<H(BT`$,%!80#_6"(`<`F\@&84<@$K00`4*T``&'`4
  73170. +M3KH``'``8`(@`4S?(&!.=0`````#[X8```)?4WES0F%S90````(```#$````
  73171. +MMH8```)?97)R;F\```````(```$J````W(,```-`8VAK86)O<G0````````!
  73172. +M````^(8```-?7V]U<E]P:60````````!```!`H,```1`7W-I9U]D:7-P871C
  73173. +M:````````@```50```$.@P```T!?9FEN9%]P:60```````$```$8````````
  73174. +M`_$````#`````$]05%,`!`!````#\@```^D```!#(&\`!$CG``8J2")-+'@`
  73175. +M!$ZN_P0@34S?8`!.^@``("\`!$CG`00N`"IL``A@#B`M``RPAV8$(`U@""I5
  73176. +M2I5F[G``3-\@@$YU2.<@`D'L``A.N@``("P``"(L```D`+."`H(`?___*4(`
  73177. +M!%*"*4(``"\!+P!(;```2&P`%$ZZ``!/[P`0+'@`!$ZN_68I0``X9Q!![``4
  73178. +M<`!.N@``*4``-&8*2&P`#DZZ``!83TS?0`1.=4CG``8@+``X9PH@0"QX``1.
  73179. +MKOU@2JP`-&<X+'@`!$ZN_WQ@#")-<!PL>``$3J[_+B!L`#0L>``$3J[^C"I`
  73180. +M2H!FXB!L`#1.N@``+'@`!$ZN_W9,WV``3G4``````_@````"`````0```*0`
  73181. +M``!V````#`````(```#V````Y````,@```"X````G@```)0```".````>@``
  73182. +M`&X```!H````3@```"H````````#[X,```)`9G)E90````````$````<@P``
  73183. +M`D!.97=,:7-T`````0```%*&```!7U]U<P````$```!6A@``!%]?<W1A<G1U
  73184. +M<%]T:6UE```````!````6H,```-?7W-P<FEN=&8````````!````?H,```-`
  73185. +M0W)E871E4&]R=``````!````FH,```)?7V9A:6P```````$```"H@P```T!$
  73186. +M96QE=&50;W)T``````$```#Z`````````_$````#`````$]05%,`!`!````#
  73187. +M\@```^H````&9&]O<BXE;'@N)6QX``!.;R!M96UO<GD````#\@```^L````/
  73188. +M```#\@```^D````O(&\`!"`O``@B+P`,(F\`$"]O`!0`!"]O`!@`"%E/2.</
  73189. +M-B@O`"PJ+P`H+`$N`"I)+T@`("QX``1.KOUF)D!*@&<P($L@!$ZN_7(D0$J`
  73190. +M9R(@#6<()4T`*"5%`"0@;P`@(`<B2B(&3J[^1$H`9@0@"F`6(`IG!B!*3J[]
  73191. +M;"`+9P8@2TZZ``!P`$S?;/!83TYU(&\`!$CG``8J2"`-9Q@B32QX``1.KOX^
  73192. +M(&T`#DZZ```@34ZN_6Q,WV``3G4```/O@P```T!$96QE=&50;W)T``````(`
  73193. +M``"N````A`````````/Q`````P````!/4%13``0``````_(```/I````%"!O
  73194. +M``0@+P`(2.<A!BX`*DA.N@``(@TL;```3J[_B$J`9R(B`$ZN_Z8@!TZZ```@
  73195. +M!TZZ```D`"(-3J[_1DJ`9P1P`&`&3KH``'#_3-]@A$YU```#[X,```-`8VAK
  73196. +M86)O<G0````````!````$H8```)?1$]30F%S90````$````8@P``!4!?;6%K
  73197. +M95]P<F]T96-T:6]N`````````@```#(````L@P```D!?<V5T97)R`````0``
  73198. +M`$8````````#\0````,`````3U!44P`$`$````/R```#^P``")D1/@!?<V5T
  73199. +M:FUP`'1E>'0`0%]L;VYG:FUP`$!?<V5T:FUP`%]?;&]N9VIM<`!?7W-E=&IM
  73200. +M<`!S<')I;G1F`%],5D]287=$;T9M=`!?06)S17AE8T)A<V4`7U]S<')I;G1F
  73201. +M`'1M<&YA;2YC`%]M:W1E;7``0'1M<&YA;0!?=&UP;F%M`%]?34521T5$`'!O
  73202. +M<&5N+F,`7W=A:71P:60`0&9C;&]S90!`9G)E90!`7W-T87)T7W!R;V-E<W,`
  73203. +M0%]S971E<G(`7V5R<FYO`%]$3U-"87-E`$!F;W!E;@!?7V9I9F]?8F%S90!?
  73204. +M7V9I9F]?;V9F<V5T`$!M86QL;V,`0'!C;&]S90!?<&-L;W-E`$!P;W!E;@!?
  73205. +M<&]P96X`<W1A<G0N8P!`8V]N=F5R=%]O<V5R<@!?7W!R;V-E<W-E<P!?7W-T
  73206. +M86-K7W-I>F4`7U]N97AT7W!I9`!?7V1O;W)?;F%M90!?7W-T87)T=7!?<&]R
  73207. +M=`!?3&EN:V5R1$(`7U]S=&%R=%]P<F]C97-S`%]?8VAI;&1?9&]O<E]N86UE
  73208. +M`%]?8VAI;&1?8V]M;6%N9%]L96X`7U]C:&EL9%]C;VUM86YD`%]?8VAI;&1?
  73209. +M97AI=`!?7V-H:6QD7V5N=')Y`&=E='!I9"YC`%]?;W5R7W!I9`!`8VAK86)O
  73210. +M<G0`0&=E='!I9`!?9V5T<&ED`'-I9VYA;"YC`%]?<VEG7VAA;F1L97)S`$!S
  73211. +M:6=N86P`7W-I9VYA;`!`<VEG=F5C`%]S:6=V96,`<VEG<V5T;6%S:RYC`$!?
  73212. +M<VEG7V1I<W!A=&-H`%]?<VEG7W!E;F1I;F<`7U]S:6=?;6%S:P!`<VEG8FQO
  73213. +M8VL`7W-I9V)L;V-K`$!S:6=S971M87-K`%]S:6=S971M87-K`'-T870N8P!?
  73214. +M<F5A9&QI;FL`0%]F:6)S=&%T`$!?;&9I8G-T870`7U]T96UP7V9N86UE`%]L
  73215. +M87-T7V5N=')Y`$!?9V5T7V-D`%]L87-T7V1I<@!`;'-T870`7VQS=&%T`$!S
  73216. +M=&%T`%]S=&%T`&1I<BYC`$!S965K9&ER`%]S965K9&ER`$!T96QL9&ER`%]T
  73217. +M96QL9&ER`$!R96%D9&ER`%]R96%D9&ER`$!C;&]S961I<@!?8VQO<V5D:7(`
  73218. +M0&]P96YD:7(`7V]P96YD:7(`9&ER7V1A=&$N8P!?7V=E=%]C9`!A8V-E<W,N
  73219. +M8P!`86-C97-S`%]A8V-E<W,`0%]?86-C97-S`%]?7V%C8V5S<P!F<W1A="YC
  73220. +M`%]I;V-T;`!`9G-T870`7V9S=&%T`'-Y;6QI;FLN8P!`<WEM;&EN:P!?<WEM
  73221. +M;&EN:P!M97-S86=E+F,`0&5X:70`7U]0<F]G<F%M3F%M90!?7U="96YC:$US
  73222. +M9P!?7W5S`%]?9F%I;`!?7VUE<W-A9V4`86QL;V-D;W,N8P!?06QL;V-$;W-/
  73223. +M8FIE8W1486=S`'-E=&IM<"YC`$!L;VYG:FUP`%]L;VYG:FUP`$!S971J;7``
  73224. +M9V5T:&]S=&YA;64N8P!?<W1R;F-P>0!?7W-Y<W1E;5]N86UE`$!G971H;W-T
  73225. +M;F%M90!?9V5T:&]S=&YA;64`<&5R<F]R+F,`7U]/4T524@!?<WES7V5R<FQI
  73226. +M<W0`7W-Y<U]N97)R`$!W<FET90!`<&5R<F]R`%]P97)R;W(`<VEG;&ES="YC
  73227. +M`%]S>7-?<VEG;&ES=`!W86ET-"YC`$!?:&%N9&QE7W-I9VYA;',`0%]W86ET
  73228. +M7W-I9VYA;',`0%]F<F5E7V5N=')Y`$!W86ET<&ED`$!W86ET`%]W86ET`$!W
  73229. +M86ET,P!?=V%I=#,`0'=A:70T`%]W86ET-`!P<V5U9&]?8RYC`$!?9G)E95]F
  73230. +M9`!`7V9I;F1?9F0`0%]P<V5U9&]?8VQO<V4`7U]P<V5U9&]?8VQO<V4`<FEN
  73231. +M9&5X+F,`0'-T<G)C:'(`0')I;F1E>`!?<FEN9&5X`&EN9&5X+F,`0'-T<F-H
  73232. +M<@!`:6YD97@`7VEN9&5X`'1I;65R<RYC`$!?9&5V:6-E7V-L;W-E`$!?9&5V
  73233. +M:6-E7V]P96X`0%]T:6UE<E]E>'!I<F5D`%]?=&EM97)?97AP:7)E9`!`7W1I
  73234. +M;65R7W-T87)T`%]?=&EM97)?<W1A<G0`0%]T:6UE<E]S:6<`7U]T:6UE<E]S
  73235. +M:6<`0%]T:6UE<E]A8F]R=`!?7W1I;65R7V%B;W)T`$!?9G)E95]T:6UE<@!?
  73236. +M7V9R965?=&EM97(`0%]A;&QO8U]T:6UE<@!?7V%L;&]C7W1I;65R`&9I9F]F
  73237. +M9"YC`%]?<W1A<G1U<%]T:6UE`$!?8VQE86YU<%]F:69O`%]?8VQE86YU<%]F
  73238. +M:69O`$!?:6YI=%]F:69O`%]?:6YI=%]F:69O`%]?9FEF;U]S:6<`7U]F:69O
  73239. +M7V]K`%]?1FEF;T)A<V4`8VQO<V4N8P!`8VQO<V4`7V-L;W-E`$!?7V-L;W-E
  73240. +M`%]?7V-L;W-E`&9I;&5S+F,`0%]L87-T7V9D`%]?;&%S=%]F9`!?7V9I;F1?
  73241. +M9F0`7U]F<F5E7V9D`$!?86QL;V-?9F0`7U]A;&QO8U]F9`!U=&EM92YC`$!?
  73242. +M9VUT,F%M:6=A`$!T:6UE`$!U=&EM90!?=71I;64`8F-O<'DN8P!`;65M;6]V
  73243. +M90!`8F-O<'D`7V)C;W!Y`&%M:6=A=&EM92YC`%]D87EL:6=H=`!?='IN86UE
  73244. +M`%]?0UA$,S,`0&QO8V%L=&EM90!`7V=E='1I;64`0&9T:6UE`%]F=&EM90!`
  73245. +M9V5T=&EM96]F9&%Y`%]G971T:6UE;V9D87D`=&EM96-O;G9E<G0N8P!?5&EM
  73246. +M97)"87-E`$!?86UI9V$R9VUT`%]?86UI9V$R9VUT`%]?9VUT,F%M:6=A`%]?
  73247. +M9V5T=&EM90!P=V0N8P!`9V5T;&]G:6X`7V=E=&QO9VEN`$!G971P=VYA;0!?
  73248. +M9V5T<'=N86T`0&=E='!W=6ED`%]G971P=W5I9`!?7V%M:6=A7W5S97(`<F5A
  73249. +M9&QI;FLN8P!?<W1R;&5N`$!R96%D;&EN:P!A;&QO8V$N8P!?;6%L;&]C`%]F
  73250. +M<F5E`%]A;&QO8V$`=6YL:6YK+F,`0'5N;&EN:P!?=6YL:6YK`'!I<&4N8P!`
  73251. +M<W1R8V%T`$!.97=,:7-T`$!S;V-K971P86ER`%]S;V-K971P86ER`$!P:7!E
  73252. +M`%]P:7!E`&=R<"YC`$!G971G<FYA;0!?9V5T9W)N86T`0&=E=&=R9VED`%]G
  73253. +M971G<F=I9`!S:6=N86QS+F,`7U]&4$524@!`7U]E>&ET`$!?9FEN9%]P:60`
  73254. +M0%]C;&5A;G5P7W!R;V-E<W-E<P!?7V-H:6QD<F5N7V5X:70`0%]I;FET7W!R
  73255. +M;V-E<W-E<P!`7V-L96%N=7!?<VEG;F%L<P!?7V-L96%N=7!?<VEG;F%L<P!`
  73256. +M7VEN:71?<VEG;F%L<P!?7VEN:71?<VEG;F%L<P!`0VAK7T%B;W)T`%]#:&M?
  73257. +M06)O<G0`7V-H:V%B;W)T`$!#6$9%4E(`7T-81D524@!?7VAA;F1L95]S:6=N
  73258. +M86QS`%]?=V%I=%]S:6=N86QS`$!?8VAE8VM?<VEG;F%L<P!?7V-H96-K7W-I
  73259. +M9VYA;',`7U]S:6=?9&ES<&%T8V@`0&%L87)M`%]A;&%R;0!?;6%I;BYC`$!M
  73260. +M86EN`$!?7V=E=&5N=@!`='%S;W)T`$!S=')N8W!Y`%]?7V-T>7!E`$!?:6YI
  73261. +M=%]U;FEX:6\`7U]?:6]B`%]?6$-%6$E4`%]3>7-"87-E`$!R96%L;&]C`%]?
  73262. +M7VUA:6X`0&UA:V5?96YV:7)O;@!?;6%K95]E;G9I<F]N`%]E;G9I<F]N`%]?
  73263. +M;V1D7W-I9P!?7V]D9%]T:6UE<@!U;6%S:RYC`$!U;6%S:P!?=6UA<VL`<')O
  73264. +M=&5C=&EO;BYC`$!?;6%K95]M;V1E`%]?;6%K95]M;V1E`$!?;6%K95]P<F]T
  73265. +M96-T:6]N`%]?;6%K95]P<F]T96-T:6]N`%]U<V5?86UI9V%?9FQA9W,`9VED
  73266. +M+F,`0&=E=&5G:60`7V=E=&5G:60`0&=E=&=I9`!?9V5T9VED`%]E>&ET+F,`
  73267. +M0%]E>&ET`%]?97AI=`!?7U]E>&ET`$!?8VQO<V5?86QL`%]?8VQO<V5?86QL
  73268. +M`&EO8W1L+F,`0&EO8W1L`&]P96XN8P!`7V%L;&]C7V%M:6=A9F0`0'-T<FEC
  73269. +M;7``7V]P96X`7U]?;W!E;@!C=&EM92YC`%]S<')I;G1F`$!R96%D`$!?='IS
  73270. +M970`7U]T>G-E=`!`;6MT:6UE`%]M:W1I;64`0&-T:6UE`%]C=&EM90!`87-C
  73271. +M=&EM90!?87-C=&EM90!`9VUT:6UE`%]G;71I;64`7VQO8V%L=&EM90!`='IS
  73272. +M971W86QL`%]T>G-E='=A;&P`0'1Z<V5T`%]T>G-E=`!?=&EM97IO;F4`86UI
  73273. +M9V%D;W,N8P!?7VEN:71?=6YI>&EO`%]?86QL;V-?86UI9V%F9`!`7V1O7W1R
  73274. +M=6YC871E`%]?9&]?=')U;F-A=&4`<F5N86UE+F,`0')E;F%M90!?<F5N86UE
  73275. +M`&-H;W=N+F,`0&9C:&]W;@!?9F-H;W=N`$!C:&]W;@!?8VAO=VX`8F-M<"YC
  73276. +M`$!B8VUP`%]B8VUP`&9I8G-T870N8P!?7V9I8G-T870`7U]L9FEB<W1A=`!B
  73277. +M>F5R;RYC`$!B>F5R;P!?8GIE<F\`9G1R=6YC871E+F,`0&9T<G5N8V%T90!?
  73278. +M9G1R=6YC871E`&9C:&UO9"YC`$!F8VAM;V0`7V9C:&UO9`!M:V9I9F\N8P!`
  73279. +M;6MN;V0`7VUK;F]D`$!M:V9I9F\`7VUK9FEF;P!I<V%T='DN8P!`:7-A='1Y
  73280. +M`%]I<V%T='D`<VEG<&%U<V4N8P!`<VEG<&%U<V4`7W-I9W!A=7-E`')M9&ER
  73281. +M+F,`0')M9&ER`%]R;61I<@!S=')F=&EM92YC`$!S=')F=&EM90!?<W1R9G1I
  73282. +M;64`=')U;F-A=&4N8P!`=')U;F-A=&4`7W1R=6YC871E`&5X96,N8P!`97AE
  73283. +M8P!?97AE8P!`965X96,`7V5E>&5C`'5I9"YC`$!G971E=6ED`%]G971E=6ED
  73284. +M`$!G971U:60`7V=E='5I9`!S;&5E<"YC`$!S;&5E<`!?<VQE97``8W)E870N
  73285. +M8P!`8W)E870`7V-R96%T`$!?7V-R96%T`%]?7V-R96%T`'=R:71E+F,`7W=R
  73286. +M:71E`$!?7W=R:71E`%]?7W=R:71E`'1I;64N8P!?=&EM90!G971E;G8N8P!?
  73287. +M7U]G971E;G8`;&EN:RYC`$!L:6YK`%]L:6YK`&UK=&5M<"YC`$!M:W1E;7``
  73288. +M9V5T=V0N8P!`9V5T8W=D`$!G971W9`!?9V5T=V0`8VAM;V0N8P!`8VAM;V0`
  73289. +M7V-H;6]D`&QS965K+F,`0&QS965K`%]L<V5E:P!`7U]L<V5E:P!?7U]L<V5E
  73290. +M:P!R96%D+F,`7W)E860`0%]?<F5A9`!?7U]R96%D`'-E;&5C="YC`$!S96QE
  73291. +M8W0`7W-E;&5C=`!F8VYT;"YC`%]F8VYT;`!E<G)O<E]M<V<N8P!E<G)O<BYC
  73292. +M`%]?<V5T97)R`%]C;VYV97)T7V]S97)R`&%B;W)T+F,`0&MI;&P`0&%B;W)T
  73293. +M`%]A8F]R=`!K:6QL+F,`7VMI;&P`<')O8V5S<V5S+F,`0$1E;&5T95!O<G0`
  73294. +M0$-R96%T95!O<G0`7U]C;&5A;G5P7W!R;V-E<W-E<P!?7VEN:71?<')O8V5S
  73295. +M<V5S`%]?9FEN9%]P:60`7U]F<F5E7V5N=')Y`&1E=FEC97,N8P!?7V1E=FEC
  73296. +M95]C;&]S90!?7V1E=FEC95]O<&5N`&UK9&ER+F,`0&UK9&ER`%]M:V1I<@``
  73297. +M`0````$`"0`)`^D````$``X`%@`!`!@`!``!`"$`#@`!`"L````!`#0`#``!
  73298. +M``D`#`/I``(`/`!)``$`5@````$`8``I``,`"0`*`^D``0!H``(`<0`$``$`
  73299. +M>0````$`@0`$`^H``````($`"0/K``````"*`%0``P`)`&\#Z0`,`)$`F@"B
  73300. +M`*@`N`#"`,D`T0!5`-D`Y0#R``0`^P%>``$!`P%:``$!"P`(``$!$@````$`
  73301. +M@0`%`^H``````($``0/K``````$9`2T``P`)`,4#Z0`+`*(`P@$@`3`!/`%)
  73302. +M`50`\@%@`,D!;P`"`*D`Y@`!`7D`M@`!`($`!@/J``````"!``H#ZP````4!
  73303. +MB0`D``$!FP`@``$!KP`<``$!OP`8``$!S`````$!V@)M``$`"0`#`^D``@'C
  73304. +M`>P``@'W`````0'_`````0('`H8``0`)`",#Z0`#`,("$`'L``0"'P!B``$"
  73305. +M)P!:``$"+P`,``$"-P````$"/P+&``$`"0`5`^D`!`)+`EL![`)I``0"=`!&
  73306. +M``$"?@!"``$"B``$``$"E`````$"H`,"``(`"0":`^D`"0*F`K`![`*Z`,D"
  73307. +MQ@+3`MX"Z``$`O(!U@`!`OD!S@`!`P`!G@`!`P8!E@`!`($`00/K``````,,
  73308. +M`_4``0`)`-`#Z0`)`M,"W@'L`,(!(`#)`/("Z`"B``H#$@,@``$#&P,8``$#
  73309. +M)`,(``$#+0,$``$#-@*0``$#/P*,``$#2`).``$#4@)*``$#7`%>``$#90%:
  73310. +M``$#;@48``(`"0`(`^D``0#)``("WP````$#>0````$`@0`"`^L````"`M,`
  73311. +M!``!`N@````!`X(%,@`!``D`&P/I``,`P@*P`>P`!`.+`&```0.3`%@``0.;
  73312. +M``@``0.E`````0.O!6@``0`)`$$#Z0`&`,(!(`*Z`,D#M@'L``(#O@`(``$#
  73313. +MQ0````$#S`77``$`"0`.`^D``P"X`,D![``"`]8`"``!`]\````!`^@%_P`"
  73314. +M``D`/@/I``4#\0/X`,D$!@02``($%P#B``$$'@#4``$`@0`/`^H`````!"@&
  73315. +MA@`!``D`!P/I``$`R0`!!#,````!!$<&G``!``D`#P/I``0`#0*'`!<":0`$
  73316. +M!%``'@`!!%D`%@`!!&(`!``!``$````!!&H&S``!``D`!P/I``($=P2!``($
  73317. +MCP`(``$$G`````$$J0;I``(`"0`I`^D`!@#)!+($N@3'`,($T``"!-@`!``!
  73318. +M!.`````!`($`"`/J``````3H!U(``@`)```#Z0``````@0#&`^H````!!/("
  73319. +MF``!!/\(1P`!``D`.@/I``4%!@47`,(%)@$P``@%-`#```$`D@"T``$%/0"F
  73320. +M``$%0P"B``$%20"2``$%4`"&``$%5P`0``$%7@````$%90BJ``$`"0`2`^D`
  73321. +M`P5O!7D![``"!80`!``!!9,````!!:((V``!``D``P/I``$%J@`"!;0`"``!
  73322. +M!;P````!!<0(Z@`!``D``P/I``$%RP`"!=0`"``!!=L````!!>((_``"``D`
  73323. +M30/I``(%Z@7Y``P&"`$$``$&&`$```$&*`#(``$&-@"\``$&1`"H``$&4`"D
  73324. +M``$&7`!^``$&:@!Z``$&>`!2``$&A0!.``$&D@````$&H`````$`@0`$`^H`
  73325. +M````!JX);0`#``D`'@/I``($$@:W``0&Q@!4``$&U0!4``$&Y`````$&\```
  73326. +M``$`@0`%`^H````!!OP````!`($`!`/K````!`<'``P``0#E``@``0#9``0`
  73327. +M`0<1`````0<<";H``0`)`!8#Z0`#!6\%>0'L``0')`!0``$'*P!,``$',@`$
  73328. +M``$'.P````$'1`GL``(`"0!B`^D``P"B`,(`\@`(!TP!@``!!U8!@``!!7H!
  73329. +M3``!!V`!2``!!7`!+``!!VH!*``!!W0`,``!!W\````!`($``@/K``````>*
  73330. +M"H```0`)`!H#Z0`%`+@`R0>1!YT![``"!Z0`"``!!ZL````!![(*OP`!``D`
  73331. +M!P/I``$'N0`"!\,`#``!!\H````!!]$*U0`"``D`4@/I``8'W0?G!^X']@@!
  73332. +M`>P`!`@,`0X``0@3`0H``0@:``@``0@H`````0"!``P#Z@`````(-@MU``$`
  73333. +M"0`P`^D``@?N"$0`!@A/`'@``0A;`'0``0>2`"@``0AG`"```0@"``0``0AS
  73334. +M`````0A]"[X``@`)``L#Z0````8(@P`D``$(C0`D``$(EP`6``$(H0`2``$(
  73335. +MJP`$``$(M0````$`@0`)`^H````!"+\`!``!",P+Z@`!``D`*@/I``8`P@$@
  73336. +M"-8`N`#)`>P``@C?``P``0*G`````0CI#$```P`)`"P#Z0`""/$(^0`!"0``
  73337. +M+@`!`($`!P/J``````"!``$#ZP`````)"`R=``$`"0`V`^D`!@$@`>P#M@=+
  73338. +M`,(`R0`""1$`9``!"1D`8``!"2$-`P`"``D"&@/I`!4%>0#9`.4'!P'L!6\'
  73339. +M<P#R`+@`50)+"2<%!@47`,D`P@"B!Q$)+P02!OP`!`DY!]0``0E%!\(``0E1
  73340. +M!S8``0E7!S(``0"!`!4#Z@`````)70_\``(`"0`)`^D````$"6,`%@`!"6T`
  73341. +M$@`!"7<`!``!"8$````!`($`"0/J``````F+$"<``P`)`*D#Z0`-"94$'0F<
  73342. +M":0)KPG$"=,&=P9#!!8&D08G!@<`%`GE`IH``0GW`IH``0H)`EP``0H8`EP`
  73343. +M`0HG`EH``0HR`EH``0'M`E(``0H]`E(``0I'`D0``0I/`D```04'`>H``0I7
  73344. +M`>8``048`=```0IH`<P``0IW`;8``0J'`;(``0),`0P``0J7`0@``0JF`"@`
  73345. +M`0JM`"0``0"!``H#Z@``````@0!$`^L````#`EL!"``!`FD!!``!`A``!``!
  73346. +M"K0170`#``D"'0/I`!4#\0J["+\*P0K+"M,*W00&"N4`R0H(!N,&0P:1"O0*
  73347. +M^@L$`*(+#`#R!!8``PL6`WH``0L>`'@``0LL`'@``0"!`"P#Z@``````@0`(
  73348. +M`^L````(!($`'``!"SH`&``!"$0`%``!`3P`$``!!K<`#``!"T,`"``!"TT`
  73349. +M!``!!!(````!"UD4>P`!``D`!`/I`````@MA``0``0MH`````0MO%(<``@`)
  73350. +M`#X#Z0````0+?`!^``$+B`!Z``$+E``$``$+I@````$`@0`!`^L````!"[@`
  73351. +M```!"\D4U@`!``D``@/I````!`O/``0``0O8``0``0OA`````0OI`````0OQ
  73352. +M%.```0`)`!4#Z0`'"OH&=PM-">0&Q0<J!TL`!@OY`$P``0P``$@``0F=`"8`
  73353. +M`0P'`"(``0P/`````0P;`````0PG%2H``0`)`!,#Z0`"!7D![``"#"\`#``!
  73354. +M`[<````!##854P`"``D`F`/I``H,/`"X`,(+DP2R`2``R0Q,`>P$$@`"#%8"
  73355. +M2``!#%P````!`($``@/J``````QD%D0``P`)!6@#Z0`*#&L*P0K3!^X*W0<C
  73356. +M#'0,50DG!<L`$`Q[%9(``0R#%9(``0R+%80``0R3%8```0R;$/0``0RB$/``
  73357. +M`0RI$)0``0RR$)```0R[#I@``0S##I0``0?W#C```0S+#BP``0S6#38``0SA
  73358. +M#38``0SL#,8``0SS#,8``0"!`$@#Z@````,'W0`8``$,^@`4``$'YP`,``$`
  73359. +M@03V`^L`````#00<K``"``D!G`/I``L$%@=S`/(![`"B`,(!(`4&"G8`N`#)
  73360. +M``8*Y@7L``$-#P7,``$,/056``$-'05(``$-+0+8``$-.P+0``$`@0`(`^H`
  73361. +M````#4D>O``!``D`)P/I``0`P@$@`,D![``"#5(`"``!#5H````!#6(?!``!
  73362. +M``D`#@/I````!`UJ`"H``0UR`!P``0UZ``P``0V!`````0V('QH``0`)`!`#
  73363. +MZ0````(-CP`,``$-E0````$-FQ\R``(`"0!U`^D`!@#"`2``R0M[`J8(3@`$
  73364. +M`K$!+@`!#:4!)@`!`KL`&``!#:\````!`($`0`/K`````0+&`````0VZ']P`
  73365. +M`0`)``4#Z0````(-P@`(``$-R0````$-T!_I``$`"0`,`^D``@.V`>P``@W<
  73366. +M``@``0WG`````0WR(`H``0`)``T#Z0`#`[8![`N3``(-^P`(``$.`P````$.
  73367. +M"R`T``$`"0`0`^D``0#"``0.%``L``$.&P`@``$.(@`,``$.*@````$.,B!4
  73368. +M``$`"0`-`^D``@.V`>P``@X[``0``0Y#`````0Y+('8``0`)``\#Z0`%`,(%
  73369. +M!@47"G8"AP`"#E8`!``!#F`````!#FH@L``!``D`*`/I``0!(`#"`+@`R0`"
  73370. +M#G(`!``!#GD````!#H`@^0`#``D!EP/I``(,B@?N``(.BP`2``$.E0````$`
  73371. +M@0!Y`^H``````($`"0/K``````Z?(WP``0`)`!8#Z0`%`,(!(`TL`>P`R0`"
  73372. +M#JH`"``!#K0````!#KXCN@`!``D`U0/I``H`P@$@`*(`J`L,!!(%@P.V`,D`
  73373. +M\@`$#L4#.``!#LL#'``!#M$`(@`!#M@````!#M\DW0`!``D``@/I````!`[E
  73374. +M``0``0[N``0``0[W`````0[_`````0\').<``0`)``X#Z0`'!@<%!@47"T,&
  73375. +M)PM-`>P``@\/``0``0\6`````0\=)2X``0`)``\#Z0`"#%4![``$#R4`,@`!
  73376. +M#RP`*@`!#S,`"``!#SP````!#T4E4@`!``D`(P/I``,`P@5Y`>P`!`31`((`
  73377. +M`0]-`'8``0]4``P``0]=`````0]F)9```0`)``P#Z0`!"`$``@>>``0``0]M
  73378. +M`````0]S):P``0`)`!T#Z0`#`/(`R0'L``(*P@`$``$/?`````$/AB7C``$`
  73379. +M"0`3`^D``P"X`>P`R0`"#XT`"``!#Y,````!#YDF$``"``D`)`/I``0#F@!5
  73380. +M!!(![``"#Z(`!``!`&D````!`($``@/J``````^J)F```0`)``8#Z0`"#[$!
  73381. +M[``"#[H`!``!#\$````!#\@F>P`!``D`#P/I``0`N`#)"Y,![``"#]``"``!
  73382. +M#]<````!#]XFK``!``D`'`/I``(%>0'L``0/Y@!<``$/[0!.``$/]``.``$/
  73383. +M_0````$0!B;>``$`"0`<`^D``P#"!7D![``$#'4`9``!$`T`6``!$!,`#``!
  73384. +M$!L````!$",G%0`!``D`@0/I``L&!P4&!1<+0PIV!EL&)PM-`,(%>0'L``(0
  73385. +M+``8``$0-`````$0/"?K``$`"0`@`^D``P#"!7D![``!$$0````!$$LH)@`"
  73386. +M``D```/I``````"!`-X#Z@````($QP-R``$$N@+6``$05RD[``(`"0!%`^D`
  73387. +M`@#)!+(`!`"Y`/X``1!?`/X``0$A``0``1!H`````0"!``$#ZP````$`P@``
  73388. +M``$0=RF<``$`"0`%`^D`!!!^`?8,#@'L``(0A0````$0C`````$0DRG!``$`
  73389. +M"0!9`^D`!@FD`DL!XP'L`,(+!``"$'\`[@`!$)H`Y@`!$*`J2@`#``D`0P/I
  73390. +M``@0JP06$+<`50:W!!()+P"B``@)L`"R``$0Q`"R``$)U`!(``$0V`!(``$)
  73391. +MI0`B``$0Z0`>``$%)P`$``$0]`````$`@0`&`^H``````($`#P/K````!@%@
  73392. +M`#@``0G$`#0``0%4`!0``0$P``@``0'C``0``0%)`````1$!*N,``0`)`"\#
  73393. +MZ0`!$*L`!`7K`)0``1$+`)```07Z`!P``1$:`````1$H*R,``0`)`!0#Z0`$
  73394. +6`+@+DP#)`>P``A$P``@``1$W`````1P`
  73395. +`
  73396. +end
  73397. diff -ru --new-file baseline/fsf/emacs/unixlib/src/unlink.c amiga/fsf/emacs/unixlib/src/unlink.c
  73398. --- baseline/fsf/emacs/unixlib/src/unlink.c    Wed Dec 31 17:00:00 1969
  73399. +++ amiga/fsf/emacs/unixlib/src/unlink.c    Sun Oct 15 17:18:39 1995
  73400. @@ -0,0 +1,40 @@
  73401. +#include "amiga.h"
  73402. +#include "files.h"
  73403. +#include <amiga/ioctl.h>
  73404. +
  73405. +static int delete_open_file(char *name)
  73406. +{
  73407. +  BPTR nlock = Lock(name, SHARED_LOCK);
  73408. +
  73409. +  if (nlock)
  73410. +    {
  73411. +      int err = errno, i;
  73412. +
  73413. +      i = _last_fd();
  73414. +      while (--i >= 0)
  73415. +    if (ioctl(i, _AMIGA_DELETE_IF_ME, &nlock) == 0)
  73416. +      {
  73417. +        errno = err;
  73418. +        return 0;
  73419. +      } 
  73420. +      UnLock(nlock);
  73421. +   }
  73422. +  return -1;
  73423. +}
  73424. +
  73425. +int unlink(const char *file)
  73426. +{
  73427. +  long err;
  73428. +
  73429. +  chkabort();
  73430. +  if (DeleteFile(file)) return 0;
  73431. +  err = IoErr();
  73432. +  if (err == ERROR_DELETE_PROTECTED)
  73433. +    {
  73434. +      if (SetProtection(file, 0) && DeleteFile(file)) return 0;
  73435. +      err = IoErr();
  73436. +    }
  73437. +  if (err == ERROR_OBJECT_IN_USE && delete_open_file(file) == 0) return 0;
  73438. +  errno = convert_oserr(err);
  73439. +  return -1;
  73440. +}
  73441. diff -ru --new-file baseline/fsf/emacs/unixlib/src/utime.c amiga/fsf/emacs/unixlib/src/utime.c
  73442. --- baseline/fsf/emacs/unixlib/src/utime.c    Wed Dec 31 17:00:00 1969
  73443. +++ amiga/fsf/emacs/unixlib/src/utime.c    Sun Oct 15 17:18:41 1995
  73444. @@ -0,0 +1,22 @@
  73445. +#include "amiga.h"
  73446. +#include "timeconvert.h"
  73447. +#include <stdlib.h>
  73448. +#include <time.h>
  73449. +#include <utime.h>
  73450. +
  73451. +int utime(char *file, struct utimbuf *times)
  73452. +{
  73453. +  struct DateStamp date;
  73454. +  time_t mtime;
  73455. +
  73456. +  chkabort();
  73457. +  if (times) mtime = times->modtime;
  73458. +  else mtime = time(0);
  73459. +
  73460. +  if (mtime == -1) return 0;
  73461. +
  73462. +  _gmt2amiga(mtime, &date);
  73463. +
  73464. +  if (SetFileDate(file, &date)) return 0;
  73465. +  ERROR;
  73466. +}
  73467. diff -ru --new-file baseline/fsf/emacs/unixlib/src/wait4.c amiga/fsf/emacs/unixlib/src/wait4.c
  73468. --- baseline/fsf/emacs/unixlib/src/wait4.c    Wed Dec 31 17:00:00 1969
  73469. +++ amiga/fsf/emacs/unixlib/src/wait4.c    Sun Oct 15 17:18:42 1995
  73470. @@ -0,0 +1,57 @@
  73471. +#include "amiga.h"
  73472. +#include "signals.h"
  73473. +#include "processes.h"
  73474. +#include <sys/wait.h>
  73475. +
  73476. +int wait4(int pid, int *statusp, int options, struct rusage *rusage)
  73477. +{
  73478. +  struct process *p;
  73479. +
  73480. +  do {
  73481. +    int seen = FALSE;
  73482. +
  73483. +    scan_processes(p)
  73484. +      if (pid == 0 || p->pid == pid)
  73485. +    {
  73486. +      seen = TRUE;
  73487. +
  73488. +      if (p->status == exited)
  73489. +        {
  73490. +          int pid = p->pid;
  73491. +
  73492. +          if (statusp) *statusp = p->rc;
  73493. +          _free_entry(p);
  73494. +
  73495. +          return pid;
  73496. +        }
  73497. +    }
  73498. +    if (options & WNOHANG) return 0;
  73499. +    if (!seen)
  73500. +      {
  73501. +    errno = ECHILD;
  73502. +    return -1;
  73503. +      }
  73504. +    _handle_signals(_wait_signals(0));
  73505. +  } while (1);
  73506. +}
  73507. +
  73508. +int wait3(int *statusp, int options, struct rusage *rusage)
  73509. +{
  73510. +  return wait4(0, statusp, options, rusage);
  73511. +}
  73512. +
  73513. +int wait(int *statusp)
  73514. +{
  73515. +  return wait4(0, statusp, 0, NULL);
  73516. +}
  73517. +
  73518. +int waitpid(int pid, int *statusp, int options)
  73519. +{
  73520. +  /* We have no process groups, so : 
  73521. +       Our process group encompasses all our children
  73522. +       Each child is a process group unto itself
  73523. +     This is somewhat contradictory ... Should this be changed ? */
  73524. +  if (pid == -1) pid = 0;
  73525. +  if (pid < 0) pid = -pid;
  73526. +  return wait4(pid, statusp, options, NULL);
  73527. +}
  73528. diff -ru --new-file baseline/fsf/emacs/unixlib/src/write.c amiga/fsf/emacs/unixlib/src/write.c
  73529. --- baseline/fsf/emacs/unixlib/src/write.c    Wed Dec 31 17:00:00 1969
  73530. +++ amiga/fsf/emacs/unixlib/src/write.c    Sun Oct 15 17:18:44 1995
  73531. @@ -0,0 +1,29 @@
  73532. +#include "amiga.h"
  73533. +#include "files.h"
  73534. +#include <fcntl.h>
  73535. +#include <unistd.h>
  73536. +
  73537. +#undef write
  73538. +
  73539. +int __write(int fd, const void *buffer, unsigned int length)
  73540. +{
  73541. +  struct fileinfo *fi;
  73542. +
  73543. +  chkabort();
  73544. +  if (fi = _find_fd(fd))
  73545. +    {
  73546. +      if (fi->flags & FI_WRITE)
  73547. +    {
  73548. +      if (fi->flags & O_APPEND) fi->lseek(fi->userinfo, 0, SEEK_END);
  73549. +      return fi->write(fi->userinfo, buffer, length);
  73550. +    }
  73551. +      errno = EACCES;
  73552. +    }
  73553. +  return -1;
  73554. +}
  73555. +
  73556. +int write(int fd, const void *buffer, unsigned int length)
  73557. +{
  73558. +  return __write(fd, buffer, length);
  73559. +}
  73560. +
  73561. diff -ru --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/africa amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/africa
  73562. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/africa    Wed Dec 31 17:00:00 1969
  73563. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/africa    Sun Oct 15 17:19:31 1995
  73564. @@ -0,0 +1,43 @@
  73565. +# @(#)africa    4.3
  73566. +
  73567. +###############################################################################
  73568. +
  73569. +# Egypt
  73570. +
  73571. +# From Bob Devine (January 28, 1988):
  73572. +# Egypt: DST from first day of May to first of October (ending may
  73573. +# also be on Sept 30th not 31st -- you might want to ask one of the
  73574. +# soc.* groups, you might hit someone who could ask an embassy).
  73575. +# DST since 1960 except for 1981-82.
  73576. +
  73577. +# From U. S. Naval Observatory (January 19, 1989):
  73578. +# EGYPT               2 H  AHEAD OF UTC
  73579. +# EGYPT               3 H  AHEAD OF UTC  MAY 17 - SEP 30 (AFTER
  73580. +# EGYPT                                  RAMADAN)
  73581. +
  73582. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  73583. +Rule    Egypt    1960    max    -    May    1    2:00    1:00    " DST"
  73584. +Rule    Egypt    1960    max    -    Oct    1    2:00    0    -
  73585. +
  73586. +# Zone    NAME    GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  73587. +Zone    Egypt    2:00    Egypt        EET%s    1981
  73588. +        2:00    -        EET    1983
  73589. +        2:00    Egypt        EET%s
  73590. +
  73591. +###############################################################################
  73592. +
  73593. +# Libya
  73594. +
  73595. +# From Bob Devine (January 28 1988):
  73596. +# Libya: Since 1982 April 1st to September 30th (?)
  73597. +
  73598. +# From U. S. Naval Observatory (January 19, 1989):
  73599. +# LIBYAN ARAB         1 H  AHEAD OF UTC  JAMAHIRIYA/LIBYA
  73600. +# LIBYAN ARAB         2 H  AHEAD OF UTC  APR 1 - SEP 30 JAMAHIRIYA/LIBYA
  73601. +
  73602. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  73603. +Rule    Libya    1982    max    -    Apr    1    2:00    1:00    " DST"
  73604. +Rule    Libya    1982    max    -    Sep    30    2:00    0    -
  73605. +
  73606. +# Zone    NAME    GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  73607. +Zone    Libya    2:00    Libya        EET%s
  73608. diff -ru --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/antarctica amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/antarctica
  73609. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/antarctica    Wed Dec 31 17:00:00 1969
  73610. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/antarctica    Sun Oct 15 17:19:33 1995
  73611. @@ -0,0 +1,4 @@
  73612. +# @(#)antarctica    4.1
  73613. +
  73614. +# From Arthur David Olson (February 13, 1988):
  73615. +# No data available.
  73616. diff -ru --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/asia amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/asia
  73617. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/asia    Wed Dec 31 17:00:00 1969
  73618. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/asia    Sun Oct 15 17:19:35 1995
  73619. @@ -0,0 +1,262 @@
  73620. +# @(#)asia    7.1
  73621. +
  73622. +# From Guy Harris:
  73623. +# Incorporates data for Singapore from Robert Elz' asia 1.1, as well as
  73624. +# additional information from Tom Yap, Sun Microsystems Intercontinental
  73625. +# Technical Support (including a page from the Official Airline Guide -
  73626. +# Worldwide Edition).  The names for time zones are guesses.
  73627. +
  73628. +###############################################################################
  73629. +
  73630. +# People's Republic of China
  73631. +
  73632. +# From Guy Harris:
  73633. +# People's Republic of China.  Yes, they really have only one time zone.
  73634. +
  73635. +# From Bob Devine (January 28, 1988):
  73636. +# No they don't.  See TIME mag, February 17, 1986 p.52.  Even though
  73637. +# China is across 4 physical time zones, before Feb 1, 1986 only the
  73638. +# Peking (Bejing) time zone was recognized.  Since that date, China
  73639. +# has two of 'em -- Peking's and Urumqi (named after the capital of
  73640. +# the Xinjiang Uighur Autonomous Region).  I don't know about DST for it.
  73641. +#
  73642. +# . . .I just deleted the DST table and this editor makes it too
  73643. +# painful to suck in another copy..  So, here is what I have for
  73644. +# DST start/end dates for Peking's time zone (info from AP):
  73645. +#
  73646. +#     1986 May 4 - Sept 14
  73647. +#     1987 mid-April - ??
  73648. +
  73649. +# From U. S. Naval Observatory (January 19, 1989):
  73650. +# CHINA               8 H  AHEAD OF UTC  ALL OF CHINA, INCL TAIWAN
  73651. +# CHINA               9 H  AHEAD OF UTC  APR 17 - SEP 10
  73652. +
  73653. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  73654. +Rule    PRC    1970    max    -    Apr    Sun<=14    2:00    1:00    D
  73655. +Rule    PRC    1970    max    -    Sep    Sun<=14    3:00    0    S
  73656. +
  73657. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  73658. +Zone    PRC        8:00    PRC        C%sT
  73659. +
  73660. +###############################################################################
  73661. +
  73662. +# Republic of China
  73663. +
  73664. +# From Guy Harris
  73665. +
  73666. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  73667. +Zone    ROC        8:00    -        CST
  73668. +
  73669. +###############################################################################
  73670. +
  73671. +# Hongkong
  73672. +
  73673. +# From Guy Harris
  73674. +
  73675. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  73676. +Zone    Hongkong    8:00    -        HKT
  73677. +
  73678. +###############################################################################
  73679. +
  73680. +# Iran
  73681. +
  73682. +# From Bob Devine (January 28, 1988):
  73683. +# Iran: Last Sunday in March to third (?) Sunday in
  73684. +# September.  Since the revolution, the official calendar is Monarchic
  73685. +# calendar; I have no idea what the correspondence between dates are.
  73686. +
  73687. +# From U. S. Naval Observatory (January 19, 1989):
  73688. +# IRAN                3.5H AHEAD OF UTC
  73689. +
  73690. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  73691. +Rule    Iran    1988    max    -    Mar    lastSun    2:00    1:00    D
  73692. +Rule    Iran    1988    max    -    Sep    Sun>=15    2:00    0    S
  73693. +
  73694. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  73695. +Zone    Iran        3:30    Iran        I%sT
  73696. +
  73697. +###############################################################################
  73698. +
  73699. +# Israel
  73700. +
  73701. +# From U. S. Naval Observatory (January 19, 1989):
  73702. +# ISRAEL              2 H  AHEAD OF UTC
  73703. +# ISRAEL              3 H  AHEAD OF UTC  APR 10 - SEP 3
  73704. +
  73705. +# From Ephraim Silverberg (April 18, 1989):
  73706. +
  73707. +# Prior to 1989, the rules concerning Daylight Savings Time changed every
  73708. +# year; as information, regarding exact times and dates during this period,
  73709. +# is not readily available at the present time, the rules commence starting
  73710. +# with the year 1989.
  73711. +
  73712. +# From 1989 onwards the rules are as follows:
  73713. +#
  73714. +# 1. Daylight Savings Time commences midnight of the first Saturday night
  73715. +#    following the seven-day festival of Pesach (Passover).  The transition
  73716. +#    is from midnight Israel Standard Time to 1 a.m. Israel Daylight Savings
  73717. +#    time.  As the Pesach festival is dependent on the Lunar calendar (the
  73718. +#    first day is always on the 15th day of the month of Nisan), the rule
  73719. +#    changes every year on the Gregorian calendar.
  73720. +#
  73721. +# 2. Standard Time is reinstated on the Saturday night whereupon Jews
  73722. +#    following the Ashkenazi (European) rite begin to recite the Selichot
  73723. +#    (forgiveness) prayers prior to the Jewish Lunar New Year.  The transition
  73724. +#    is from midnight Israel Daylight Savings time to 11 p.m. Israel Standard
  73725. +#    Time.  The law (according to the Ashkenazi custom) concerning the
  73726. +#    commencement of the Selichot prayers is described in chapter 128, section
  73727. +#    5 of the "Code of Jewish Law," by Rabbi Shlomo Ganzfried (translated by
  73728. +#    Hyman E. Goldin):
  73729. +#
  73730. +#       Beginning with the Sunday [**] before Rosh Hashanah [***],
  73731. +#       we rise early for the service of Selichot (supplications for
  73732. +#       forgiveness).  If Rosh Hashanah occurs on Monday or Tuesday, we
  73733. +#       begin saying the Selichot from the Sunday of the preceding week.
  73734. +#
  73735. +#    This, too, varies from year to year on the Gregorian calendar and, thus,
  73736. +#    two explicit timezone rules are required for each Gregorian year.
  73737. +#
  73738. +#    [**] actually Saturday night as the Jewish day commences at nightfall.
  73739. +#    [***] the Jewish Lunar New Year.
  73740. +
  73741. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  73742. +Rule    Zion    1989    only    -    Apr    30    0:00    1:00    D
  73743. +Rule    Zion    1989    only    -    Sep    24    0:00    0:00    S
  73744. +Rule    Zion    1990    only    -    Apr    22    0:00    1:00    D
  73745. +Rule    Zion    1990    only    -    Sep    16    0:00    0:00    S
  73746. +Rule    Zion    1991    only    -    Apr     7    0:00    1:00    D
  73747. +Rule    Zion    1991    only    -    Sep     1    0:00    0:00    S
  73748. +Rule    Zion    1992    only    -    Apr    26    0:00    1:00    D
  73749. +Rule    Zion    1992    only    -    Sep    20    0:00    0:00    S
  73750. +Rule    Zion    1993    only    -    Apr    18    0:00    1:00    D
  73751. +Rule    Zion    1993    only    -    Sep    12    0:00    0:00    S
  73752. +Rule    Zion    1994    only    -    Apr     3    0:00    1:00    D
  73753. +Rule    Zion    1994    only    -    Aug    28    0:00    0:00    S
  73754. +Rule    Zion    1995    only    -    Apr    23    0:00    1:00    D
  73755. +Rule    Zion    1995    only    -    Sep    17    0:00    0:00    S
  73756. +Rule    Zion    1996    only    -    Apr    14    0:00    1:00    D
  73757. +Rule    Zion    1996    only    -    Sep     8    0:00    0:00    S
  73758. +Rule    Zion    1997    only    -    May     4    0:00    1:00    D
  73759. +Rule    Zion    1997    only    -    Sep    28    0:00    0:00    S
  73760. +Rule    Zion    1998    only    -    Apr    19    0:00    1:00    D
  73761. +Rule    Zion    1998    only    -    Sep    13    0:00    0:00    S
  73762. +Rule    Zion    1999    only    -    Apr    11    0:00    1:00    D
  73763. +Rule    Zion    1999    only    -    Sep     5    0:00    0:00    S
  73764. +Rule    Zion    2000    only    -    Apr    30    0:00    1:00    D
  73765. +Rule    Zion    2000    only    -    Sep    24    0:00    0:00    S
  73766. +Rule    Zion    2001    only    -    Apr    15    0:00    1:00    D
  73767. +Rule    Zion    2001    only    -    Sep     9    0:00    0:00    S
  73768. +Rule    Zion    2002    only    -    Apr     7    0:00    1:00    D
  73769. +Rule    Zion    2002    only    -    Sep     1    0:00    0:00    S
  73770. +Rule    Zion    2003    only    -    Apr    27    0:00    1:00    D
  73771. +Rule    Zion    2003    only    -    Sep    21    0:00    0:00    S
  73772. +Rule    Zion    2004    only    -    Apr    18    0:00    1:00    D
  73773. +Rule    Zion    2004    only    -    Sep    12    0:00    0:00    S
  73774. +Rule    Zion    2005    only    -    May     1    0:00    1:00    D
  73775. +Rule    Zion    2005    only    -    Sep    25    0:00    0:00    S
  73776. +Rule    Zion    2006    only    -    Apr    23    0:00    1:00    D
  73777. +Rule    Zion    2006    only    -    Sep    17    0:00    0:00    S
  73778. +Rule    Zion    2007    only    -    Apr    15    0:00    1:00    D
  73779. +Rule    Zion    2007    only    -    Sep     9    0:00    0:00    S
  73780. +Rule    Zion    2008    only    -    Apr    27    0:00    1:00    D
  73781. +Rule    Zion    2008    only    -    Sep    21    0:00    0:00    S
  73782. +Rule    Zion    2009    only    -    Apr    19    0:00    1:00    D
  73783. +Rule    Zion    2009    only    -    Sep    13    0:00    0:00    S
  73784. +
  73785. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  73786. +Zone    Israel        2:00    Zion        I%sT
  73787. +
  73788. +# The following is a chart of the day of the week and Gregorian date of
  73789. +# the first day of Pesach and the first day of Rosh Hashanah for the years
  73790. +# 1989 through 2009 inclusive.
  73791. +#
  73792. +# First Day of Passover
  73793. +# ---------------------
  73794. +# Gregorian Year    Day of Week    Month        Day
  73795. +# --------------    -----------    -----        ---
  73796. +#    1989        Thursday    April        20
  73797. +#    1990        Tuesday        April        10
  73798. +#    1991        Saturday    March        30
  73799. +#    1992        Saturday    April        18
  73800. +#    1993        Tuesday        April         6
  73801. +#    1994        Sunday        March        27
  73802. +#    1995        Saturday    April        15
  73803. +#    1996        Thursday    April         4
  73804. +#    1997        Tuesday        April        22
  73805. +#    1998        Saturday    April        11
  73806. +#    1999        Thursday    April         1
  73807. +#    2000        Thursday    April        20
  73808. +#    2001        Sunday        April         8
  73809. +#    2002        Thursday    March        28
  73810. +#    2003        Thursday    April        17
  73811. +#    2004        Tuesday        April         6
  73812. +#    2005        Sunday        April        24
  73813. +#    2006        Thursday    April        13
  73814. +#    2007        Tuesday        April         3
  73815. +#    2008        Sunday        April        20
  73816. +#    2009        Thursday    April         9
  73817. +#
  73818. +# First Day of Rosh Hashanah
  73819. +# --------------------------
  73820. +# Gregorian Year    Day of Week    Month        Day
  73821. +# --------------    -----------    -----        ---
  73822. +#    1989        Saturday    September    30
  73823. +#    1990        Thursday    September    20
  73824. +#    1991        Monday        September     9
  73825. +#    1992        Monday        September    28
  73826. +#    1993        Thursday    September    16
  73827. +#    1994        Tuesday        September     6
  73828. +#    1995        Monday        September    25
  73829. +#    1996        Saturday    September    14
  73830. +#    1997        Thursday    October         2
  73831. +#    1998        Monday        September    21
  73832. +#    1999        Saturday    September    11
  73833. +#    2000        Saturday    September    30
  73834. +#    2001        Tuesday        September    18
  73835. +#    2002        Saturday    September     7
  73836. +#    2003        Saturday    September    27
  73837. +#    2004        Thursday    September    16
  73838. +#    2005        Tuesday        October         4
  73839. +#    2006        Saturday    September    23
  73840. +#    2007        Thursday    September    13
  73841. +#    2008        Tuesday        September    30
  73842. +#    2009        Saturday    September    19
  73843. +
  73844. +###############################################################################
  73845. +
  73846. +# Japan
  73847. +
  73848. +# From Guy Harris
  73849. +
  73850. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  73851. +Zone    Japan        9:00    -        JST
  73852. +
  73853. +###############################################################################
  73854. +
  73855. +# Republic of Korea
  73856. +
  73857. +# From Guy Harris:
  73858. +# According to someone at the Korean Times in San Francisco,
  73859. +# Daylight Savings Time was not observed until 1987.  He did not know
  73860. +# at what time of day DST starts or ends.
  73861. +
  73862. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  73863. +Rule    ROK    1987    max    -    May    Sun<=14    2:00    1:00    D
  73864. +Rule    ROK    1987    max    -    Oct    Sun<=14    3:00    0    S
  73865. +
  73866. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  73867. +Zone    ROK        9:00    ROK        K%sT
  73868. +
  73869. +###############################################################################
  73870. +
  73871. +# Lebanon
  73872. +
  73873. +# From Bob Devine (January 28, 1988):
  73874. +# Lebanon: They do have DST but I don't know the dates.
  73875. +
  73876. +###############################################################################
  73877. +
  73878. +# Singapore
  73879. +
  73880. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  73881. +Zone    Singapore    8:00    -        SST
  73882. diff -ru --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/australasia amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/australasia
  73883. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/australasia    Wed Dec 31 17:00:00 1969
  73884. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/australasia    Sun Oct 15 17:19:36 1995
  73885. @@ -0,0 +1,113 @@
  73886. +# @(#)australasia    4.4
  73887. +
  73888. +# Incorporates updates for Australia from Robert Elz' australia 1.1
  73889. +# and further updates from the Australian consulate.
  73890. +
  73891. +###############################################################################
  73892. +
  73893. +# Australia
  73894. +
  73895. +# Australian Data (for states with DST), standard rules
  73896. +# Includes shift in 1987 to follow Vic/NSW rules for ending DST,
  73897. +# and shift in 1986 to start DST earlier.
  73898. +
  73899. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  73900. +Rule    Oz    1971    1985    -    Oct    lastSun    2:00    1:00    -
  73901. +Rule    Oz    1986    max    -    Oct    Sun<=24    2:00    1:00    -
  73902. +Rule    Oz    1972    only    -    Feb    27    3:00    0    -
  73903. +Rule    Oz    1973    1986    -    Mar    Sun>=1    3:00    0    -
  73904. +Rule    Oz    1987    max    -    Mar    Sun<=21    3:00    0    -
  73905. +
  73906. +# Zone    NAME            GMTOFF    RULES    FORMAT    [UNTIL]
  73907. +Zone    Australia/Tasmania    10:00    Oz    EST
  73908. +Zone    Australia/Queensland    10:00    -    EST    # No DST here
  73909. +Zone    Australia/North        9:30    -    CST    # No DST here
  73910. +Zone    Australia/West        8:00    -    WST    # No DST here
  73911. +Zone    Australia/South        9:30    Oz    CST
  73912. +
  73913. +# Victoria jumped to a later ending date for DST in 1986 rather than 1987.
  73914. +
  73915. +Zone    Australia/Victoria    10:00    Oz    EST    1985 Oct lastSun 2:00
  73916. +                10:00    1:00    EST    1986 Mar Sun<=21 3:00
  73917. +                10:00    Oz    EST
  73918. +
  73919. +# New South Wales and subjurisdictions have their own ideas of a fun time.
  73920. +# Based on law library research by John Mackin (john@basser.cs.su.oz),
  73921. +# who notes:
  73922. +#    In Australia, time is not legislated federally, but rather by the
  73923. +#    individual states.  Thus, while such terms as ``Eastern Standard Time''
  73924. +#    [I mean, of course, Australian EST, not any other kind] are in common
  73925. +#    use, _they have NO REAL MEANING_, as they are not defined in the
  73926. +#    legislation.  This is very important to understand. 
  73927. +#    I have researched New South Wales time only; . . .I hope that perhaps a
  73928. +#    resident of each state could be found to do it for their own state. 
  73929. +#    (And I can guarantee that Victoria and NSW are different, so the link
  73930. +#    between them in the current australasia file must be broken.)
  73931. +
  73932. +# From Robert Elz (May 5, 1989):
  73933. +#
  73934. +# From next year (1990) NSW will revert to ending DST on the 1st
  73935. +# Sunday in March (rather than the third, which it appears will
  73936. +# continue to be what everyone else uses).
  73937. +
  73938. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  73939. +Rule    NSW    1971    1985    -    Oct    lastSun    2:00    1:00    -
  73940. +Rule    NSW    1972    only    -    Feb    lastSun    3:00    0    -
  73941. +Rule    NSW    1973    1981    -    Mar    Sun>=1    3:00    0    -
  73942. +Rule    NSW    1982    only    -    Apr    4    3:00    0    -
  73943. +Rule    NSW    1983    1985    -    Mar    Sun>=1    3:00    0    -
  73944. +Rule    NSW    1986    only    -    Mar    16    3:00    0    -
  73945. +Rule    NSW    1986    only    -    Oct    19    2:00    1:00    -
  73946. +Rule    NSW    1987    only    -    Mar    15    3:00    0    -
  73947. +Rule    NSW    1987    max    -    Oct    lastSun    2:00    1:00    -
  73948. +Rule    NSW    1988    1989    -    Mar    Sun<=21    3:00    0    -
  73949. +Rule    NSW    1990    max    -    Mar    Sun>=1    3:00    0    -
  73950. +
  73951. +# Zone    NAME            GMTOFF    RULES    FORMAT    [UNTIL]
  73952. +Zone    Australia/NSW        10:00    NSW    EST
  73953. +# `Broken Hill' means the County of Yancowinna. [john@basser.cs.su.oz.au,1/4/89]
  73954. +Zone    Australia/Yancowinna    9:30    NSW    ???
  73955. +Zone    Australia/LHI        10:30    NSW    ???
  73956. +
  73957. +# A footnote here:
  73958. +#
  73959. +#    . . .
  73960. +#    Date: Thu, j19 Feb 87 12:02:17 EST
  73961. +#    From: Bradley White <seismo!k.cs.cmu.edu!bww>
  73962. +#    . . .
  73963. +#    I am including a description of Australian time zones. . .
  73964. +#    this stuff is definitely accurate.
  73965. +#    . . .
  73966. +#    a) Australian Eastern Time: (EST = GMT+10:00, EDT = GMT+11:00)
  73967. +#    . . .
  73968. +#    Summer of 86/87 - present (current legislation):
  73969. +#        third Sun Oct 02:00 EST -> third [S]un Mar 02:00 EST
  73970. +#
  73971. +# If this turns out to be true, substitute Sun<=21 (third Sunday in October)
  73972. +# for Sun<=24 (next-to-last Sunday in October) above. . .some time before
  73973. +# October 1988, the first time it makes a difference.
  73974. +
  73975. +###############################################################################
  73976. +
  73977. +# New Zealand
  73978. +
  73979. +# New Zealand, from Elz' asia 1.1
  73980. +# Elz says "no guarantees"
  73981. +# The 1989/90 rule may only last a year.  It is a trial that is
  73982. +# subject to Ministerial approval to be made permanent.
  73983. +# The termination of "daylight saving" may actually be second
  73984. +# to last Sunday in March.  Noone spoken to was very sure.
  73985. +
  73986. +# From U. S. Naval Observatory (January 19, 1989):
  73987. +# NEW ZEALAND        12 H  AHEAD OF UTC  (EXCLUDING CHATHAM ISLAND)
  73988. +# NEW ZEALAND        13 H  AHEAD OF UTC  OCT 30, '88-MAR 4, '89
  73989. +# NEW ZEALAND       12H45M AHEAD OF UTC  CHATHAM ISLAND
  73990. +
  73991. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  73992. +Rule    NZ    1974    1988    -    Oct    lastSun    2:00    1:00    D
  73993. +Rule    NZ    1989    max    -    Oct    Sun>=8    2:00    1:00    D
  73994. +Rule    NZ    1975    1989    -    Mar    Sun>=1    3:00    0    S
  73995. +Rule    NZ    1990    max    -    Mar    Sun>=15    3:00    0    S
  73996. +
  73997. +# Zone    NAME            GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  73998. +Zone    NZ            12:00    NZ        NZ%sT    # New Zealand
  73999. diff -ru --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/etcetera amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/etcetera
  74000. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/etcetera    Wed Dec 31 17:00:00 1969
  74001. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/etcetera    Sun Oct 15 17:19:38 1995
  74002. @@ -0,0 +1,55 @@
  74003. +# @(#)etcetera    4.4
  74004. +
  74005. +# All of these are set up just so people can "zic -l" to a timezone
  74006. +# that's right for their area, even if it doesn't have a name or dst rules
  74007. +# (half hour zones are too much to bother with -- when someone asks!)
  74008. +
  74009. +Zone    GMT        0    -    GMT
  74010. +
  74011. +Zone    GMT-12        -12    -    GMT-1200
  74012. +Zone    GMT-11        -11    -    GMT-1100
  74013. +Zone    GMT-10        -10    -    GMT-1000
  74014. +Zone    GMT-9        -9    -    GMT-0900
  74015. +Zone    GMT-8        -8    -    GMT-0800
  74016. +Zone    GMT-7        -7    -    GMT-0700
  74017. +Zone    GMT-6        -6    -    GMT-0600
  74018. +Zone    GMT-5        -5    -    GMT-0500
  74019. +Zone    GMT-4        -4    -    GMT-0400
  74020. +Zone    GMT-3        -3    -    GMT-0300
  74021. +Zone    GMT-2        -2    -    GMT-0200
  74022. +Zone    GMT-1        -1    -    GMT-0100
  74023. +Zone    GMT+1        1    -    GMT+0100
  74024. +Zone    GMT+2        2    -    GMT+0200
  74025. +Zone    GMT+3        3    -    GMT+0300
  74026. +Zone    GMT+4        4    -    GMT+0400
  74027. +Zone    GMT+5        5    -    GMT+0500
  74028. +Zone    GMT+6        6    -    GMT+0600
  74029. +Zone    GMT+7        7    -    GMT+0700
  74030. +Zone    GMT+8        8    -    GMT+0800
  74031. +Zone    GMT+9        9    -    GMT+0900
  74032. +Zone    GMT+10        10    -    GMT+1000
  74033. +Zone    GMT+11        11    -    GMT+1100
  74034. +Zone    GMT+12        12    -    GMT+1200
  74035. +Zone    GMT+13        13    -    GMT+1300    # GMT+12 with DST
  74036. +
  74037. +Link    GMT        UTC
  74038. +Link    GMT        UCT
  74039. +Link    GMT        Universal
  74040. +Link    GMT        Greenwich
  74041. +Link    GMT        Zulu
  74042. +Link    GMT        GMT-0
  74043. +Link    GMT        GMT+0
  74044. +Link    GMT        GMT0
  74045. +Link    GMT+1        GMT1
  74046. +Link    GMT+2        GMT2
  74047. +Link    GMT+3        GMT3
  74048. +Link    GMT+4        GMT4
  74049. +Link    GMT+5        GMT5
  74050. +Link    GMT+6        GMT6
  74051. +Link    GMT+7        GMT7
  74052. +Link    GMT+8        GMT8
  74053. +Link    GMT+9        GMT9
  74054. +Link    GMT+10        GMT10
  74055. +Link    GMT+11        GMT11
  74056. +Link    GMT+12        GMT12
  74057. +Link    GMT+13        GMT13
  74058. diff -ru --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/europe amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/europe
  74059. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/europe    Wed Dec 31 17:00:00 1969
  74060. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/europe    Sun Oct 15 17:19:40 1995
  74061. @@ -0,0 +1,224 @@
  74062. +# @(#)europe    4.10
  74063. +
  74064. +# International country codes are used to identify countries' rules and
  74065. +# zones
  74066. +#
  74067. +# This data is by no means authoritative; if you think you know better, go
  74068. +# ahead and edit the file (and please send any changes to
  74069. +# ado@ncifcrf.gov for general use in the future).
  74070. +
  74071. +###############################################################################
  74072. +
  74073. +# United Kingdom
  74074. +
  74075. +# From Arthur David Olson (January 19, 1989):
  74076. +#
  74077. +# The starting and ending dates below (from which the rules are derived)
  74078. +# are from Whitaker's Almanack for 1987, page 146.
  74079. +# 1960 is the earliest year for which dates are given;
  74080. +# Whitaker's notes that British Summer Time (and, in some years, Double Summer
  74081. +# Time) was observed in earlier years but does not give start and end dates.
  74082. +#
  74083. +# A source at the British Information Office in New York avers that it's
  74084. +# known as "British" Summer Time in all parts of the United Kingdom.
  74085. +#    1960    April 10    October 2 (yes, 2, according to the almanac)
  74086. +#    1961    March 26    October 29
  74087. +#    1962    March 25    October 28
  74088. +#    1963    March 31    October 27
  74089. +#    1964    March 22    October 25
  74090. +#    1965    March 21    October 24
  74091. +#    1966    March 20    October 23
  74092. +#    1967    March 19    October 29
  74093. +#    1968    February 18    October 27
  74094. +# "British Standard Time, also one hour ahead of G. M. T., was kept between
  74095. +# 1968 Oct. 27-1971 Oct. 31."
  74096. +#    1972    March 19    October 29
  74097. +#    1973    March 18    October 28
  74098. +#    1974    March 17    October 27
  74099. +#    1975    March 16    October 26
  74100. +#    1976    March 21    October 24
  74101. +#    1977    March 20    October 23
  74102. +#    1978    March 19    October 29
  74103. +#    1979    March 18    October 28
  74104. +#    1980    March 16    October 26
  74105. +#    1981    March 29    October 25
  74106. +#    1982    March 28    October 24
  74107. +#    1983    March 27    October 23
  74108. +#    1984    March 25    October 28
  74109. +#    1985    March 31    October 27
  74110. +#    1986    March 30    October 26
  74111. +#    1987    March 29    October 25
  74112. +
  74113. +# From an Anonymous U. K. Donor (January 4, 1989):
  74114. +#
  74115. +# It is NOT possible to predict when [British Summer Time] will change
  74116. +# in a future year.
  74117. +# 
  74118. +# (The admiralty calculate when they think it should be (no more that a couple
  74119. +# of years in advance) and advise the government who then decide whether or 
  74120. +# not they will take the admiralty's advice)
  74121. +# 
  74122. +# ...the Gre[e]nwich...observatory...[was] very helpful.
  74123. +# 
  74124. +# I was not able to track down the Admiralty formula (I tried hard but failed)
  74125. +
  74126. +# ...
  74127. +# Date: 4 Jan 89 08:57:25 GMT (Wed)
  74128. +# From: Jonathan Leffler <nih-csl!uunet!mcvax!sphinx.co.uk!john>
  74129. +# ...
  74130. +# [British Summer Time] is fixed annually by Act of Parliament.
  74131. +# If you can predict what Parliament will do, you should be in
  74132. +# politics making a fortune, not computing.
  74133. +#
  74134. +# Summer time ends on Sunday 29 October 1989.
  74135. +
  74136. +# ...
  74137. +# Date: 5 Jan 89 09:50:38 GMT (Thu)
  74138. +# From: Peter Kendell <nih-csl!uunet!mcvax!tcom.stc.co.uk!pete>
  74139. +# ...
  74140. +# 
  74141. +# From my Collins Diary for 1989 - 
  74142. +# 
  74143. +# "At the time of going to press the Home Office was unable to confirm
  74144. +# the 1989 starting and finishing dates for BST*, but expressed the 
  74145. +# view that 26 March and 29 October were the likeliest dates to be
  74146. +# adopted"
  74147. +# 
  74148. +# *British Summer Time.
  74149. +
  74150. +# From an Anonymous U. K. Donor (January 5, 1989):
  74151. +#
  74152. +# . . .our government is seriously considering applying Double Summer Time -
  74153. +# putting the clocks forwards and back TWO hours for daylight saving time.
  74154. +# This is advocated to standardise time in the EEC - we're all supposed to
  74155. +# keep the same time and to change the clocks on the same dates in the future.
  74156. +
  74157. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  74158. +# Historic starting rules
  74159. +Rule    GB-Eire    1960    only    -    Apr    10    1:00s    1:00    BST
  74160. +Rule    GB-Eire    1961    1963    -    Mar    lastSun    1:00s    1:00    BST
  74161. +Rule    GB-Eire    1964    1967    -    Mar    Sun>=19    1:00s    1:00    BST
  74162. +Rule    GB-Eire    1968    only    -    Feb    18    1:00s    1:00    BST
  74163. +Rule    GB-Eire    1972    1980    -    Mar    Sun>=16    1:00s    1:00    BST
  74164. +# Historic ending rules
  74165. +Rule    GB-Eire    1960    only    -    Oct    2    1:00s    0    GMT
  74166. +Rule    GB-Eire    1961    1967    -    Oct    Sun>=23    1:00s    0    GMT
  74167. +Rule    GB-Eire    1971    only    -    Oct    31    1:00s    0    GMT
  74168. +# Current rules
  74169. +Rule    GB-Eire    1981    max    -    Mar    lastSun    1:00s    1:00    BST
  74170. +Rule    GB-Eire    1972    max    -    Oct    Sun>=23    1:00s    0    GMT
  74171. +
  74172. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  74173. +Zone    GB-Eire        0:00    GB-Eire        %s    1968 Oct 27 1:00s
  74174. +            1:00    -        BST    1971 Oct 31 1:00s
  74175. +            0:00    GB-Eire        %s
  74176. +
  74177. +###############################################################################
  74178. +
  74179. +# Continental Europe
  74180. +
  74181. +# The use of 1986 as starting years below is conservative.
  74182. +
  74183. +Rule    W-Eur    1986    max    -    Mar    lastSun    1:00s    1:00    " DST"
  74184. +Rule    W-Eur    1986    max    -    Sep    lastSun    1:00s    0    -
  74185. +
  74186. +Rule    M-Eur    1986    max    -    Mar    lastSun    2:00s    1:00    " DST"
  74187. +Rule    M-Eur    1986    max    -    Sep    lastSun    2:00s    0    -
  74188. +
  74189. +Rule    E-Eur    1986    max    -    Mar    lastSun    3:00s    1:00    " DST"
  74190. +Rule    E-Eur    1986    max    -    Sep    lastSun    3:00s    0    -
  74191. +
  74192. +Rule    Turkey    1986    max    -    Mar    lastSun    1:00    1:00    " DST"
  74193. +Rule    Turkey    1986    max    -    Sep    lastSun    1:00    0    -
  74194. +
  74195. +Rule    W-SU    1986    max    -    Mar    lastSun    2:00s    1:00    " DST"
  74196. +Rule    W-SU    1986    max    -    Sep    lastSun    2:00s    0    -
  74197. +
  74198. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  74199. +Zone    WET        0:00    W-Eur        WET%s
  74200. +Zone    Iceland        0:00    -        WET
  74201. +Zone    MET        1:00    M-Eur        MET%s
  74202. +Zone    Poland        1:00    W-Eur        MET%s
  74203. +Zone    EET        2:00    E-Eur        EET%s
  74204. +Zone    Turkey        3:00    Turkey        EET%s
  74205. +Zone    W-SU        3:00    M-Eur        ????
  74206. +
  74207. +# Tom Hoffman says that MET is also known as Central European Time
  74208. +
  74209. +Link    MET    CET
  74210. +
  74211. +###############################################################################
  74212. +
  74213. +# One source shows that Bulgaria, Cyprus, Finland, and Greece observe DST from
  74214. +# the last Sunday in March to the last Sunday in September in 1986.
  74215. +# The source shows Romania changing a day later than everybody else.
  74216. +#
  74217. +# According to Bernard Sieloff's source, Poland is in the MET time zone but
  74218. +# uses the WE DST rules.  The Western USSR uses EET+1 and ME DST rules.
  74219. +# Bernard Sieloff's source claims Romania switches on the same day, but at
  74220. +# 00:00 standard time (i.e., 01:00 DST).  It also claims that Turkey
  74221. +# switches on the same day, but switches on at 01:00 standard time
  74222. +# and off at 00:00 standard time (i.e., 01:00 DST)
  74223. +
  74224. +# ...
  74225. +# Date: Wed, 28 Jan 87 16:56:27 -0100
  74226. +# From: seismo!mcvax!cgcha!wtho (Tom Hofmann)
  74227. +# Message-Id: <8701281556.AA22174@cgcha.uucp>
  74228. +# ...
  74229. +# 
  74230. +# ...the European time rules are...standardized since 1981, when
  74231. +# most European coun[tr]ies started DST.  Before that year, only
  74232. +# a few countries (UK, France, Italy) had DST, each according
  74233. +# to own national rules.  In 1981, however, DST started on
  74234. +# 'Apr firstSun', and not on 'Mar lastSun' as in the following
  74235. +# years...
  74236. +# But also since 1981 there are some more national exceptions 
  74237. +# than listed in 'europe': Switzerland, for example, joined DST 
  74238. +# one year later, Denmark ended DST on 'Oct 1' instead of 'Sep 
  74239. +# lastSun' in 1981---I don't know how they handle now.
  74240. +# 
  74241. +# Finally, DST ist always from 'Apr 1' to 'Oct 1' in the
  74242. +# Soviet Union (as far as I know).  
  74243. +# 
  74244. +# Tom Hofmann, Scientific Computer Center, CIBA-GEIGY AG,
  74245. +# 4002 Basle, Switzerland
  74246. +# UUCP: ...!mcvax!cernvax!cgcha!wtho
  74247. +
  74248. +# ...
  74249. +# Date: Wed, 4 Feb 87 22:35:22 +0100
  74250. +# From: seismo!mcvax!cwi.nl!dik (Dik T. Winter)
  74251. +# ...
  74252. +# 
  74253. +# The information from Tom Hofmann is (as far as I know) not entirely correct.
  74254. +# After a request from chongo at amdahl I tried to retrieve all information
  74255. +# about DST in Europe.  I was able to find all from about 1969.
  74256. +# 
  74257. +# ...standardization on DST in Europe started in about 1977 with switches on
  74258. +# first Sunday in April and last Sunday in September...
  74259. +# In 1981 UK joined Europe insofar that
  74260. +# the starting day for both shifted to last Sunday in March.  And from 1982
  74261. +# the whole of Europe used DST, with switch dates April 1 and October 1 in
  74262. +# the Sov[i]et Union.  In 1985 the SU reverted to standard Europe[a]n switch
  74263. +# dates...
  74264. +# 
  74265. +# It should also be remembered that time-zones are not constants; e.g.
  74266. +# Portugal switched in 1976 from MET (or CET) to WET with DST...
  74267. +# Note also that though there were rules for switch dates not
  74268. +# all countries abided to these dates, and many individual deviations
  74269. +# occurred, though not since 1982 I believe.  Another note: it is always
  74270. +# assumed that DST is 1 hour ahead of normal time, this need not be the
  74271. +# case; at least in the Netherlands there have been times when DST was 2 hours
  74272. +# in advance of normal time.
  74273. +# 
  74274. +# ...
  74275. +# dik t. winter, cwi, amsterdam, nederland
  74276. +# INTERNET   : dik@cwi.nl
  74277. +# BITNET/EARN: dik@mcvax
  74278. +
  74279. +# From Bob Devine (January 28, 1988):
  74280. +# ...
  74281. +# Greece: Last Sunday in April to last Sunday in September (iffy on dates).
  74282. +# Since 1978.  Change at midnight.
  74283. +# ...
  74284. +# Monaco: has same DST as France.
  74285. +# ...
  74286. diff -ru --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/factory amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/factory
  74287. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/factory    Wed Dec 31 17:00:00 1969
  74288. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/factory    Sun Oct 15 17:19:43 1995
  74289. @@ -0,0 +1,8 @@
  74290. +# @(#)factory    1.1
  74291. +
  74292. +# For companies who don't want to put time zone specification in
  74293. +# their installation procedures.  When users run date, they'll get the message.
  74294. +# Also useful for the "comp.sources" version.
  74295. +
  74296. +# Zone    NAME    GMTOFF    RULES    FORMAT
  74297. +Zone    Factory    0    - "Local time zone must be set--see zic manual page"
  74298. diff -ru --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/leapseconds amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/leapseconds
  74299. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/leapseconds    Wed Dec 31 17:00:00 1969
  74300. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/leapseconds    Sun Oct 15 17:19:45 1995
  74301. @@ -0,0 +1,28 @@
  74302. +# @(#)leapseconds    4.1
  74303. +
  74304. +# Allowance for leapseconds added to each timezone file.
  74305. +
  74306. +# The correction (+ or -) is made at the given time, so lines
  74307. +# will typically look like:
  74308. +#    Leap    YEAR    MON    DAY    23:59:60    +    R/S
  74309. +# or
  74310. +#    Leap    YEAR    MON    DAY    23:59:59    -    R/S
  74311. +
  74312. +# If the leapsecond is Rolling (R) the given time is local time
  74313. +# If the leapsecond is Stationary (S) the given time is GMT
  74314. +
  74315. +# Leap    YEAR    MONTH    DAY    HH:MM:SS    CORR    R/S
  74316. +Leap    1972    Jun    30    23:59:60    +    S
  74317. +Leap    1972    Dec    31    23:59:60    +    S
  74318. +Leap    1973    Dec    31    23:59:60    +    S
  74319. +Leap    1974    Dec    31    23:59:60    +    S
  74320. +Leap    1975    Dec    31    23:59:60    +    S
  74321. +Leap    1976    Dec    31    23:59:60    +    S
  74322. +Leap    1977    Dec    31    23:59:60    +    S
  74323. +Leap    1978    Dec    31    23:59:60    +    S
  74324. +Leap    1979    Dec    31    23:59:60    +    S
  74325. +Leap    1981    Jun    30    23:59:60    +    S
  74326. +Leap    1982    Jun    30    23:59:60    +    S
  74327. +Leap    1983    Jun    30    23:59:60    +    S
  74328. +Leap    1985    Jun    30    23:59:60    +    S
  74329. +Leap    1987    Dec    31    23:59:60    +    S
  74330. diff -ru --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/northamerica amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/northamerica
  74331. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/northamerica    Wed Dec 31 17:00:00 1969
  74332. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/northamerica    Sun Oct 15 17:19:46 1995
  74333. @@ -0,0 +1,321 @@
  74334. +# @(#)northamerica    4.8
  74335. +
  74336. +###############################################################################
  74337. +
  74338. +# United States
  74339. +
  74340. +# From Arthur David Olson:
  74341. +# US Daylight Saving Time ended on the last Sunday of *October* in 1974.
  74342. +# See, for example, the front page of the Saturday, October 26, 1974
  74343. +# and Sunday, October 27, 1974 editions of the Washington Post.
  74344. +
  74345. +# From seismo!munnari!kre:
  74346. +# I recall also being told by someone once that Canada didn't have
  74347. +# the DST variations in 74/75 that the US did, but I am not nearly
  74348. +# sure enough of this to add anything.
  74349. +
  74350. +# From Arthur David Olson:
  74351. +# The above has been confirmed by Bob Devine; we'll go with it here.
  74352. +
  74353. +# From Arthur David Olson:
  74354. +# Before the Uniform Time Act of 1966 took effect in 1967, observance of
  74355. +# Daylight Saving Time in the US was by local option, except during wartime.
  74356. +
  74357. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  74358. +Rule    US    1918    1919    -    Mar    lastSun    2:00    1:00    D
  74359. +Rule    US    1918    1919    -    Oct    lastSun    2:00    0    S
  74360. +Rule    US    1942    only    -    Feb    9    2:00    1:00    W # War
  74361. +Rule    US    1945    only    -    Sep    30    2:00    0    S
  74362. +Rule    US    1967    max    -    Oct    lastSun    2:00    0    S
  74363. +Rule    US    1967    1973    -    Apr    lastSun    2:00    1:00    D
  74364. +Rule    US    1974    only    -    Jan    6    2:00    1:00    D
  74365. +Rule    US    1975    only    -    Feb    23    2:00    1:00    D
  74366. +Rule    US    1976    1986    -    Apr    lastSun    2:00    1:00    D
  74367. +Rule    US    1987    max    -    Apr    Sun>=1    2:00    1:00    D
  74368. +
  74369. +# From Bob Devine (January 28, 1988):
  74370. +# ...Alaska (and Hawaii) had the timezone names changed in 1967.
  74371. +#    old                         new
  74372. +#    Pacific Standard Time(PST)  -same-
  74373. +#    Yukon Standard Time(YST)    -same-
  74374. +#    Central Alaska S.T. (CAT)   Alaska-Hawaii St[an]dard Time (AHST)
  74375. +#    Nome Standard Time (NT)     Bering Standard Time (BST)
  74376. +# 
  74377. +# ...Alaska's timezone lines were redrawn in 1983 to give only 2 tz.
  74378. +#    The YST zone now covers nearly all of the state, AHST just part
  74379. +#    of the Aleutian islands.   No DST.
  74380. +
  74381. +# From U. S. Naval Observatory (January 19, 1989):
  74382. +# USA  EASTERN       5 H  BEHIND UTC    NEW YORK, WASHINGTON
  74383. +# USA  EASTERN       4 H  BEHIND UTC    APR 3 - OCT 30
  74384. +# USA  CENTRAL       6 H  BEHIND UTC    CHICAGO, HOUSTON
  74385. +# USA  CENTRAL       5 H  BEHIND UTC    APR 3 - OCT 30
  74386. +# USA  MOUNTAIN      7 H  BEHIND UTC    DENVER
  74387. +# USA  MOUNTAIN      6 H  BEHIND UTC    APR 3 - OCT 30
  74388. +# USA  PACIFIC       8 H  BEHIND UTC    L.A., SAN FRANCISCO
  74389. +# USA  PACIFIC       7 H  BEHIND UTC    APR 3 - OCT 30
  74390. +# USA  ALASKA STD    9 H  BEHIND UTC    MOST OF ALASKA     (AKST)
  74391. +# USA  ALASKA STD    8 H  BEHIND UTC    APR 3 - OCT 30 (AKDT)
  74392. +# USA  ALEUTIAN     10 H  BEHIND UTC    ISLANDS WEST OF 170W
  74393. +# USA  - " -         9 H  BEHIND UTC    APR 3 - OCT 30
  74394. +# USA  HAWAII       10 H  BEHIND UTC
  74395. +# USA  BERING       11 H  BEHIND UTC    SAMOA, MIDWAY
  74396. +
  74397. +# From Arthur David Olson (January 21, 1989):
  74398. +# The above dates are for 1988.
  74399. +# Note the "AKST" and "AKDT" abbreviations, the claim that there's
  74400. +# no DST in Samoa, and the claim that there is DST in Alaska and the
  74401. +# Aleutians.
  74402. +
  74403. +# From Arthur David Olson (February 13, 1988):
  74404. +# Legal standard time zone names, from United States Code (1982 Edition and
  74405. +# Supplement III), Title 15, Chapter 6, Section 260 and forward.  First, names
  74406. +# up to April 1, 1967 (when most provisions of the Uniform Time Act of 1966
  74407. +# took effect), as explained in sections 263 and 261:
  74408. +#    (none)
  74409. +#    United States standard eastern time
  74410. +#    United States standard mountain time
  74411. +#    United States standard central time
  74412. +#    United States standard Pacific time
  74413. +#    (none)
  74414. +#    United States standard Alaska time
  74415. +#    (none)
  74416. +# Next, names from April 1, 1967 until November 30, 1983 (the date for
  74417. +# public law 98-181):
  74418. +#    Atlantic standard time
  74419. +#    eastern standard time
  74420. +#    central standard time
  74421. +#    mountain standard time
  74422. +#    Pacific standard time
  74423. +#    Yukon standard time
  74424. +#    Alaska-Hawaii standard time
  74425. +#    Bering standard time
  74426. +# And after November 30, 1983:
  74427. +#    Atlantic standard time
  74428. +#    eastern standard time
  74429. +#    central standard time
  74430. +#    mountain standard time
  74431. +#    Pacific standard time
  74432. +#    Alaska standard time
  74433. +#    Hawaii-Aleutian standard time
  74434. +#    Samoa standard time
  74435. +# The law doesn't give abbreviations.
  74436. +
  74437. +# Easy stuff first--including Alaska, where we ignore history (since we
  74438. +# can't tell if we should give Yukon time or Alaska-Hawaii time for "old"
  74439. +# times).
  74440. +
  74441. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  74442. +Zone    US/Eastern    -5:00    US        E%sT
  74443. +Zone    US/Central    -6:00    US        C%sT
  74444. +Zone    US/Mountain    -7:00    US        M%sT
  74445. +Zone    US/Pacific    -8:00    US        P%sT
  74446. +Zone    US/Alaska    -9:00    US        AK%sT    # Abbreviation per USNO
  74447. +
  74448. +# Mainland US areas that are always Standard as of 1986.
  74449. +
  74450. +Zone    US/East-Indiana    -5:00    US        E%sT    1946
  74451. +            -5:00    -        EST    # Always EST as of 1986
  74452. +Zone    US/Arizona    -7:00    US        M%sT    1946
  74453. +            -7:00    -        MST    # Always MST as of 1986
  74454. +
  74455. +# From Arthur David Olson (February 13, 1988):
  74456. +# However. . .a writer from the Inter Tribal Council of Arizona, Inc.,
  74457. +# notes in private correspondence dated 12/28/87 that "Presently, only the
  74458. +# Navajo Nation participates in the Daylight Saving Time policy, due to its
  74459. +# large size and location in three states."  (The "only" means that other
  74460. +# tribal nations don't use DST.)
  74461. +
  74462. +Link    US/Mountain    Navajo
  74463. +
  74464. +# From Bob Devine (January 28, 1988):
  74465. +# Michigan didn't observe DST from 1968 to 1973.
  74466. +
  74467. +Zone    US/Michigan    -5:00    US        E%sT    1968
  74468. +            -5:00    -        EST    1973
  74469. +            -5:00    US        E%sT
  74470. +
  74471. +# Samoa just changes names.  No DST, per Naval Observatory.
  74472. +
  74473. +Zone    US/Samoa    -11:00    -        NST    1967 Apr 1  # N=Nome
  74474. +            -11:00    -        BST    1983 Nov 30 # B=Bering
  74475. +            -11:00    -        SST            # S=Samoa
  74476. +
  74477. +# Aleutian has a name change.  DST, per Naval Observatory.
  74478. +
  74479. +Zone    US/Aleutian    -10:00    US        AH%sT    1983 Nov 30
  74480. +            -10:00    US        HA%sT
  74481. +
  74482. +# From Arthur David Olson:
  74483. +# And then there's Hawaii.
  74484. +# DST was observed for one day in 1933;
  74485. +# Standard time was change by half an hour in 1947;
  74486. +# it's always standard as of 1986.
  74487. +
  74488. +Zone    US/Hawaii    -10:30    US    H%sT    1933 Apr 30 2:00
  74489. +            -10:30    1:00    HDT    1933 May 1 2:00
  74490. +            -10:30    US    H%sT    1947 Jun 8 2:00
  74491. +            -10:00    -    HST
  74492. +
  74493. +# Old names, for S5 users
  74494. +
  74495. +# Link    LINK-FROM    LINK-TO
  74496. +# Link    US/Eastern    EST5EDT
  74497. +# Link    US/Central    CST6CDT
  74498. +# Link    US/Mountain    MST7MDT
  74499. +# Link    US/Pacific    PST8PDT
  74500. +# Link    US/East-Indiana    EST
  74501. +# Link    US/Arizona    MST
  74502. +# Link    US/Hawaii    HST
  74503. +
  74504. +################################################################################
  74505. +
  74506. +# Canada
  74507. +
  74508. +# Canada is reportedly lots easier than the US--leastways since 1951.
  74509. +# I don't know what they did before then.
  74510. +# 4.3BSD claims that it's perfectly regular.
  74511. +# According to a posting in "comp.bugs.misc", "comp.unix.wizards", etc.
  74512. +# on February 8, 1987, by Dave Sherman of the Law Society of Upper Canada,
  74513. +# "...Canada (well, Ontario and at least some of the other provinces) are
  74514. +# adopting the new daylight savings time rules...".  We assume all of
  74515. +# Canada is doing so.
  74516. +
  74517. +# From Bob Devine (January 28, 1988):
  74518. +# All of Canada did have DST from your first rule except Saskatchewan.
  74519. +# Which parts did not observe DST is hard to pinpoint but most of the
  74520. +# province follows the rules.
  74521. +# NOTE: those that didn't have DST for that rule, also
  74522. +# probably did not have it for several years previous.
  74523. +
  74524. +# From U. S. Naval Observatory (January 19, 1989):
  74525. +# CANADA   NEW FDL    3.5H BEHIND UTC    ST.JOHN'S
  74526. +# CANADA   NEW FDL    1.5H BEHIND UTC    APR 3 - OCT 29
  74527. +# CANADA   ATLANTIC   4 H  BEHIND UTC    HALIFAX
  74528. +# CANADA   ATLANTIC   3 H  BEHIND UTC    APR 3 - OCT 29
  74529. +# CANADA   EASTERN    5 H  BEHIND UTC    TORONTO, MONTREAL, OTTAWA
  74530. +# CANADA   EASTERN    4 H  BEHIND UTC    APR 3 - OCT 29
  74531. +# CANADA   CENTRAL    6 H  BEHIND UTC    REGINA, WINNIPEG
  74532. +# CANADA   CENTRAL    5 H  BEHIND UTC    APR 3 - OCT 29
  74533. +# CANADA   MOUNTAIN   7 H  BEHIND UTC    CALGARY, EDMONTON
  74534. +# CANADA   MOUNTAIN   6 H  BEHIND UTC    APR 3 - OCT 29
  74535. +# CANADA   PACIFIC    8 H  BEHIND UTC    VANCOUVER
  74536. +# CANADA   PACIFIC    7 H  BEHIND UTC    APR 3 - OCT 29
  74537. +# CANADA   YUKON      SAME AS PACIFIC    DAWSON
  74538. +
  74539. +# From Arthur David Olson (January 21, 1989):
  74540. +# April 3 fell on a Sunday in 1988; October 29 fell on a Sunday in 1989.  Ahem.
  74541. +# Note claim that there's double DST in Newfoundland and that Yukon should
  74542. +# be same as Pacific.  Stick with rules posted in 1988 until more authoritative
  74543. +# information is available.
  74544. +
  74545. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  74546. +Rule    Canada    1969    max    -    Oct    lastSun    2:00    0    S
  74547. +Rule    Canada    1969    1986    -    Apr    lastSun    2:00    1:00    D
  74548. +Rule    Canada    1987    max    -    Apr    Sun>=1    2:00    1:00    D
  74549. +
  74550. +# Zone    NAME            GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  74551. +# Bob Devine says that DST *is* observed in Newfoundland
  74552. +Zone    Canada/Newfoundland    -3:30    Canada        N%sT
  74553. +Zone    Canada/Atlantic        -4:00    Canada        A%sT
  74554. +Zone    Canada/Eastern        -5:00    Canada        E%sT
  74555. +Zone    Canada/Central        -6:00    Canada        C%sT
  74556. +Zone    Canada/East-Saskatchewan    -6:00    -    CST # No DST as of 1987
  74557. +Zone    Canada/Mountain        -7:00    Canada        M%sT
  74558. +Zone    Canada/Pacific        -8:00    Canada        P%sT
  74559. +Zone    Canada/Yukon        -9:00    Canada        Y%sT
  74560. +
  74561. +###############################################################################
  74562. +
  74563. +# Mexico
  74564. +
  74565. +# From Guy Harris:
  74566. +# Rules are from the Official Airline Guide, Worldwide Edition, for 1987.
  74567. +# Rules prior to 1987 are unknown.
  74568. +# The comments in the OAG say "Only Ensenada, Mexicale, San Felipe and Tijuana
  74569. +# observe DST."  This is presumably Baja California Norte, above 28th parallel,
  74570. +# as listed there; Mexico/BajaSur is for "Baja California Sur and N. Pacific
  74571. +# Coast (States of Sinaloa and Sonora)."
  74572. +
  74573. +# From Bob Devine (January 28, 1988):
  74574. +# The Federal District (where Mexico City is) has observed [DST] several
  74575. +# times but not recently.
  74576. +# 
  74577. +# I don't where to drawn the line in the North Baja area.  28th latitude
  74578. +# sounds good -- but it may be higher (how far [d]o radio stations from
  74579. +# San Diego affect culture?).
  74580. +# 
  74581. +# The dates of DST probably go back to 1981.  The rules are the same as
  74582. +# US's.  This is going to be a headache for US presidential electi[o]n years!
  74583. +
  74584. +# From Arthur David Olson (February 13, 1988)
  74585. +# Since the 1981 starting date is only "probable," we'll keep the 1987
  74586. +# starting date below.
  74587. +
  74588. +# From U. S. Naval Observatory (January 19, 1989):
  74589. +# MEXICO BAJA CAL N   7 H  BEHIND UTC    BAJA CALIFORNIA SUR AND
  74590. +# MEXICO BAJA CAL N                      N. PACIFIC COAST (STATES
  74591. +# MEXICO BAJA CAL N                      OF SINALOA AND SONORA)
  74592. +# MEXICO BAJA CAL N   8 H  BEHIND UTC    ABOVE 28TH PARALLAL APR 3
  74593. +# MEXICO BAJA CAL N                      - OCT 29
  74594. +# MEXICO BAJA CAL N   7 H  BEHIND UTC    ABOVE 28TH PARALLAL APR 3
  74595. +# MEXICO BAJA CAL N                      - 0CT 29
  74596. +# MEXICO              6 H  BEHIND UTC    STATES OF DURANGO,
  74597. +# MEXICO                                 COAHUILA, NUEVO LEON,
  74598. +# MEXICO                                 TAMAULIPAS
  74599. +# MEXICO              5 H  BEHIND UTC    STATES OF DURANGO,
  74600. +# MEXICO                                 COAHUILA, NUEVO LEON,
  74601. +# MEXICO                                 TAMAULIPAS  APR 3 - OCT 29
  74602. +# MEXICO              6 H  BEHIND UTC    GENERAL MEXICO, STATES OF
  74603. +# MEXICO                                 CAMPECHE, QUINTANA ROO AND
  74604. +# MEXICO                                 YUCATAN
  74605. +
  74606. +# From Arthur David Olson (January 21, 1989):
  74607. +# April 3 fell on a Sunday in 1988; October 29 fell on a Sunday in 1989.  Ahem.
  74608. +# USNO claims there should be four Mexican zones rather than three:
  74609. +# a zone that's GMT-8 with DST; a zone that's always GMT-7;
  74610. +# a zone that's GMT-6 with DST; and a zone that's always GMT-6.
  74611. +# Wait for more authoritative information before changing.
  74612. +
  74613. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  74614. +Rule    Mexico    1987    max    -    Oct    lastSun    2:00    0    S
  74615. +Rule    Mexico    1987    max    -    Apr    Sun>=1    2:00    1:00    D
  74616. +
  74617. +# Zone    NAME            GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  74618. +Zone    Mexico/BajaNorte    -8:00    Mexico        P%sT
  74619. +Zone    Mexico/BajaSur        -7:00    -        MST
  74620. +Zone    Mexico/General        -6:00    -        CST
  74621. +
  74622. +###############################################################################
  74623. +
  74624. +# Jamaica
  74625. +
  74626. +# From Bob Devine (January 28, 1988):
  74627. +# Follows US rules.
  74628. +
  74629. +# From U. S. Naval Observatory (January 19, 1989):
  74630. +# JAMAICA             5 H  BEHIND UTC
  74631. +
  74632. +Link    US/Eastern    Jamaica
  74633. +
  74634. +###############################################################################
  74635. +
  74636. +# Cuba
  74637. +
  74638. +# From Bob Devine (January 28, 1988):
  74639. +# . . .DST is from 2nd Sunday in May to 2nd Sunday in October since 1981.
  74640. +# Change at midnight.  In 1979 & 1980, started at 3rd Sunday in March
  74641. +# (I think).
  74642. +
  74643. +# From U. S. Naval Observatory (January 19, 1989):
  74644. +# CUBA                5 H  BEHIND UTC
  74645. +# CUBA                4 H  BEHIND UTC    MAR 20 - OCT 8
  74646. +
  74647. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  74648. +Rule    Cuba    1979    1980    -    Mar    Sun>=15    0:00    1:00    D
  74649. +Rule    Cuba    1979    1980    -    Oct    Sun>=8    0:00    0    S
  74650. +Rule    Cuba    1981    max    -    May    Sun>=8    0:00    1:00    D
  74651. +Rule    Cuba    1981    max    -    Oct    Sun>=8    0:00    0    S
  74652. +
  74653. +# Zone    NAME            GMTOFF    RULES/SAVE    FORMAT
  74654. +Zone    Cuba            -5:00    Cuba        C%sT
  74655. diff -ru --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/pacificnew amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/pacificnew
  74656. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/pacificnew    Wed Dec 31 17:00:00 1969
  74657. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/pacificnew    Sun Oct 15 17:19:47 1995
  74658. @@ -0,0 +1,21 @@
  74659. +# @(#)pacificnew    4.4
  74660. +
  74661. +# From Arthur David Olson (January 18, 1989):
  74662. +# On November 10, 1987, the U. S. House of Representatives passed a bill
  74663. +# (H.R. 435), the "Uniform Poll Closing Time Act", establishing
  74664. +# "Pacific Presidential Election Time"; it was not acted on by the Senate
  74665. +# before the end of the 100th Congress and so died.
  74666. +# The bill has been reintroduced in the 101st Congress as H. R. 18;
  74667. +# H. R. 96 also deals with poll closing time.  Either bill would have to be
  74668. +# passed by both the House and Senate and signed by the President (or have
  74669. +# the President's veto overridden by the House and Senate) before becoming law.
  74670. +
  74671. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  74672. +Rule    Twilite    1989    max    -    Apr    Sun>=1    2:00    1:00    D
  74673. +Rule    Twilite    1989    max    uspres    Oct    lastSun    2:00    1:00    PE
  74674. +Rule    Twilite    1989    max    uspres    Nov    Sun>=7    2:00    0    S
  74675. +Rule    Twilite    1989    max    nonpres    Oct    lastSun    2:00    0    S
  74676. +
  74677. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  74678. +Zone    US/Pacific-New    -8:00    US        P%sT    1989
  74679. +            -8:00    Twilite        P%sT
  74680. diff -ru --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/smakefile amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/smakefile
  74681. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/smakefile    Wed Dec 31 17:00:00 1969
  74682. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/smakefile    Sun Oct 15 17:19:48 1995
  74683. @@ -0,0 +1,67 @@
  74684. +#    @(#)Makefile    5.9 (Berkeley) 2/28/91
  74685. +
  74686. +# Change the line below for your time zone (after finding the zone you want in
  74687. +# the time zone files, or adding it to a time zone file).
  74688. +# Alternately, if you discover you've got the wrong time zone, you can just
  74689. +#    zic -l rightzone
  74690. +
  74691. +LOCALTIME=    MET
  74692. +
  74693. +# If you want something other than Eastern United States time as a template
  74694. +# for handling POSIX-style time zone environment variables,
  74695. +# change the line below (after finding the zone you want in the
  74696. +# time zone files, or adding it to a time zone file).
  74697. +# Alternately, if you discover you've got the wrong time zone, you can just
  74698. +#    zic -p rightzone
  74699. +
  74700. +POSIXRULES=    MET
  74701. +
  74702. +# Use an absolute path name for TZDIR unless you're just testing the software.
  74703. +
  74704. +TZDIR=    s:zoneinfo
  74705. +
  74706. +# If you always want time values interpreted as "seconds since the epoch
  74707. +# (not counting leap seconds)", use
  74708. +#     REDO=        posix_only
  74709. +# below.  If you always want right time values interpreted as "seconds since
  74710. +# the epoch" (counting leap seconds)", use
  74711. +#    REDO=        right_only
  74712. +# below.  If you want both sets of data available, with leap seconds not
  74713. +# counted normally, use
  74714. +#    REDO=        posix_right
  74715. +# below.  If you want both sets of data available, with leap seconds counted
  74716. +# normally, use
  74717. +#    REDO=        right_posix
  74718. +# below.
  74719. +
  74720. +# This should be left as is for the Amiga
  74721. +
  74722. +REDO=        posix_only
  74723. +
  74724. +YDATA=    africa antarctica asia australasia europe northamerica \
  74725. +    southamerica pacificnew etcetera factory
  74726. +NDATA=    systemv
  74727. +#SDATA=    solar87 solar88 solar89
  74728. +TDATA=    ${YDATA} ${NDATA} ${SDATA}
  74729. +DATA=    ${YDATA} ${NDATA} ${SDATA} leapseconds
  74730. +USNO=    usno1988 usno1989
  74731. +
  74732. +all: $(REDO)
  74733. +
  74734. +posix_only: ${TDATA}
  74735. +        /zic -d ${TZDIR} -L nil: ${TDATA}
  74736. +
  74737. +right_only: leapseconds ${TDATA}
  74738. +        /zic -d ${TZDIR} -L leapseconds ${TDATA}
  74739. +
  74740. +other_two: leapseconds ${TDATA}
  74741. +        /zic -d ${TZDIR} -L leapseconds ${TDATA}
  74742. +        /zic -d ${TZDIR} -L nil: ${TDATA}
  74743. +
  74744. +posix_right: posix_only other_two
  74745. +
  74746. +right_posix: right_only other_two
  74747. +
  74748. +install: ${TDATA} ${REDO}
  74749. +    /zic -d ${TZDIR} -p ${POSIXRULES}
  74750. +    /zic -d ${TZDIR} -l ${LOCALTIME}
  74751. diff -ru --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/solar87 amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/solar87
  74752. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/solar87    Wed Dec 31 17:00:00 1969
  74753. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/solar87    Sun Oct 15 17:19:49 1995
  74754. @@ -0,0 +1,386 @@
  74755. +# @(#)solar87    4.1
  74756. +
  74757. +# So much for footnotes about Saudi Arabia.
  74758. +# Apparent noon times below are for Riyadh; your mileage will vary.
  74759. +# Times were computed using formulas in the U.S. Naval Observatory's
  74760. +# Almanac for Computers 1987; the formulas "will give EqT to an accuracy of
  74761. +# [plus or minus two] seconds during the current year."
  74762. +#
  74763. +# Rounding to the nearest five seconds results in fewer than
  74764. +# 256 different "time types"--a limit that's faced because time types are
  74765. +# stored on disk as unsigned chars.
  74766. +
  74767. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  74768. +Rule    sol87    1987    only    -    Jan    1    12:03:20s -0:03:20 -
  74769. +Rule    sol87    1987    only    -    Jan    2    12:03:50s -0:03:50 -
  74770. +Rule    sol87    1987    only    -    Jan    3    12:04:15s -0:04:15 -
  74771. +Rule    sol87    1987    only    -    Jan    4    12:04:45s -0:04:45 -
  74772. +Rule    sol87    1987    only    -    Jan    5    12:05:10s -0:05:10 -
  74773. +Rule    sol87    1987    only    -    Jan    6    12:05:40s -0:05:40 -
  74774. +Rule    sol87    1987    only    -    Jan    7    12:06:05s -0:06:05 -
  74775. +Rule    sol87    1987    only    -    Jan    8    12:06:30s -0:06:30 -
  74776. +Rule    sol87    1987    only    -    Jan    9    12:06:55s -0:06:55 -
  74777. +Rule    sol87    1987    only    -    Jan    10    12:07:20s -0:07:20 -
  74778. +Rule    sol87    1987    only    -    Jan    11    12:07:45s -0:07:45 -
  74779. +Rule    sol87    1987    only    -    Jan    12    12:08:10s -0:08:10 -
  74780. +Rule    sol87    1987    only    -    Jan    13    12:08:30s -0:08:30 -
  74781. +Rule    sol87    1987    only    -    Jan    14    12:08:55s -0:08:55 -
  74782. +Rule    sol87    1987    only    -    Jan    15    12:09:15s -0:09:15 -
  74783. +Rule    sol87    1987    only    -    Jan    16    12:09:35s -0:09:35 -
  74784. +Rule    sol87    1987    only    -    Jan    17    12:09:55s -0:09:55 -
  74785. +Rule    sol87    1987    only    -    Jan    18    12:10:15s -0:10:15 -
  74786. +Rule    sol87    1987    only    -    Jan    19    12:10:35s -0:10:35 -
  74787. +Rule    sol87    1987    only    -    Jan    20    12:10:55s -0:10:55 -
  74788. +Rule    sol87    1987    only    -    Jan    21    12:11:10s -0:11:10 -
  74789. +Rule    sol87    1987    only    -    Jan    22    12:11:30s -0:11:30 -
  74790. +Rule    sol87    1987    only    -    Jan    23    12:11:45s -0:11:45 -
  74791. +Rule    sol87    1987    only    -    Jan    24    12:12:00s -0:12:00 -
  74792. +Rule    sol87    1987    only    -    Jan    25    12:12:15s -0:12:15 -
  74793. +Rule    sol87    1987    only    -    Jan    26    12:12:30s -0:12:30 -
  74794. +Rule    sol87    1987    only    -    Jan    27    12:12:40s -0:12:40 -
  74795. +Rule    sol87    1987    only    -    Jan    28    12:12:55s -0:12:55 -
  74796. +Rule    sol87    1987    only    -    Jan    29    12:13:05s -0:13:05 -
  74797. +Rule    sol87    1987    only    -    Jan    30    12:13:15s -0:13:15 -
  74798. +Rule    sol87    1987    only    -    Jan    31    12:13:25s -0:13:25 -
  74799. +Rule    sol87    1987    only    -    Feb    1    12:13:35s -0:13:35 -
  74800. +Rule    sol87    1987    only    -    Feb    2    12:13:40s -0:13:40 -
  74801. +Rule    sol87    1987    only    -    Feb    3    12:13:50s -0:13:50 -
  74802. +Rule    sol87    1987    only    -    Feb    4    12:13:55s -0:13:55 -
  74803. +Rule    sol87    1987    only    -    Feb    5    12:14:00s -0:14:00 -
  74804. +Rule    sol87    1987    only    -    Feb    6    12:14:05s -0:14:05 -
  74805. +Rule    sol87    1987    only    -    Feb    7    12:14:10s -0:14:10 -
  74806. +Rule    sol87    1987    only    -    Feb    8    12:14:10s -0:14:10 -
  74807. +Rule    sol87    1987    only    -    Feb    9    12:14:15s -0:14:15 -
  74808. +Rule    sol87    1987    only    -    Feb    10    12:14:15s -0:14:15 -
  74809. +Rule    sol87    1987    only    -    Feb    11    12:14:15s -0:14:15 -
  74810. +Rule    sol87    1987    only    -    Feb    12    12:14:15s -0:14:15 -
  74811. +Rule    sol87    1987    only    -    Feb    13    12:14:15s -0:14:15 -
  74812. +Rule    sol87    1987    only    -    Feb    14    12:14:15s -0:14:15 -
  74813. +Rule    sol87    1987    only    -    Feb    15    12:14:10s -0:14:10 -
  74814. +Rule    sol87    1987    only    -    Feb    16    12:14:10s -0:14:10 -
  74815. +Rule    sol87    1987    only    -    Feb    17    12:14:05s -0:14:05 -
  74816. +Rule    sol87    1987    only    -    Feb    18    12:14:00s -0:14:00 -
  74817. +Rule    sol87    1987    only    -    Feb    19    12:13:55s -0:13:55 -
  74818. +Rule    sol87    1987    only    -    Feb    20    12:13:50s -0:13:50 -
  74819. +Rule    sol87    1987    only    -    Feb    21    12:13:45s -0:13:45 -
  74820. +Rule    sol87    1987    only    -    Feb    22    12:13:35s -0:13:35 -
  74821. +Rule    sol87    1987    only    -    Feb    23    12:13:30s -0:13:30 -
  74822. +Rule    sol87    1987    only    -    Feb    24    12:13:20s -0:13:20 -
  74823. +Rule    sol87    1987    only    -    Feb    25    12:13:10s -0:13:10 -
  74824. +Rule    sol87    1987    only    -    Feb    26    12:13:00s -0:13:00 -
  74825. +Rule    sol87    1987    only    -    Feb    27    12:12:50s -0:12:50 -
  74826. +Rule    sol87    1987    only    -    Feb    28    12:12:40s -0:12:40 -
  74827. +Rule    sol87    1987    only    -    Mar    1    12:12:30s -0:12:30 -
  74828. +Rule    sol87    1987    only    -    Mar    2    12:12:20s -0:12:20 -
  74829. +Rule    sol87    1987    only    -    Mar    3    12:12:05s -0:12:05 -
  74830. +Rule    sol87    1987    only    -    Mar    4    12:11:55s -0:11:55 -
  74831. +Rule    sol87    1987    only    -    Mar    5    12:11:40s -0:11:40 -
  74832. +Rule    sol87    1987    only    -    Mar    6    12:11:25s -0:11:25 -
  74833. +Rule    sol87    1987    only    -    Mar    7    12:11:15s -0:11:15 -
  74834. +Rule    sol87    1987    only    -    Mar    8    12:11:00s -0:11:00 -
  74835. +Rule    sol87    1987    only    -    Mar    9    12:10:45s -0:10:45 -
  74836. +Rule    sol87    1987    only    -    Mar    10    12:10:30s -0:10:30 -
  74837. +Rule    sol87    1987    only    -    Mar    11    12:10:15s -0:10:15 -
  74838. +Rule    sol87    1987    only    -    Mar    12    12:09:55s -0:09:55 -
  74839. +Rule    sol87    1987    only    -    Mar    13    12:09:40s -0:09:40 -
  74840. +Rule    sol87    1987    only    -    Mar    14    12:09:25s -0:09:25 -
  74841. +Rule    sol87    1987    only    -    Mar    15    12:09:10s -0:09:10 -
  74842. +Rule    sol87    1987    only    -    Mar    16    12:08:50s -0:08:50 -
  74843. +Rule    sol87    1987    only    -    Mar    17    12:08:35s -0:08:35 -
  74844. +Rule    sol87    1987    only    -    Mar    18    12:08:15s -0:08:15 -
  74845. +Rule    sol87    1987    only    -    Mar    19    12:08:00s -0:08:00 -
  74846. +Rule    sol87    1987    only    -    Mar    20    12:07:40s -0:07:40 -
  74847. +Rule    sol87    1987    only    -    Mar    21    12:07:25s -0:07:25 -
  74848. +Rule    sol87    1987    only    -    Mar    22    12:07:05s -0:07:05 -
  74849. +Rule    sol87    1987    only    -    Mar    23    12:06:50s -0:06:50 -
  74850. +Rule    sol87    1987    only    -    Mar    24    12:06:30s -0:06:30 -
  74851. +Rule    sol87    1987    only    -    Mar    25    12:06:10s -0:06:10 -
  74852. +Rule    sol87    1987    only    -    Mar    26    12:05:55s -0:05:55 -
  74853. +Rule    sol87    1987    only    -    Mar    27    12:05:35s -0:05:35 -
  74854. +Rule    sol87    1987    only    -    Mar    28    12:05:15s -0:05:15 -
  74855. +Rule    sol87    1987    only    -    Mar    29    12:05:00s -0:05:00 -
  74856. +Rule    sol87    1987    only    -    Mar    30    12:04:40s -0:04:40 -
  74857. +Rule    sol87    1987    only    -    Mar    31    12:04:25s -0:04:25 -
  74858. +Rule    sol87    1987    only    -    Apr    1    12:04:05s -0:04:05 -
  74859. +Rule    sol87    1987    only    -    Apr    2    12:03:45s -0:03:45 -
  74860. +Rule    sol87    1987    only    -    Apr    3    12:03:30s -0:03:30 -
  74861. +Rule    sol87    1987    only    -    Apr    4    12:03:10s -0:03:10 -
  74862. +Rule    sol87    1987    only    -    Apr    5    12:02:55s -0:02:55 -
  74863. +Rule    sol87    1987    only    -    Apr    6    12:02:35s -0:02:35 -
  74864. +Rule    sol87    1987    only    -    Apr    7    12:02:20s -0:02:20 -
  74865. +Rule    sol87    1987    only    -    Apr    8    12:02:05s -0:02:05 -
  74866. +Rule    sol87    1987    only    -    Apr    9    12:01:45s -0:01:45 -
  74867. +Rule    sol87    1987    only    -    Apr    10    12:01:30s -0:01:30 -
  74868. +Rule    sol87    1987    only    -    Apr    11    12:01:15s -0:01:15 -
  74869. +Rule    sol87    1987    only    -    Apr    12    12:00:55s -0:00:55 -
  74870. +Rule    sol87    1987    only    -    Apr    13    12:00:40s -0:00:40 -
  74871. +Rule    sol87    1987    only    -    Apr    14    12:00:25s -0:00:25 -
  74872. +Rule    sol87    1987    only    -    Apr    15    12:00:10s -0:00:10 -
  74873. +Rule    sol87    1987    only    -    Apr    16    11:59:55s 0:00:05 -
  74874. +Rule    sol87    1987    only    -    Apr    17    11:59:45s 0:00:15 -
  74875. +Rule    sol87    1987    only    -    Apr    18    11:59:30s 0:00:30 -
  74876. +Rule    sol87    1987    only    -    Apr    19    11:59:15s 0:00:45 -
  74877. +Rule    sol87    1987    only    -    Apr    20    11:59:05s 0:00:55 -
  74878. +Rule    sol87    1987    only    -    Apr    21    11:58:50s 0:01:10 -
  74879. +Rule    sol87    1987    only    -    Apr    22    11:58:40s 0:01:20 -
  74880. +Rule    sol87    1987    only    -    Apr    23    11:58:25s 0:01:35 -
  74881. +Rule    sol87    1987    only    -    Apr    24    11:58:15s 0:01:45 -
  74882. +Rule    sol87    1987    only    -    Apr    25    11:58:05s 0:01:55 -
  74883. +Rule    sol87    1987    only    -    Apr    26    11:57:55s 0:02:05 -
  74884. +Rule    sol87    1987    only    -    Apr    27    11:57:45s 0:02:15 -
  74885. +Rule    sol87    1987    only    -    Apr    28    11:57:35s 0:02:25 -
  74886. +Rule    sol87    1987    only    -    Apr    29    11:57:25s 0:02:35 -
  74887. +Rule    sol87    1987    only    -    Apr    30    11:57:15s 0:02:45 -
  74888. +Rule    sol87    1987    only    -    May    1    11:57:10s 0:02:50 -
  74889. +Rule    sol87    1987    only    -    May    2    11:57:00s 0:03:00 -
  74890. +Rule    sol87    1987    only    -    May    3    11:56:55s 0:03:05 -
  74891. +Rule    sol87    1987    only    -    May    4    11:56:50s 0:03:10 -
  74892. +Rule    sol87    1987    only    -    May    5    11:56:45s 0:03:15 -
  74893. +Rule    sol87    1987    only    -    May    6    11:56:40s 0:03:20 -
  74894. +Rule    sol87    1987    only    -    May    7    11:56:35s 0:03:25 -
  74895. +Rule    sol87    1987    only    -    May    8    11:56:30s 0:03:30 -
  74896. +Rule    sol87    1987    only    -    May    9    11:56:25s 0:03:35 -
  74897. +Rule    sol87    1987    only    -    May    10    11:56:25s 0:03:35 -
  74898. +Rule    sol87    1987    only    -    May    11    11:56:20s 0:03:40 -
  74899. +Rule    sol87    1987    only    -    May    12    11:56:20s 0:03:40 -
  74900. +Rule    sol87    1987    only    -    May    13    11:56:20s 0:03:40 -
  74901. +Rule    sol87    1987    only    -    May    14    11:56:20s 0:03:40 -
  74902. +Rule    sol87    1987    only    -    May    15    11:56:20s 0:03:40 -
  74903. +Rule    sol87    1987    only    -    May    16    11:56:20s 0:03:40 -
  74904. +Rule    sol87    1987    only    -    May    17    11:56:20s 0:03:40 -
  74905. +Rule    sol87    1987    only    -    May    18    11:56:20s 0:03:40 -
  74906. +Rule    sol87    1987    only    -    May    19    11:56:25s 0:03:35 -
  74907. +Rule    sol87    1987    only    -    May    20    11:56:25s 0:03:35 -
  74908. +Rule    sol87    1987    only    -    May    21    11:56:30s 0:03:30 -
  74909. +Rule    sol87    1987    only    -    May    22    11:56:35s 0:03:25 -
  74910. +Rule    sol87    1987    only    -    May    23    11:56:40s 0:03:20 -
  74911. +Rule    sol87    1987    only    -    May    24    11:56:45s 0:03:15 -
  74912. +Rule    sol87    1987    only    -    May    25    11:56:50s 0:03:10 -
  74913. +Rule    sol87    1987    only    -    May    26    11:56:55s 0:03:05 -
  74914. +Rule    sol87    1987    only    -    May    27    11:57:00s 0:03:00 -
  74915. +Rule    sol87    1987    only    -    May    28    11:57:10s 0:02:50 -
  74916. +Rule    sol87    1987    only    -    May    29    11:57:15s 0:02:45 -
  74917. +Rule    sol87    1987    only    -    May    30    11:57:25s 0:02:35 -
  74918. +Rule    sol87    1987    only    -    May    31    11:57:30s 0:02:30 -
  74919. +Rule    sol87    1987    only    -    Jun    1    11:57:40s 0:02:20 -
  74920. +Rule    sol87    1987    only    -    Jun    2    11:57:50s 0:02:10 -
  74921. +Rule    sol87    1987    only    -    Jun    3    11:58:00s 0:02:00 -
  74922. +Rule    sol87    1987    only    -    Jun    4    11:58:10s 0:01:50 -
  74923. +Rule    sol87    1987    only    -    Jun    5    11:58:20s 0:01:40 -
  74924. +Rule    sol87    1987    only    -    Jun    6    11:58:30s 0:01:30 -
  74925. +Rule    sol87    1987    only    -    Jun    7    11:58:40s 0:01:20 -
  74926. +Rule    sol87    1987    only    -    Jun    8    11:58:50s 0:01:10 -
  74927. +Rule    sol87    1987    only    -    Jun    9    11:59:05s 0:00:55 -
  74928. +Rule    sol87    1987    only    -    Jun    10    11:59:15s 0:00:45 -
  74929. +Rule    sol87    1987    only    -    Jun    11    11:59:30s 0:00:30 -
  74930. +Rule    sol87    1987    only    -    Jun    12    11:59:40s 0:00:20 -
  74931. +Rule    sol87    1987    only    -    Jun    13    11:59:50s 0:00:10 -
  74932. +Rule    sol87    1987    only    -    Jun    14    12:00:05s -0:00:05 -
  74933. +Rule    sol87    1987    only    -    Jun    15    12:00:15s -0:00:15 -
  74934. +Rule    sol87    1987    only    -    Jun    16    12:00:30s -0:00:30 -
  74935. +Rule    sol87    1987    only    -    Jun    17    12:00:45s -0:00:45 -
  74936. +Rule    sol87    1987    only    -    Jun    18    12:00:55s -0:00:55 -
  74937. +Rule    sol87    1987    only    -    Jun    19    12:01:10s -0:01:10 -
  74938. +Rule    sol87    1987    only    -    Jun    20    12:01:20s -0:01:20 -
  74939. +Rule    sol87    1987    only    -    Jun    21    12:01:35s -0:01:35 -
  74940. +Rule    sol87    1987    only    -    Jun    22    12:01:50s -0:01:50 -
  74941. +Rule    sol87    1987    only    -    Jun    23    12:02:00s -0:02:00 -
  74942. +Rule    sol87    1987    only    -    Jun    24    12:02:15s -0:02:15 -
  74943. +Rule    sol87    1987    only    -    Jun    25    12:02:25s -0:02:25 -
  74944. +Rule    sol87    1987    only    -    Jun    26    12:02:40s -0:02:40 -
  74945. +Rule    sol87    1987    only    -    Jun    27    12:02:50s -0:02:50 -
  74946. +Rule    sol87    1987    only    -    Jun    28    12:03:05s -0:03:05 -
  74947. +Rule    sol87    1987    only    -    Jun    29    12:03:15s -0:03:15 -
  74948. +Rule    sol87    1987    only    -    Jun    30    12:03:30s -0:03:30 -
  74949. +Rule    sol87    1987    only    -    Jul    1    12:03:40s -0:03:40 -
  74950. +Rule    sol87    1987    only    -    Jul    2    12:03:50s -0:03:50 -
  74951. +Rule    sol87    1987    only    -    Jul    3    12:04:05s -0:04:05 -
  74952. +Rule    sol87    1987    only    -    Jul    4    12:04:15s -0:04:15 -
  74953. +Rule    sol87    1987    only    -    Jul    5    12:04:25s -0:04:25 -
  74954. +Rule    sol87    1987    only    -    Jul    6    12:04:35s -0:04:35 -
  74955. +Rule    sol87    1987    only    -    Jul    7    12:04:45s -0:04:45 -
  74956. +Rule    sol87    1987    only    -    Jul    8    12:04:55s -0:04:55 -
  74957. +Rule    sol87    1987    only    -    Jul    9    12:05:05s -0:05:05 -
  74958. +Rule    sol87    1987    only    -    Jul    10    12:05:15s -0:05:15 -
  74959. +Rule    sol87    1987    only    -    Jul    11    12:05:20s -0:05:20 -
  74960. +Rule    sol87    1987    only    -    Jul    12    12:05:30s -0:05:30 -
  74961. +Rule    sol87    1987    only    -    Jul    13    12:05:40s -0:05:40 -
  74962. +Rule    sol87    1987    only    -    Jul    14    12:05:45s -0:05:45 -
  74963. +Rule    sol87    1987    only    -    Jul    15    12:05:50s -0:05:50 -
  74964. +Rule    sol87    1987    only    -    Jul    16    12:06:00s -0:06:00 -
  74965. +Rule    sol87    1987    only    -    Jul    17    12:06:05s -0:06:05 -
  74966. +Rule    sol87    1987    only    -    Jul    18    12:06:10s -0:06:10 -
  74967. +Rule    sol87    1987    only    -    Jul    19    12:06:15s -0:06:15 -
  74968. +Rule    sol87    1987    only    -    Jul    20    12:06:15s -0:06:15 -
  74969. +Rule    sol87    1987    only    -    Jul    21    12:06:20s -0:06:20 -
  74970. +Rule    sol87    1987    only    -    Jul    22    12:06:25s -0:06:25 -
  74971. +Rule    sol87    1987    only    -    Jul    23    12:06:25s -0:06:25 -
  74972. +Rule    sol87    1987    only    -    Jul    24    12:06:25s -0:06:25 -
  74973. +Rule    sol87    1987    only    -    Jul    25    12:06:30s -0:06:30 -
  74974. +Rule    sol87    1987    only    -    Jul    26    12:06:30s -0:06:30 -
  74975. +Rule    sol87    1987    only    -    Jul    27    12:06:30s -0:06:30 -
  74976. +Rule    sol87    1987    only    -    Jul    28    12:06:30s -0:06:30 -
  74977. +Rule    sol87    1987    only    -    Jul    29    12:06:25s -0:06:25 -
  74978. +Rule    sol87    1987    only    -    Jul    30    12:06:25s -0:06:25 -
  74979. +Rule    sol87    1987    only    -    Jul    31    12:06:25s -0:06:25 -
  74980. +Rule    sol87    1987    only    -    Aug    1    12:06:20s -0:06:20 -
  74981. +Rule    sol87    1987    only    -    Aug    2    12:06:15s -0:06:15 -
  74982. +Rule    sol87    1987    only    -    Aug    3    12:06:10s -0:06:10 -
  74983. +Rule    sol87    1987    only    -    Aug    4    12:06:05s -0:06:05 -
  74984. +Rule    sol87    1987    only    -    Aug    5    12:06:00s -0:06:00 -
  74985. +Rule    sol87    1987    only    -    Aug    6    12:05:55s -0:05:55 -
  74986. +Rule    sol87    1987    only    -    Aug    7    12:05:50s -0:05:50 -
  74987. +Rule    sol87    1987    only    -    Aug    8    12:05:40s -0:05:40 -
  74988. +Rule    sol87    1987    only    -    Aug    9    12:05:35s -0:05:35 -
  74989. +Rule    sol87    1987    only    -    Aug    10    12:05:25s -0:05:25 -
  74990. +Rule    sol87    1987    only    -    Aug    11    12:05:15s -0:05:15 -
  74991. +Rule    sol87    1987    only    -    Aug    12    12:05:05s -0:05:05 -
  74992. +Rule    sol87    1987    only    -    Aug    13    12:04:55s -0:04:55 -
  74993. +Rule    sol87    1987    only    -    Aug    14    12:04:45s -0:04:45 -
  74994. +Rule    sol87    1987    only    -    Aug    15    12:04:35s -0:04:35 -
  74995. +Rule    sol87    1987    only    -    Aug    16    12:04:25s -0:04:25 -
  74996. +Rule    sol87    1987    only    -    Aug    17    12:04:10s -0:04:10 -
  74997. +Rule    sol87    1987    only    -    Aug    18    12:04:00s -0:04:00 -
  74998. +Rule    sol87    1987    only    -    Aug    19    12:03:45s -0:03:45 -
  74999. +Rule    sol87    1987    only    -    Aug    20    12:03:30s -0:03:30 -
  75000. +Rule    sol87    1987    only    -    Aug    21    12:03:15s -0:03:15 -
  75001. +Rule    sol87    1987    only    -    Aug    22    12:03:00s -0:03:00 -
  75002. +Rule    sol87    1987    only    -    Aug    23    12:02:45s -0:02:45 -
  75003. +Rule    sol87    1987    only    -    Aug    24    12:02:30s -0:02:30 -
  75004. +Rule    sol87    1987    only    -    Aug    25    12:02:15s -0:02:15 -
  75005. +Rule    sol87    1987    only    -    Aug    26    12:02:00s -0:02:00 -
  75006. +Rule    sol87    1987    only    -    Aug    27    12:01:40s -0:01:40 -
  75007. +Rule    sol87    1987    only    -    Aug    28    12:01:25s -0:01:25 -
  75008. +Rule    sol87    1987    only    -    Aug    29    12:01:05s -0:01:05 -
  75009. +Rule    sol87    1987    only    -    Aug    30    12:00:50s -0:00:50 -
  75010. +Rule    sol87    1987    only    -    Aug    31    12:00:30s -0:00:30 -
  75011. +Rule    sol87    1987    only    -    Sep    1    12:00:10s -0:00:10 -
  75012. +Rule    sol87    1987    only    -    Sep    2    11:59:50s 0:00:10 -
  75013. +Rule    sol87    1987    only    -    Sep    3    11:59:35s 0:00:25 -
  75014. +Rule    sol87    1987    only    -    Sep    4    11:59:15s 0:00:45 -
  75015. +Rule    sol87    1987    only    -    Sep    5    11:58:55s 0:01:05 -
  75016. +Rule    sol87    1987    only    -    Sep    6    11:58:35s 0:01:25 -
  75017. +Rule    sol87    1987    only    -    Sep    7    11:58:15s 0:01:45 -
  75018. +Rule    sol87    1987    only    -    Sep    8    11:57:55s 0:02:05 -
  75019. +Rule    sol87    1987    only    -    Sep    9    11:57:30s 0:02:30 -
  75020. +Rule    sol87    1987    only    -    Sep    10    11:57:10s 0:02:50 -
  75021. +Rule    sol87    1987    only    -    Sep    11    11:56:50s 0:03:10 -
  75022. +Rule    sol87    1987    only    -    Sep    12    11:56:30s 0:03:30 -
  75023. +Rule    sol87    1987    only    -    Sep    13    11:56:10s 0:03:50 -
  75024. +Rule    sol87    1987    only    -    Sep    14    11:55:45s 0:04:15 -
  75025. +Rule    sol87    1987    only    -    Sep    15    11:55:25s 0:04:35 -
  75026. +Rule    sol87    1987    only    -    Sep    16    11:55:05s 0:04:55 -
  75027. +Rule    sol87    1987    only    -    Sep    17    11:54:45s 0:05:15 -
  75028. +Rule    sol87    1987    only    -    Sep    18    11:54:20s 0:05:40 -
  75029. +Rule    sol87    1987    only    -    Sep    19    11:54:00s 0:06:00 -
  75030. +Rule    sol87    1987    only    -    Sep    20    11:53:40s 0:06:20 -
  75031. +Rule    sol87    1987    only    -    Sep    21    11:53:15s 0:06:45 -
  75032. +Rule    sol87    1987    only    -    Sep    22    11:52:55s 0:07:05 -
  75033. +Rule    sol87    1987    only    -    Sep    23    11:52:35s 0:07:25 -
  75034. +Rule    sol87    1987    only    -    Sep    24    11:52:15s 0:07:45 -
  75035. +Rule    sol87    1987    only    -    Sep    25    11:51:55s 0:08:05 -
  75036. +Rule    sol87    1987    only    -    Sep    26    11:51:35s 0:08:25 -
  75037. +Rule    sol87    1987    only    -    Sep    27    11:51:10s 0:08:50 -
  75038. +Rule    sol87    1987    only    -    Sep    28    11:50:50s 0:09:10 -
  75039. +Rule    sol87    1987    only    -    Sep    29    11:50:30s 0:09:30 -
  75040. +Rule    sol87    1987    only    -    Sep    30    11:50:10s 0:09:50 -
  75041. +Rule    sol87    1987    only    -    Oct    1    11:49:50s 0:10:10 -
  75042. +Rule    sol87    1987    only    -    Oct    2    11:49:35s 0:10:25 -
  75043. +Rule    sol87    1987    only    -    Oct    3    11:49:15s 0:10:45 -
  75044. +Rule    sol87    1987    only    -    Oct    4    11:48:55s 0:11:05 -
  75045. +Rule    sol87    1987    only    -    Oct    5    11:48:35s 0:11:25 -
  75046. +Rule    sol87    1987    only    -    Oct    6    11:48:20s 0:11:40 -
  75047. +Rule    sol87    1987    only    -    Oct    7    11:48:00s 0:12:00 -
  75048. +Rule    sol87    1987    only    -    Oct    8    11:47:45s 0:12:15 -
  75049. +Rule    sol87    1987    only    -    Oct    9    11:47:25s 0:12:35 -
  75050. +Rule    sol87    1987    only    -    Oct    10    11:47:10s 0:12:50 -
  75051. +Rule    sol87    1987    only    -    Oct    11    11:46:55s 0:13:05 -
  75052. +Rule    sol87    1987    only    -    Oct    12    11:46:40s 0:13:20 -
  75053. +Rule    sol87    1987    only    -    Oct    13    11:46:25s 0:13:35 -
  75054. +Rule    sol87    1987    only    -    Oct    14    11:46:10s 0:13:50 -
  75055. +Rule    sol87    1987    only    -    Oct    15    11:45:55s 0:14:05 -
  75056. +Rule    sol87    1987    only    -    Oct    16    11:45:45s 0:14:15 -
  75057. +Rule    sol87    1987    only    -    Oct    17    11:45:30s 0:14:30 -
  75058. +Rule    sol87    1987    only    -    Oct    18    11:45:20s 0:14:40 -
  75059. +Rule    sol87    1987    only    -    Oct    19    11:45:05s 0:14:55 -
  75060. +Rule    sol87    1987    only    -    Oct    20    11:44:55s 0:15:05 -
  75061. +Rule    sol87    1987    only    -    Oct    21    11:44:45s 0:15:15 -
  75062. +Rule    sol87    1987    only    -    Oct    22    11:44:35s 0:15:25 -
  75063. +Rule    sol87    1987    only    -    Oct    23    11:44:25s 0:15:35 -
  75064. +Rule    sol87    1987    only    -    Oct    24    11:44:20s 0:15:40 -
  75065. +Rule    sol87    1987    only    -    Oct    25    11:44:10s 0:15:50 -
  75066. +Rule    sol87    1987    only    -    Oct    26    11:44:05s 0:15:55 -
  75067. +Rule    sol87    1987    only    -    Oct    27    11:43:55s 0:16:05 -
  75068. +Rule    sol87    1987    only    -    Oct    28    11:43:50s 0:16:10 -
  75069. +Rule    sol87    1987    only    -    Oct    29    11:43:45s 0:16:15 -
  75070. +Rule    sol87    1987    only    -    Oct    30    11:43:45s 0:16:15 -
  75071. +Rule    sol87    1987    only    -    Oct    31    11:43:40s 0:16:20 -
  75072. +Rule    sol87    1987    only    -    Nov    1    11:43:40s 0:16:20 -
  75073. +Rule    sol87    1987    only    -    Nov    2    11:43:35s 0:16:25 -
  75074. +Rule    sol87    1987    only    -    Nov    3    11:43:35s 0:16:25 -
  75075. +Rule    sol87    1987    only    -    Nov    4    11:43:35s 0:16:25 -
  75076. +Rule    sol87    1987    only    -    Nov    5    11:43:35s 0:16:25 -
  75077. +Rule    sol87    1987    only    -    Nov    6    11:43:40s 0:16:20 -
  75078. +Rule    sol87    1987    only    -    Nov    7    11:43:40s 0:16:20 -
  75079. +Rule    sol87    1987    only    -    Nov    8    11:43:45s 0:16:15 -
  75080. +Rule    sol87    1987    only    -    Nov    9    11:43:50s 0:16:10 -
  75081. +Rule    sol87    1987    only    -    Nov    10    11:43:55s 0:16:05 -
  75082. +Rule    sol87    1987    only    -    Nov    11    11:44:00s 0:16:00 -
  75083. +Rule    sol87    1987    only    -    Nov    12    11:44:05s 0:15:55 -
  75084. +Rule    sol87    1987    only    -    Nov    13    11:44:15s 0:15:45 -
  75085. +Rule    sol87    1987    only    -    Nov    14    11:44:20s 0:15:40 -
  75086. +Rule    sol87    1987    only    -    Nov    15    11:44:30s 0:15:30 -
  75087. +Rule    sol87    1987    only    -    Nov    16    11:44:40s 0:15:20 -
  75088. +Rule    sol87    1987    only    -    Nov    17    11:44:50s 0:15:10 -
  75089. +Rule    sol87    1987    only    -    Nov    18    11:45:05s 0:14:55 -
  75090. +Rule    sol87    1987    only    -    Nov    19    11:45:15s 0:14:45 -
  75091. +Rule    sol87    1987    only    -    Nov    20    11:45:30s 0:14:30 -
  75092. +Rule    sol87    1987    only    -    Nov    21    11:45:45s 0:14:15 -
  75093. +Rule    sol87    1987    only    -    Nov    22    11:46:00s 0:14:00 -
  75094. +Rule    sol87    1987    only    -    Nov    23    11:46:15s 0:13:45 -
  75095. +Rule    sol87    1987    only    -    Nov    24    11:46:30s 0:13:30 -
  75096. +Rule    sol87    1987    only    -    Nov    25    11:46:50s 0:13:10 -
  75097. +Rule    sol87    1987    only    -    Nov    26    11:47:10s 0:12:50 -
  75098. +Rule    sol87    1987    only    -    Nov    27    11:47:25s 0:12:35 -
  75099. +Rule    sol87    1987    only    -    Nov    28    11:47:45s 0:12:15 -
  75100. +Rule    sol87    1987    only    -    Nov    29    11:48:05s 0:11:55 -
  75101. +Rule    sol87    1987    only    -    Nov    30    11:48:30s 0:11:30 -
  75102. +Rule    sol87    1987    only    -    Dec    1    11:48:50s 0:11:10 -
  75103. +Rule    sol87    1987    only    -    Dec    2    11:49:10s 0:10:50 -
  75104. +Rule    sol87    1987    only    -    Dec    3    11:49:35s 0:10:25 -
  75105. +Rule    sol87    1987    only    -    Dec    4    11:50:00s 0:10:00 -
  75106. +Rule    sol87    1987    only    -    Dec    5    11:50:25s 0:09:35 -
  75107. +Rule    sol87    1987    only    -    Dec    6    11:50:50s 0:09:10 -
  75108. +Rule    sol87    1987    only    -    Dec    7    11:51:15s 0:08:45 -
  75109. +Rule    sol87    1987    only    -    Dec    8    11:51:40s 0:08:20 -
  75110. +Rule    sol87    1987    only    -    Dec    9    11:52:05s 0:07:55 -
  75111. +Rule    sol87    1987    only    -    Dec    10    11:52:30s 0:07:30 -
  75112. +Rule    sol87    1987    only    -    Dec    11    11:53:00s 0:07:00 -
  75113. +Rule    sol87    1987    only    -    Dec    12    11:53:25s 0:06:35 -
  75114. +Rule    sol87    1987    only    -    Dec    13    11:53:55s 0:06:05 -
  75115. +Rule    sol87    1987    only    -    Dec    14    11:54:25s 0:05:35 -
  75116. +Rule    sol87    1987    only    -    Dec    15    11:54:50s 0:05:10 -
  75117. +Rule    sol87    1987    only    -    Dec    16    11:55:20s 0:04:40 -
  75118. +Rule    sol87    1987    only    -    Dec    17    11:55:50s 0:04:10 -
  75119. +Rule    sol87    1987    only    -    Dec    18    11:56:20s 0:03:40 -
  75120. +Rule    sol87    1987    only    -    Dec    19    11:56:50s 0:03:10 -
  75121. +Rule    sol87    1987    only    -    Dec    20    11:57:20s 0:02:40 -
  75122. +Rule    sol87    1987    only    -    Dec    21    11:57:50s 0:02:10 -
  75123. +Rule    sol87    1987    only    -    Dec    22    11:58:20s 0:01:40 -
  75124. +Rule    sol87    1987    only    -    Dec    23    11:58:50s 0:01:10 -
  75125. +Rule    sol87    1987    only    -    Dec    24    11:59:20s 0:00:40 -
  75126. +Rule    sol87    1987    only    -    Dec    25    11:59:50s 0:00:10 -
  75127. +Rule    sol87    1987    only    -    Dec    26    12:00:20s -0:00:20 -
  75128. +Rule    sol87    1987    only    -    Dec    27    12:00:45s -0:00:45 -
  75129. +Rule    sol87    1987    only    -    Dec    28    12:01:15s -0:01:15 -
  75130. +Rule    sol87    1987    only    -    Dec    29    12:01:45s -0:01:45 -
  75131. +Rule    sol87    1987    only    -    Dec    30    12:02:15s -0:02:15 -
  75132. +Rule    sol87    1987    only    -    Dec    31    12:02:45s -0:02:45 -
  75133. +
  75134. +# Riyadh is at about 46 degrees 46 minutes East:  3 hrs, 7 mins, 4 secs
  75135. +# Before and after 1987, we'll operate on local mean solar time.
  75136. +
  75137. +# Zone    NAME            GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  75138. +Zone    Mideast/Riyadh87    3:07:04    -        ??    1987
  75139. +                3:07:04    sol87        ??    1988
  75140. +                3:07:04    -        ??
  75141. diff -ru --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/solar88 amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/solar88
  75142. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/solar88    Wed Dec 31 17:00:00 1969
  75143. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/solar88    Sun Oct 15 17:19:51 1995
  75144. @@ -0,0 +1,386 @@
  75145. +# @(#)solar88    4.2
  75146. +
  75147. +# Apparent noon times below are for Riyadh; they're a bit off for other places.
  75148. +# Times were computed using formulas in the U.S. Naval Observatory's
  75149. +# Almanac for Computers 1988; the formulas "will give EqT to an accuracy of
  75150. +# [plus or minus two] seconds during the current year."
  75151. +#
  75152. +# Rounding to the nearest five seconds results in fewer than
  75153. +# 256 different "time types"--a limit that's faced because time types are
  75154. +# stored on disk as unsigned chars.
  75155. +
  75156. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  75157. +Rule    sol88    1988    only    -    Jan    1    12:03:15s -0:03:15 -
  75158. +Rule    sol88    1988    only    -    Jan    2    12:03:40s -0:03:40 -
  75159. +Rule    sol88    1988    only    -    Jan    3    12:04:10s -0:04:10 -
  75160. +Rule    sol88    1988    only    -    Jan    4    12:04:40s -0:04:40 -
  75161. +Rule    sol88    1988    only    -    Jan    5    12:05:05s -0:05:05 -
  75162. +Rule    sol88    1988    only    -    Jan    6    12:05:30s -0:05:30 -
  75163. +Rule    sol88    1988    only    -    Jan    7    12:06:00s -0:06:00 -
  75164. +Rule    sol88    1988    only    -    Jan    8    12:06:25s -0:06:25 -
  75165. +Rule    sol88    1988    only    -    Jan    9    12:06:50s -0:06:50 -
  75166. +Rule    sol88    1988    only    -    Jan    10    12:07:15s -0:07:15 -
  75167. +Rule    sol88    1988    only    -    Jan    11    12:07:40s -0:07:40 -
  75168. +Rule    sol88    1988    only    -    Jan    12    12:08:05s -0:08:05 -
  75169. +Rule    sol88    1988    only    -    Jan    13    12:08:25s -0:08:25 -
  75170. +Rule    sol88    1988    only    -    Jan    14    12:08:50s -0:08:50 -
  75171. +Rule    sol88    1988    only    -    Jan    15    12:09:10s -0:09:10 -
  75172. +Rule    sol88    1988    only    -    Jan    16    12:09:30s -0:09:30 -
  75173. +Rule    sol88    1988    only    -    Jan    17    12:09:50s -0:09:50 -
  75174. +Rule    sol88    1988    only    -    Jan    18    12:10:10s -0:10:10 -
  75175. +Rule    sol88    1988    only    -    Jan    19    12:10:30s -0:10:30 -
  75176. +Rule    sol88    1988    only    -    Jan    20    12:10:50s -0:10:50 -
  75177. +Rule    sol88    1988    only    -    Jan    21    12:11:05s -0:11:05 -
  75178. +Rule    sol88    1988    only    -    Jan    22    12:11:25s -0:11:25 -
  75179. +Rule    sol88    1988    only    -    Jan    23    12:11:40s -0:11:40 -
  75180. +Rule    sol88    1988    only    -    Jan    24    12:11:55s -0:11:55 -
  75181. +Rule    sol88    1988    only    -    Jan    25    12:12:10s -0:12:10 -
  75182. +Rule    sol88    1988    only    -    Jan    26    12:12:25s -0:12:25 -
  75183. +Rule    sol88    1988    only    -    Jan    27    12:12:40s -0:12:40 -
  75184. +Rule    sol88    1988    only    -    Jan    28    12:12:50s -0:12:50 -
  75185. +Rule    sol88    1988    only    -    Jan    29    12:13:00s -0:13:00 -
  75186. +Rule    sol88    1988    only    -    Jan    30    12:13:10s -0:13:10 -
  75187. +Rule    sol88    1988    only    -    Jan    31    12:13:20s -0:13:20 -
  75188. +Rule    sol88    1988    only    -    Feb    1    12:13:30s -0:13:30 -
  75189. +Rule    sol88    1988    only    -    Feb    2    12:13:40s -0:13:40 -
  75190. +Rule    sol88    1988    only    -    Feb    3    12:13:45s -0:13:45 -
  75191. +Rule    sol88    1988    only    -    Feb    4    12:13:55s -0:13:55 -
  75192. +Rule    sol88    1988    only    -    Feb    5    12:14:00s -0:14:00 -
  75193. +Rule    sol88    1988    only    -    Feb    6    12:14:05s -0:14:05 -
  75194. +Rule    sol88    1988    only    -    Feb    7    12:14:10s -0:14:10 -
  75195. +Rule    sol88    1988    only    -    Feb    8    12:14:10s -0:14:10 -
  75196. +Rule    sol88    1988    only    -    Feb    9    12:14:15s -0:14:15 -
  75197. +Rule    sol88    1988    only    -    Feb    10    12:14:15s -0:14:15 -
  75198. +Rule    sol88    1988    only    -    Feb    11    12:14:15s -0:14:15 -
  75199. +Rule    sol88    1988    only    -    Feb    12    12:14:15s -0:14:15 -
  75200. +Rule    sol88    1988    only    -    Feb    13    12:14:15s -0:14:15 -
  75201. +Rule    sol88    1988    only    -    Feb    14    12:14:15s -0:14:15 -
  75202. +Rule    sol88    1988    only    -    Feb    15    12:14:10s -0:14:10 -
  75203. +Rule    sol88    1988    only    -    Feb    16    12:14:10s -0:14:10 -
  75204. +Rule    sol88    1988    only    -    Feb    17    12:14:05s -0:14:05 -
  75205. +Rule    sol88    1988    only    -    Feb    18    12:14:00s -0:14:00 -
  75206. +Rule    sol88    1988    only    -    Feb    19    12:13:55s -0:13:55 -
  75207. +Rule    sol88    1988    only    -    Feb    20    12:13:50s -0:13:50 -
  75208. +Rule    sol88    1988    only    -    Feb    21    12:13:45s -0:13:45 -
  75209. +Rule    sol88    1988    only    -    Feb    22    12:13:40s -0:13:40 -
  75210. +Rule    sol88    1988    only    -    Feb    23    12:13:30s -0:13:30 -
  75211. +Rule    sol88    1988    only    -    Feb    24    12:13:20s -0:13:20 -
  75212. +Rule    sol88    1988    only    -    Feb    25    12:13:15s -0:13:15 -
  75213. +Rule    sol88    1988    only    -    Feb    26    12:13:05s -0:13:05 -
  75214. +Rule    sol88    1988    only    -    Feb    27    12:12:55s -0:12:55 -
  75215. +Rule    sol88    1988    only    -    Feb    28    12:12:45s -0:12:45 -
  75216. +Rule    sol88    1988    only    -    Feb    29    12:12:30s -0:12:30 -
  75217. +Rule    sol88    1988    only    -    Mar    1    12:12:20s -0:12:20 -
  75218. +Rule    sol88    1988    only    -    Mar    2    12:12:10s -0:12:10 -
  75219. +Rule    sol88    1988    only    -    Mar    3    12:11:55s -0:11:55 -
  75220. +Rule    sol88    1988    only    -    Mar    4    12:11:45s -0:11:45 -
  75221. +Rule    sol88    1988    only    -    Mar    5    12:11:30s -0:11:30 -
  75222. +Rule    sol88    1988    only    -    Mar    6    12:11:15s -0:11:15 -
  75223. +Rule    sol88    1988    only    -    Mar    7    12:11:00s -0:11:00 -
  75224. +Rule    sol88    1988    only    -    Mar    8    12:10:45s -0:10:45 -
  75225. +Rule    sol88    1988    only    -    Mar    9    12:10:30s -0:10:30 -
  75226. +Rule    sol88    1988    only    -    Mar    10    12:10:15s -0:10:15 -
  75227. +Rule    sol88    1988    only    -    Mar    11    12:10:00s -0:10:00 -
  75228. +Rule    sol88    1988    only    -    Mar    12    12:09:45s -0:09:45 -
  75229. +Rule    sol88    1988    only    -    Mar    13    12:09:30s -0:09:30 -
  75230. +Rule    sol88    1988    only    -    Mar    14    12:09:10s -0:09:10 -
  75231. +Rule    sol88    1988    only    -    Mar    15    12:08:55s -0:08:55 -
  75232. +Rule    sol88    1988    only    -    Mar    16    12:08:40s -0:08:40 -
  75233. +Rule    sol88    1988    only    -    Mar    17    12:08:20s -0:08:20 -
  75234. +Rule    sol88    1988    only    -    Mar    18    12:08:05s -0:08:05 -
  75235. +Rule    sol88    1988    only    -    Mar    19    12:07:45s -0:07:45 -
  75236. +Rule    sol88    1988    only    -    Mar    20    12:07:30s -0:07:30 -
  75237. +Rule    sol88    1988    only    -    Mar    21    12:07:10s -0:07:10 -
  75238. +Rule    sol88    1988    only    -    Mar    22    12:06:50s -0:06:50 -
  75239. +Rule    sol88    1988    only    -    Mar    23    12:06:35s -0:06:35 -
  75240. +Rule    sol88    1988    only    -    Mar    24    12:06:15s -0:06:15 -
  75241. +Rule    sol88    1988    only    -    Mar    25    12:06:00s -0:06:00 -
  75242. +Rule    sol88    1988    only    -    Mar    26    12:05:40s -0:05:40 -
  75243. +Rule    sol88    1988    only    -    Mar    27    12:05:20s -0:05:20 -
  75244. +Rule    sol88    1988    only    -    Mar    28    12:05:05s -0:05:05 -
  75245. +Rule    sol88    1988    only    -    Mar    29    12:04:45s -0:04:45 -
  75246. +Rule    sol88    1988    only    -    Mar    30    12:04:25s -0:04:25 -
  75247. +Rule    sol88    1988    only    -    Mar    31    12:04:10s -0:04:10 -
  75248. +Rule    sol88    1988    only    -    Apr    1    12:03:50s -0:03:50 -
  75249. +Rule    sol88    1988    only    -    Apr    2    12:03:35s -0:03:35 -
  75250. +Rule    sol88    1988    only    -    Apr    3    12:03:15s -0:03:15 -
  75251. +Rule    sol88    1988    only    -    Apr    4    12:03:00s -0:03:00 -
  75252. +Rule    sol88    1988    only    -    Apr    5    12:02:40s -0:02:40 -
  75253. +Rule    sol88    1988    only    -    Apr    6    12:02:25s -0:02:25 -
  75254. +Rule    sol88    1988    only    -    Apr    7    12:02:05s -0:02:05 -
  75255. +Rule    sol88    1988    only    -    Apr    8    12:01:50s -0:01:50 -
  75256. +Rule    sol88    1988    only    -    Apr    9    12:01:35s -0:01:35 -
  75257. +Rule    sol88    1988    only    -    Apr    10    12:01:15s -0:01:15 -
  75258. +Rule    sol88    1988    only    -    Apr    11    12:01:00s -0:01:00 -
  75259. +Rule    sol88    1988    only    -    Apr    12    12:00:45s -0:00:45 -
  75260. +Rule    sol88    1988    only    -    Apr    13    12:00:30s -0:00:30 -
  75261. +Rule    sol88    1988    only    -    Apr    14    12:00:15s -0:00:15 -
  75262. +Rule    sol88    1988    only    -    Apr    15    12:00:00s 0:00:00 -
  75263. +Rule    sol88    1988    only    -    Apr    16    11:59:45s 0:00:15 -
  75264. +Rule    sol88    1988    only    -    Apr    17    11:59:30s 0:00:30 -
  75265. +Rule    sol88    1988    only    -    Apr    18    11:59:20s 0:00:40 -
  75266. +Rule    sol88    1988    only    -    Apr    19    11:59:05s 0:00:55 -
  75267. +Rule    sol88    1988    only    -    Apr    20    11:58:55s 0:01:05 -
  75268. +Rule    sol88    1988    only    -    Apr    21    11:58:40s 0:01:20 -
  75269. +Rule    sol88    1988    only    -    Apr    22    11:58:30s 0:01:30 -
  75270. +Rule    sol88    1988    only    -    Apr    23    11:58:15s 0:01:45 -
  75271. +Rule    sol88    1988    only    -    Apr    24    11:58:05s 0:01:55 -
  75272. +Rule    sol88    1988    only    -    Apr    25    11:57:55s 0:02:05 -
  75273. +Rule    sol88    1988    only    -    Apr    26    11:57:45s 0:02:15 -
  75274. +Rule    sol88    1988    only    -    Apr    27    11:57:35s 0:02:25 -
  75275. +Rule    sol88    1988    only    -    Apr    28    11:57:30s 0:02:30 -
  75276. +Rule    sol88    1988    only    -    Apr    29    11:57:20s 0:02:40 -
  75277. +Rule    sol88    1988    only    -    Apr    30    11:57:10s 0:02:50 -
  75278. +Rule    sol88    1988    only    -    May    1    11:57:05s 0:02:55 -
  75279. +Rule    sol88    1988    only    -    May    2    11:56:55s 0:03:05 -
  75280. +Rule    sol88    1988    only    -    May    3    11:56:50s 0:03:10 -
  75281. +Rule    sol88    1988    only    -    May    4    11:56:45s 0:03:15 -
  75282. +Rule    sol88    1988    only    -    May    5    11:56:40s 0:03:20 -
  75283. +Rule    sol88    1988    only    -    May    6    11:56:35s 0:03:25 -
  75284. +Rule    sol88    1988    only    -    May    7    11:56:30s 0:03:30 -
  75285. +Rule    sol88    1988    only    -    May    8    11:56:25s 0:03:35 -
  75286. +Rule    sol88    1988    only    -    May    9    11:56:25s 0:03:35 -
  75287. +Rule    sol88    1988    only    -    May    10    11:56:20s 0:03:40 -
  75288. +Rule    sol88    1988    only    -    May    11    11:56:20s 0:03:40 -
  75289. +Rule    sol88    1988    only    -    May    12    11:56:20s 0:03:40 -
  75290. +Rule    sol88    1988    only    -    May    13    11:56:20s 0:03:40 -
  75291. +Rule    sol88    1988    only    -    May    14    11:56:20s 0:03:40 -
  75292. +Rule    sol88    1988    only    -    May    15    11:56:20s 0:03:40 -
  75293. +Rule    sol88    1988    only    -    May    16    11:56:20s 0:03:40 -
  75294. +Rule    sol88    1988    only    -    May    17    11:56:20s 0:03:40 -
  75295. +Rule    sol88    1988    only    -    May    18    11:56:25s 0:03:35 -
  75296. +Rule    sol88    1988    only    -    May    19    11:56:25s 0:03:35 -
  75297. +Rule    sol88    1988    only    -    May    20    11:56:30s 0:03:30 -
  75298. +Rule    sol88    1988    only    -    May    21    11:56:35s 0:03:25 -
  75299. +Rule    sol88    1988    only    -    May    22    11:56:40s 0:03:20 -
  75300. +Rule    sol88    1988    only    -    May    23    11:56:45s 0:03:15 -
  75301. +Rule    sol88    1988    only    -    May    24    11:56:50s 0:03:10 -
  75302. +Rule    sol88    1988    only    -    May    25    11:56:55s 0:03:05 -
  75303. +Rule    sol88    1988    only    -    May    26    11:57:00s 0:03:00 -
  75304. +Rule    sol88    1988    only    -    May    27    11:57:05s 0:02:55 -
  75305. +Rule    sol88    1988    only    -    May    28    11:57:15s 0:02:45 -
  75306. +Rule    sol88    1988    only    -    May    29    11:57:20s 0:02:40 -
  75307. +Rule    sol88    1988    only    -    May    30    11:57:30s 0:02:30 -
  75308. +Rule    sol88    1988    only    -    May    31    11:57:40s 0:02:20 -
  75309. +Rule    sol88    1988    only    -    Jun    1    11:57:50s 0:02:10 -
  75310. +Rule    sol88    1988    only    -    Jun    2    11:57:55s 0:02:05 -
  75311. +Rule    sol88    1988    only    -    Jun    3    11:58:05s 0:01:55 -
  75312. +Rule    sol88    1988    only    -    Jun    4    11:58:15s 0:01:45 -
  75313. +Rule    sol88    1988    only    -    Jun    5    11:58:30s 0:01:30 -
  75314. +Rule    sol88    1988    only    -    Jun    6    11:58:40s 0:01:20 -
  75315. +Rule    sol88    1988    only    -    Jun    7    11:58:50s 0:01:10 -
  75316. +Rule    sol88    1988    only    -    Jun    8    11:59:00s 0:01:00 -
  75317. +Rule    sol88    1988    only    -    Jun    9    11:59:15s 0:00:45 -
  75318. +Rule    sol88    1988    only    -    Jun    10    11:59:25s 0:00:35 -
  75319. +Rule    sol88    1988    only    -    Jun    11    11:59:35s 0:00:25 -
  75320. +Rule    sol88    1988    only    -    Jun    12    11:59:50s 0:00:10 -
  75321. +Rule    sol88    1988    only    -    Jun    13    12:00:00s 0:00:00 -
  75322. +Rule    sol88    1988    only    -    Jun    14    12:00:15s -0:00:15 -
  75323. +Rule    sol88    1988    only    -    Jun    15    12:00:25s -0:00:25 -
  75324. +Rule    sol88    1988    only    -    Jun    16    12:00:40s -0:00:40 -
  75325. +Rule    sol88    1988    only    -    Jun    17    12:00:55s -0:00:55 -
  75326. +Rule    sol88    1988    only    -    Jun    18    12:01:05s -0:01:05 -
  75327. +Rule    sol88    1988    only    -    Jun    19    12:01:20s -0:01:20 -
  75328. +Rule    sol88    1988    only    -    Jun    20    12:01:30s -0:01:30 -
  75329. +Rule    sol88    1988    only    -    Jun    21    12:01:45s -0:01:45 -
  75330. +Rule    sol88    1988    only    -    Jun    22    12:02:00s -0:02:00 -
  75331. +Rule    sol88    1988    only    -    Jun    23    12:02:10s -0:02:10 -
  75332. +Rule    sol88    1988    only    -    Jun    24    12:02:25s -0:02:25 -
  75333. +Rule    sol88    1988    only    -    Jun    25    12:02:35s -0:02:35 -
  75334. +Rule    sol88    1988    only    -    Jun    26    12:02:50s -0:02:50 -
  75335. +Rule    sol88    1988    only    -    Jun    27    12:03:00s -0:03:00 -
  75336. +Rule    sol88    1988    only    -    Jun    28    12:03:15s -0:03:15 -
  75337. +Rule    sol88    1988    only    -    Jun    29    12:03:25s -0:03:25 -
  75338. +Rule    sol88    1988    only    -    Jun    30    12:03:40s -0:03:40 -
  75339. +Rule    sol88    1988    only    -    Jul    1    12:03:50s -0:03:50 -
  75340. +Rule    sol88    1988    only    -    Jul    2    12:04:00s -0:04:00 -
  75341. +Rule    sol88    1988    only    -    Jul    3    12:04:10s -0:04:10 -
  75342. +Rule    sol88    1988    only    -    Jul    4    12:04:25s -0:04:25 -
  75343. +Rule    sol88    1988    only    -    Jul    5    12:04:35s -0:04:35 -
  75344. +Rule    sol88    1988    only    -    Jul    6    12:04:45s -0:04:45 -
  75345. +Rule    sol88    1988    only    -    Jul    7    12:04:55s -0:04:55 -
  75346. +Rule    sol88    1988    only    -    Jul    8    12:05:05s -0:05:05 -
  75347. +Rule    sol88    1988    only    -    Jul    9    12:05:10s -0:05:10 -
  75348. +Rule    sol88    1988    only    -    Jul    10    12:05:20s -0:05:20 -
  75349. +Rule    sol88    1988    only    -    Jul    11    12:05:30s -0:05:30 -
  75350. +Rule    sol88    1988    only    -    Jul    12    12:05:35s -0:05:35 -
  75351. +Rule    sol88    1988    only    -    Jul    13    12:05:45s -0:05:45 -
  75352. +Rule    sol88    1988    only    -    Jul    14    12:05:50s -0:05:50 -
  75353. +Rule    sol88    1988    only    -    Jul    15    12:05:55s -0:05:55 -
  75354. +Rule    sol88    1988    only    -    Jul    16    12:06:00s -0:06:00 -
  75355. +Rule    sol88    1988    only    -    Jul    17    12:06:05s -0:06:05 -
  75356. +Rule    sol88    1988    only    -    Jul    18    12:06:10s -0:06:10 -
  75357. +Rule    sol88    1988    only    -    Jul    19    12:06:15s -0:06:15 -
  75358. +Rule    sol88    1988    only    -    Jul    20    12:06:20s -0:06:20 -
  75359. +Rule    sol88    1988    only    -    Jul    21    12:06:25s -0:06:25 -
  75360. +Rule    sol88    1988    only    -    Jul    22    12:06:25s -0:06:25 -
  75361. +Rule    sol88    1988    only    -    Jul    23    12:06:25s -0:06:25 -
  75362. +Rule    sol88    1988    only    -    Jul    24    12:06:30s -0:06:30 -
  75363. +Rule    sol88    1988    only    -    Jul    25    12:06:30s -0:06:30 -
  75364. +Rule    sol88    1988    only    -    Jul    26    12:06:30s -0:06:30 -
  75365. +Rule    sol88    1988    only    -    Jul    27    12:06:30s -0:06:30 -
  75366. +Rule    sol88    1988    only    -    Jul    28    12:06:30s -0:06:30 -
  75367. +Rule    sol88    1988    only    -    Jul    29    12:06:25s -0:06:25 -
  75368. +Rule    sol88    1988    only    -    Jul    30    12:06:25s -0:06:25 -
  75369. +Rule    sol88    1988    only    -    Jul    31    12:06:20s -0:06:20 -
  75370. +Rule    sol88    1988    only    -    Aug    1    12:06:15s -0:06:15 -
  75371. +Rule    sol88    1988    only    -    Aug    2    12:06:15s -0:06:15 -
  75372. +Rule    sol88    1988    only    -    Aug    3    12:06:10s -0:06:10 -
  75373. +Rule    sol88    1988    only    -    Aug    4    12:06:05s -0:06:05 -
  75374. +Rule    sol88    1988    only    -    Aug    5    12:05:55s -0:05:55 -
  75375. +Rule    sol88    1988    only    -    Aug    6    12:05:50s -0:05:50 -
  75376. +Rule    sol88    1988    only    -    Aug    7    12:05:45s -0:05:45 -
  75377. +Rule    sol88    1988    only    -    Aug    8    12:05:35s -0:05:35 -
  75378. +Rule    sol88    1988    only    -    Aug    9    12:05:25s -0:05:25 -
  75379. +Rule    sol88    1988    only    -    Aug    10    12:05:20s -0:05:20 -
  75380. +Rule    sol88    1988    only    -    Aug    11    12:05:10s -0:05:10 -
  75381. +Rule    sol88    1988    only    -    Aug    12    12:05:00s -0:05:00 -
  75382. +Rule    sol88    1988    only    -    Aug    13    12:04:50s -0:04:50 -
  75383. +Rule    sol88    1988    only    -    Aug    14    12:04:35s -0:04:35 -
  75384. +Rule    sol88    1988    only    -    Aug    15    12:04:25s -0:04:25 -
  75385. +Rule    sol88    1988    only    -    Aug    16    12:04:15s -0:04:15 -
  75386. +Rule    sol88    1988    only    -    Aug    17    12:04:00s -0:04:00 -
  75387. +Rule    sol88    1988    only    -    Aug    18    12:03:50s -0:03:50 -
  75388. +Rule    sol88    1988    only    -    Aug    19    12:03:35s -0:03:35 -
  75389. +Rule    sol88    1988    only    -    Aug    20    12:03:20s -0:03:20 -
  75390. +Rule    sol88    1988    only    -    Aug    21    12:03:05s -0:03:05 -
  75391. +Rule    sol88    1988    only    -    Aug    22    12:02:50s -0:02:50 -
  75392. +Rule    sol88    1988    only    -    Aug    23    12:02:35s -0:02:35 -
  75393. +Rule    sol88    1988    only    -    Aug    24    12:02:20s -0:02:20 -
  75394. +Rule    sol88    1988    only    -    Aug    25    12:02:00s -0:02:00 -
  75395. +Rule    sol88    1988    only    -    Aug    26    12:01:45s -0:01:45 -
  75396. +Rule    sol88    1988    only    -    Aug    27    12:01:30s -0:01:30 -
  75397. +Rule    sol88    1988    only    -    Aug    28    12:01:10s -0:01:10 -
  75398. +Rule    sol88    1988    only    -    Aug    29    12:00:50s -0:00:50 -
  75399. +Rule    sol88    1988    only    -    Aug    30    12:00:35s -0:00:35 -
  75400. +Rule    sol88    1988    only    -    Aug    31    12:00:15s -0:00:15 -
  75401. +Rule    sol88    1988    only    -    Sep    1    11:59:55s 0:00:05 -
  75402. +Rule    sol88    1988    only    -    Sep    2    11:59:35s 0:00:25 -
  75403. +Rule    sol88    1988    only    -    Sep    3    11:59:20s 0:00:40 -
  75404. +Rule    sol88    1988    only    -    Sep    4    11:59:00s 0:01:00 -
  75405. +Rule    sol88    1988    only    -    Sep    5    11:58:40s 0:01:20 -
  75406. +Rule    sol88    1988    only    -    Sep    6    11:58:20s 0:01:40 -
  75407. +Rule    sol88    1988    only    -    Sep    7    11:58:00s 0:02:00 -
  75408. +Rule    sol88    1988    only    -    Sep    8    11:57:35s 0:02:25 -
  75409. +Rule    sol88    1988    only    -    Sep    9    11:57:15s 0:02:45 -
  75410. +Rule    sol88    1988    only    -    Sep    10    11:56:55s 0:03:05 -
  75411. +Rule    sol88    1988    only    -    Sep    11    11:56:35s 0:03:25 -
  75412. +Rule    sol88    1988    only    -    Sep    12    11:56:15s 0:03:45 -
  75413. +Rule    sol88    1988    only    -    Sep    13    11:55:50s 0:04:10 -
  75414. +Rule    sol88    1988    only    -    Sep    14    11:55:30s 0:04:30 -
  75415. +Rule    sol88    1988    only    -    Sep    15    11:55:10s 0:04:50 -
  75416. +Rule    sol88    1988    only    -    Sep    16    11:54:50s 0:05:10 -
  75417. +Rule    sol88    1988    only    -    Sep    17    11:54:25s 0:05:35 -
  75418. +Rule    sol88    1988    only    -    Sep    18    11:54:05s 0:05:55 -
  75419. +Rule    sol88    1988    only    -    Sep    19    11:53:45s 0:06:15 -
  75420. +Rule    sol88    1988    only    -    Sep    20    11:53:25s 0:06:35 -
  75421. +Rule    sol88    1988    only    -    Sep    21    11:53:00s 0:07:00 -
  75422. +Rule    sol88    1988    only    -    Sep    22    11:52:40s 0:07:20 -
  75423. +Rule    sol88    1988    only    -    Sep    23    11:52:20s 0:07:40 -
  75424. +Rule    sol88    1988    only    -    Sep    24    11:52:00s 0:08:00 -
  75425. +Rule    sol88    1988    only    -    Sep    25    11:51:40s 0:08:20 -
  75426. +Rule    sol88    1988    only    -    Sep    26    11:51:15s 0:08:45 -
  75427. +Rule    sol88    1988    only    -    Sep    27    11:50:55s 0:09:05 -
  75428. +Rule    sol88    1988    only    -    Sep    28    11:50:35s 0:09:25 -
  75429. +Rule    sol88    1988    only    -    Sep    29    11:50:15s 0:09:45 -
  75430. +Rule    sol88    1988    only    -    Sep    30    11:49:55s 0:10:05 -
  75431. +Rule    sol88    1988    only    -    Oct    1    11:49:35s 0:10:25 -
  75432. +Rule    sol88    1988    only    -    Oct    2    11:49:20s 0:10:40 -
  75433. +Rule    sol88    1988    only    -    Oct    3    11:49:00s 0:11:00 -
  75434. +Rule    sol88    1988    only    -    Oct    4    11:48:40s 0:11:20 -
  75435. +Rule    sol88    1988    only    -    Oct    5    11:48:25s 0:11:35 -
  75436. +Rule    sol88    1988    only    -    Oct    6    11:48:05s 0:11:55 -
  75437. +Rule    sol88    1988    only    -    Oct    7    11:47:50s 0:12:10 -
  75438. +Rule    sol88    1988    only    -    Oct    8    11:47:30s 0:12:30 -
  75439. +Rule    sol88    1988    only    -    Oct    9    11:47:15s 0:12:45 -
  75440. +Rule    sol88    1988    only    -    Oct    10    11:47:00s 0:13:00 -
  75441. +Rule    sol88    1988    only    -    Oct    11    11:46:45s 0:13:15 -
  75442. +Rule    sol88    1988    only    -    Oct    12    11:46:30s 0:13:30 -
  75443. +Rule    sol88    1988    only    -    Oct    13    11:46:15s 0:13:45 -
  75444. +Rule    sol88    1988    only    -    Oct    14    11:46:00s 0:14:00 -
  75445. +Rule    sol88    1988    only    -    Oct    15    11:45:45s 0:14:15 -
  75446. +Rule    sol88    1988    only    -    Oct    16    11:45:35s 0:14:25 -
  75447. +Rule    sol88    1988    only    -    Oct    17    11:45:20s 0:14:40 -
  75448. +Rule    sol88    1988    only    -    Oct    18    11:45:10s 0:14:50 -
  75449. +Rule    sol88    1988    only    -    Oct    19    11:45:00s 0:15:00 -
  75450. +Rule    sol88    1988    only    -    Oct    20    11:44:45s 0:15:15 -
  75451. +Rule    sol88    1988    only    -    Oct    21    11:44:40s 0:15:20 -
  75452. +Rule    sol88    1988    only    -    Oct    22    11:44:30s 0:15:30 -
  75453. +Rule    sol88    1988    only    -    Oct    23    11:44:20s 0:15:40 -
  75454. +Rule    sol88    1988    only    -    Oct    24    11:44:10s 0:15:50 -
  75455. +Rule    sol88    1988    only    -    Oct    25    11:44:05s 0:15:55 -
  75456. +Rule    sol88    1988    only    -    Oct    26    11:44:00s 0:16:00 -
  75457. +Rule    sol88    1988    only    -    Oct    27    11:43:55s 0:16:05 -
  75458. +Rule    sol88    1988    only    -    Oct    28    11:43:50s 0:16:10 -
  75459. +Rule    sol88    1988    only    -    Oct    29    11:43:45s 0:16:15 -
  75460. +Rule    sol88    1988    only    -    Oct    30    11:43:40s 0:16:20 -
  75461. +Rule    sol88    1988    only    -    Oct    31    11:43:40s 0:16:20 -
  75462. +Rule    sol88    1988    only    -    Nov    1    11:43:35s 0:16:25 -
  75463. +Rule    sol88    1988    only    -    Nov    2    11:43:35s 0:16:25 -
  75464. +Rule    sol88    1988    only    -    Nov    3    11:43:35s 0:16:25 -
  75465. +Rule    sol88    1988    only    -    Nov    4    11:43:35s 0:16:25 -
  75466. +Rule    sol88    1988    only    -    Nov    5    11:43:40s 0:16:20 -
  75467. +Rule    sol88    1988    only    -    Nov    6    11:43:40s 0:16:20 -
  75468. +Rule    sol88    1988    only    -    Nov    7    11:43:45s 0:16:15 -
  75469. +Rule    sol88    1988    only    -    Nov    8    11:43:45s 0:16:15 -
  75470. +Rule    sol88    1988    only    -    Nov    9    11:43:50s 0:16:10 -
  75471. +Rule    sol88    1988    only    -    Nov    10    11:44:00s 0:16:00 -
  75472. +Rule    sol88    1988    only    -    Nov    11    11:44:05s 0:15:55 -
  75473. +Rule    sol88    1988    only    -    Nov    12    11:44:10s 0:15:50 -
  75474. +Rule    sol88    1988    only    -    Nov    13    11:44:20s 0:15:40 -
  75475. +Rule    sol88    1988    only    -    Nov    14    11:44:30s 0:15:30 -
  75476. +Rule    sol88    1988    only    -    Nov    15    11:44:40s 0:15:20 -
  75477. +Rule    sol88    1988    only    -    Nov    16    11:44:50s 0:15:10 -
  75478. +Rule    sol88    1988    only    -    Nov    17    11:45:00s 0:15:00 -
  75479. +Rule    sol88    1988    only    -    Nov    18    11:45:15s 0:14:45 -
  75480. +Rule    sol88    1988    only    -    Nov    19    11:45:25s 0:14:35 -
  75481. +Rule    sol88    1988    only    -    Nov    20    11:45:40s 0:14:20 -
  75482. +Rule    sol88    1988    only    -    Nov    21    11:45:55s 0:14:05 -
  75483. +Rule    sol88    1988    only    -    Nov    22    11:46:10s 0:13:50 -
  75484. +Rule    sol88    1988    only    -    Nov    23    11:46:30s 0:13:30 -
  75485. +Rule    sol88    1988    only    -    Nov    24    11:46:45s 0:13:15 -
  75486. +Rule    sol88    1988    only    -    Nov    25    11:47:05s 0:12:55 -
  75487. +Rule    sol88    1988    only    -    Nov    26    11:47:20s 0:12:40 -
  75488. +Rule    sol88    1988    only    -    Nov    27    11:47:40s 0:12:20 -
  75489. +Rule    sol88    1988    only    -    Nov    28    11:48:00s 0:12:00 -
  75490. +Rule    sol88    1988    only    -    Nov    29    11:48:25s 0:11:35 -
  75491. +Rule    sol88    1988    only    -    Nov    30    11:48:45s 0:11:15 -
  75492. +Rule    sol88    1988    only    -    Dec    1    11:49:05s 0:10:55 -
  75493. +Rule    sol88    1988    only    -    Dec    2    11:49:30s 0:10:30 -
  75494. +Rule    sol88    1988    only    -    Dec    3    11:49:55s 0:10:05 -
  75495. +Rule    sol88    1988    only    -    Dec    4    11:50:15s 0:09:45 -
  75496. +Rule    sol88    1988    only    -    Dec    5    11:50:40s 0:09:20 -
  75497. +Rule    sol88    1988    only    -    Dec    6    11:51:05s 0:08:55 -
  75498. +Rule    sol88    1988    only    -    Dec    7    11:51:35s 0:08:25 -
  75499. +Rule    sol88    1988    only    -    Dec    8    11:52:00s 0:08:00 -
  75500. +Rule    sol88    1988    only    -    Dec    9    11:52:25s 0:07:35 -
  75501. +Rule    sol88    1988    only    -    Dec    10    11:52:55s 0:07:05 -
  75502. +Rule    sol88    1988    only    -    Dec    11    11:53:20s 0:06:40 -
  75503. +Rule    sol88    1988    only    -    Dec    12    11:53:50s 0:06:10 -
  75504. +Rule    sol88    1988    only    -    Dec    13    11:54:15s 0:05:45 -
  75505. +Rule    sol88    1988    only    -    Dec    14    11:54:45s 0:05:15 -
  75506. +Rule    sol88    1988    only    -    Dec    15    11:55:15s 0:04:45 -
  75507. +Rule    sol88    1988    only    -    Dec    16    11:55:45s 0:04:15 -
  75508. +Rule    sol88    1988    only    -    Dec    17    11:56:15s 0:03:45 -
  75509. +Rule    sol88    1988    only    -    Dec    18    11:56:40s 0:03:20 -
  75510. +Rule    sol88    1988    only    -    Dec    19    11:57:10s 0:02:50 -
  75511. +Rule    sol88    1988    only    -    Dec    20    11:57:40s 0:02:20 -
  75512. +Rule    sol88    1988    only    -    Dec    21    11:58:10s 0:01:50 -
  75513. +Rule    sol88    1988    only    -    Dec    22    11:58:40s 0:01:20 -
  75514. +Rule    sol88    1988    only    -    Dec    23    11:59:10s 0:00:50 -
  75515. +Rule    sol88    1988    only    -    Dec    24    11:59:40s 0:00:20 -
  75516. +Rule    sol88    1988    only    -    Dec    25    12:00:10s -0:00:10 -
  75517. +Rule    sol88    1988    only    -    Dec    26    12:00:40s -0:00:40 -
  75518. +Rule    sol88    1988    only    -    Dec    27    12:01:10s -0:01:10 -
  75519. +Rule    sol88    1988    only    -    Dec    28    12:01:40s -0:01:40 -
  75520. +Rule    sol88    1988    only    -    Dec    29    12:02:10s -0:02:10 -
  75521. +Rule    sol88    1988    only    -    Dec    30    12:02:35s -0:02:35 -
  75522. +Rule    sol88    1988    only    -    Dec    31    12:03:05s -0:03:05 -
  75523. +
  75524. +# Riyadh is at about 46 degrees 46 minutes East:  3 hrs, 7 mins, 4 secs
  75525. +# Before and after 1988, we'll operate on local mean solar time.
  75526. +
  75527. +# Zone    NAME            GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  75528. +Zone    Mideast/Riyadh88    3:07:04    -        ??    1988
  75529. +                3:07:04    sol88        ??    1989
  75530. +                3:07:04    -        ??
  75531. diff -ru --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/solar89 amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/solar89
  75532. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/solar89    Wed Dec 31 17:00:00 1969
  75533. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/solar89    Sun Oct 15 17:19:53 1995
  75534. @@ -0,0 +1,391 @@
  75535. +# @(#)solar89    1.3
  75536. +
  75537. +# Apparent noon times below are for Riyadh; they're a bit off for other places.
  75538. +# Times were computed using a formula provided by the U. S. Naval Observatory:
  75539. +#    eqt = -105.8 * sin(l) + 596.2 * sin(2 * l) + 4.4 * sin(3 * l)
  75540. +#        -12.7 * sin(4 * l) - 429.0 * cos(l) - 2.1 * cos (2 * l)
  75541. +#        + 19.3 * cos(3 * l);
  75542. +# where l is the "mean longitude of the Sun" given by
  75543. +#    l = 279.642 degrees + 0.985647 * d
  75544. +# and d is the interval in days from January 0, 0 hours Universal Time
  75545. +# (equaling the day of the year plus the fraction of a day from zero hours).
  75546. +# The accuracy of the formula is plus or minus three seconds.
  75547. +#
  75548. +# Rounding to the nearest five seconds results in fewer than
  75549. +# 256 different "time types"--a limit that's faced because time types are
  75550. +# stored on disk as unsigned chars.
  75551. +
  75552. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  75553. +Rule    sol89    1989    only    -    Jan    1    12:03:35s -0:03:35 -
  75554. +Rule    sol89    1989    only    -    Jan    2    12:04:05s -0:04:05 -
  75555. +Rule    sol89    1989    only    -    Jan    3    12:04:30s -0:04:30 -
  75556. +Rule    sol89    1989    only    -    Jan    4    12:05:00s -0:05:00 -
  75557. +Rule    sol89    1989    only    -    Jan    5    12:05:25s -0:05:25 -
  75558. +Rule    sol89    1989    only    -    Jan    6    12:05:50s -0:05:50 -
  75559. +Rule    sol89    1989    only    -    Jan    7    12:06:15s -0:06:15 -
  75560. +Rule    sol89    1989    only    -    Jan    8    12:06:45s -0:06:45 -
  75561. +Rule    sol89    1989    only    -    Jan    9    12:07:10s -0:07:10 -
  75562. +Rule    sol89    1989    only    -    Jan    10    12:07:35s -0:07:35 -
  75563. +Rule    sol89    1989    only    -    Jan    11    12:07:55s -0:07:55 -
  75564. +Rule    sol89    1989    only    -    Jan    12    12:08:20s -0:08:20 -
  75565. +Rule    sol89    1989    only    -    Jan    13    12:08:45s -0:08:45 -
  75566. +Rule    sol89    1989    only    -    Jan    14    12:09:05s -0:09:05 -
  75567. +Rule    sol89    1989    only    -    Jan    15    12:09:25s -0:09:25 -
  75568. +Rule    sol89    1989    only    -    Jan    16    12:09:45s -0:09:45 -
  75569. +Rule    sol89    1989    only    -    Jan    17    12:10:05s -0:10:05 -
  75570. +Rule    sol89    1989    only    -    Jan    18    12:10:25s -0:10:25 -
  75571. +Rule    sol89    1989    only    -    Jan    19    12:10:45s -0:10:45 -
  75572. +Rule    sol89    1989    only    -    Jan    20    12:11:05s -0:11:05 -
  75573. +Rule    sol89    1989    only    -    Jan    21    12:11:20s -0:11:20 -
  75574. +Rule    sol89    1989    only    -    Jan    22    12:11:35s -0:11:35 -
  75575. +Rule    sol89    1989    only    -    Jan    23    12:11:55s -0:11:55 -
  75576. +Rule    sol89    1989    only    -    Jan    24    12:12:10s -0:12:10 -
  75577. +Rule    sol89    1989    only    -    Jan    25    12:12:20s -0:12:20 -
  75578. +Rule    sol89    1989    only    -    Jan    26    12:12:35s -0:12:35 -
  75579. +Rule    sol89    1989    only    -    Jan    27    12:12:50s -0:12:50 -
  75580. +Rule    sol89    1989    only    -    Jan    28    12:13:00s -0:13:00 -
  75581. +Rule    sol89    1989    only    -    Jan    29    12:13:10s -0:13:10 -
  75582. +Rule    sol89    1989    only    -    Jan    30    12:13:20s -0:13:20 -
  75583. +Rule    sol89    1989    only    -    Jan    31    12:13:30s -0:13:30 -
  75584. +Rule    sol89    1989    only    -    Feb    1    12:13:40s -0:13:40 -
  75585. +Rule    sol89    1989    only    -    Feb    2    12:13:45s -0:13:45 -
  75586. +Rule    sol89    1989    only    -    Feb    3    12:13:55s -0:13:55 -
  75587. +Rule    sol89    1989    only    -    Feb    4    12:14:00s -0:14:00 -
  75588. +Rule    sol89    1989    only    -    Feb    5    12:14:05s -0:14:05 -
  75589. +Rule    sol89    1989    only    -    Feb    6    12:14:10s -0:14:10 -
  75590. +Rule    sol89    1989    only    -    Feb    7    12:14:10s -0:14:10 -
  75591. +Rule    sol89    1989    only    -    Feb    8    12:14:15s -0:14:15 -
  75592. +Rule    sol89    1989    only    -    Feb    9    12:14:15s -0:14:15 -
  75593. +Rule    sol89    1989    only    -    Feb    10    12:14:20s -0:14:20 -
  75594. +Rule    sol89    1989    only    -    Feb    11    12:14:20s -0:14:20 -
  75595. +Rule    sol89    1989    only    -    Feb    12    12:14:20s -0:14:20 -
  75596. +Rule    sol89    1989    only    -    Feb    13    12:14:15s -0:14:15 -
  75597. +Rule    sol89    1989    only    -    Feb    14    12:14:15s -0:14:15 -
  75598. +Rule    sol89    1989    only    -    Feb    15    12:14:10s -0:14:10 -
  75599. +Rule    sol89    1989    only    -    Feb    16    12:14:10s -0:14:10 -
  75600. +Rule    sol89    1989    only    -    Feb    17    12:14:05s -0:14:05 -
  75601. +Rule    sol89    1989    only    -    Feb    18    12:14:00s -0:14:00 -
  75602. +Rule    sol89    1989    only    -    Feb    19    12:13:55s -0:13:55 -
  75603. +Rule    sol89    1989    only    -    Feb    20    12:13:50s -0:13:50 -
  75604. +Rule    sol89    1989    only    -    Feb    21    12:13:40s -0:13:40 -
  75605. +Rule    sol89    1989    only    -    Feb    22    12:13:35s -0:13:35 -
  75606. +Rule    sol89    1989    only    -    Feb    23    12:13:25s -0:13:25 -
  75607. +Rule    sol89    1989    only    -    Feb    24    12:13:15s -0:13:15 -
  75608. +Rule    sol89    1989    only    -    Feb    25    12:13:05s -0:13:05 -
  75609. +Rule    sol89    1989    only    -    Feb    26    12:12:55s -0:12:55 -
  75610. +Rule    sol89    1989    only    -    Feb    27    12:12:45s -0:12:45 -
  75611. +Rule    sol89    1989    only    -    Feb    28    12:12:35s -0:12:35 -
  75612. +Rule    sol89    1989    only    -    Mar    1    12:12:25s -0:12:25 -
  75613. +Rule    sol89    1989    only    -    Mar    2    12:12:10s -0:12:10 -
  75614. +Rule    sol89    1989    only    -    Mar    3    12:12:00s -0:12:00 -
  75615. +Rule    sol89    1989    only    -    Mar    4    12:11:45s -0:11:45 -
  75616. +Rule    sol89    1989    only    -    Mar    5    12:11:35s -0:11:35 -
  75617. +Rule    sol89    1989    only    -    Mar    6    12:11:20s -0:11:20 -
  75618. +Rule    sol89    1989    only    -    Mar    7    12:11:05s -0:11:05 -
  75619. +Rule    sol89    1989    only    -    Mar    8    12:10:50s -0:10:50 -
  75620. +Rule    sol89    1989    only    -    Mar    9    12:10:35s -0:10:35 -
  75621. +Rule    sol89    1989    only    -    Mar    10    12:10:20s -0:10:20 -
  75622. +Rule    sol89    1989    only    -    Mar    11    12:10:05s -0:10:05 -
  75623. +Rule    sol89    1989    only    -    Mar    12    12:09:50s -0:09:50 -
  75624. +Rule    sol89    1989    only    -    Mar    13    12:09:30s -0:09:30 -
  75625. +Rule    sol89    1989    only    -    Mar    14    12:09:15s -0:09:15 -
  75626. +Rule    sol89    1989    only    -    Mar    15    12:09:00s -0:09:00 -
  75627. +Rule    sol89    1989    only    -    Mar    16    12:08:40s -0:08:40 -
  75628. +Rule    sol89    1989    only    -    Mar    17    12:08:25s -0:08:25 -
  75629. +Rule    sol89    1989    only    -    Mar    18    12:08:05s -0:08:05 -
  75630. +Rule    sol89    1989    only    -    Mar    19    12:07:50s -0:07:50 -
  75631. +Rule    sol89    1989    only    -    Mar    20    12:07:30s -0:07:30 -
  75632. +Rule    sol89    1989    only    -    Mar    21    12:07:15s -0:07:15 -
  75633. +Rule    sol89    1989    only    -    Mar    22    12:06:55s -0:06:55 -
  75634. +Rule    sol89    1989    only    -    Mar    23    12:06:35s -0:06:35 -
  75635. +Rule    sol89    1989    only    -    Mar    24    12:06:20s -0:06:20 -
  75636. +Rule    sol89    1989    only    -    Mar    25    12:06:00s -0:06:00 -
  75637. +Rule    sol89    1989    only    -    Mar    26    12:05:40s -0:05:40 -
  75638. +Rule    sol89    1989    only    -    Mar    27    12:05:25s -0:05:25 -
  75639. +Rule    sol89    1989    only    -    Mar    28    12:05:05s -0:05:05 -
  75640. +Rule    sol89    1989    only    -    Mar    29    12:04:50s -0:04:50 -
  75641. +Rule    sol89    1989    only    -    Mar    30    12:04:30s -0:04:30 -
  75642. +Rule    sol89    1989    only    -    Mar    31    12:04:10s -0:04:10 -
  75643. +Rule    sol89    1989    only    -    Apr    1    12:03:55s -0:03:55 -
  75644. +Rule    sol89    1989    only    -    Apr    2    12:03:35s -0:03:35 -
  75645. +Rule    sol89    1989    only    -    Apr    3    12:03:20s -0:03:20 -
  75646. +Rule    sol89    1989    only    -    Apr    4    12:03:00s -0:03:00 -
  75647. +Rule    sol89    1989    only    -    Apr    5    12:02:45s -0:02:45 -
  75648. +Rule    sol89    1989    only    -    Apr    6    12:02:25s -0:02:25 -
  75649. +Rule    sol89    1989    only    -    Apr    7    12:02:10s -0:02:10 -
  75650. +Rule    sol89    1989    only    -    Apr    8    12:01:50s -0:01:50 -
  75651. +Rule    sol89    1989    only    -    Apr    9    12:01:35s -0:01:35 -
  75652. +Rule    sol89    1989    only    -    Apr    10    12:01:20s -0:01:20 -
  75653. +Rule    sol89    1989    only    -    Apr    11    12:01:05s -0:01:05 -
  75654. +Rule    sol89    1989    only    -    Apr    12    12:00:50s -0:00:50 -
  75655. +Rule    sol89    1989    only    -    Apr    13    12:00:35s -0:00:35 -
  75656. +Rule    sol89    1989    only    -    Apr    14    12:00:20s -0:00:20 -
  75657. +Rule    sol89    1989    only    -    Apr    15    12:00:05s -0:00:05 -
  75658. +Rule    sol89    1989    only    -    Apr    16    11:59:50s 0:00:10 -
  75659. +Rule    sol89    1989    only    -    Apr    17    11:59:35s 0:00:25 -
  75660. +Rule    sol89    1989    only    -    Apr    18    11:59:20s 0:00:40 -
  75661. +Rule    sol89    1989    only    -    Apr    19    11:59:10s 0:00:50 -
  75662. +Rule    sol89    1989    only    -    Apr    20    11:58:55s 0:01:05 -
  75663. +Rule    sol89    1989    only    -    Apr    21    11:58:45s 0:01:15 -
  75664. +Rule    sol89    1989    only    -    Apr    22    11:58:30s 0:01:30 -
  75665. +Rule    sol89    1989    only    -    Apr    23    11:58:20s 0:01:40 -
  75666. +Rule    sol89    1989    only    -    Apr    24    11:58:10s 0:01:50 -
  75667. +Rule    sol89    1989    only    -    Apr    25    11:58:00s 0:02:00 -
  75668. +Rule    sol89    1989    only    -    Apr    26    11:57:50s 0:02:10 -
  75669. +Rule    sol89    1989    only    -    Apr    27    11:57:40s 0:02:20 -
  75670. +Rule    sol89    1989    only    -    Apr    28    11:57:30s 0:02:30 -
  75671. +Rule    sol89    1989    only    -    Apr    29    11:57:20s 0:02:40 -
  75672. +Rule    sol89    1989    only    -    Apr    30    11:57:15s 0:02:45 -
  75673. +Rule    sol89    1989    only    -    May    1    11:57:05s 0:02:55 -
  75674. +Rule    sol89    1989    only    -    May    2    11:57:00s 0:03:00 -
  75675. +Rule    sol89    1989    only    -    May    3    11:56:50s 0:03:10 -
  75676. +Rule    sol89    1989    only    -    May    4    11:56:45s 0:03:15 -
  75677. +Rule    sol89    1989    only    -    May    5    11:56:40s 0:03:20 -
  75678. +Rule    sol89    1989    only    -    May    6    11:56:35s 0:03:25 -
  75679. +Rule    sol89    1989    only    -    May    7    11:56:30s 0:03:30 -
  75680. +Rule    sol89    1989    only    -    May    8    11:56:30s 0:03:30 -
  75681. +Rule    sol89    1989    only    -    May    9    11:56:25s 0:03:35 -
  75682. +Rule    sol89    1989    only    -    May    10    11:56:25s 0:03:35 -
  75683. +Rule    sol89    1989    only    -    May    11    11:56:20s 0:03:40 -
  75684. +Rule    sol89    1989    only    -    May    12    11:56:20s 0:03:40 -
  75685. +Rule    sol89    1989    only    -    May    13    11:56:20s 0:03:40 -
  75686. +Rule    sol89    1989    only    -    May    14    11:56:20s 0:03:40 -
  75687. +Rule    sol89    1989    only    -    May    15    11:56:20s 0:03:40 -
  75688. +Rule    sol89    1989    only    -    May    16    11:56:20s 0:03:40 -
  75689. +Rule    sol89    1989    only    -    May    17    11:56:20s 0:03:40 -
  75690. +Rule    sol89    1989    only    -    May    18    11:56:25s 0:03:35 -
  75691. +Rule    sol89    1989    only    -    May    19    11:56:25s 0:03:35 -
  75692. +Rule    sol89    1989    only    -    May    20    11:56:30s 0:03:30 -
  75693. +Rule    sol89    1989    only    -    May    21    11:56:35s 0:03:25 -
  75694. +Rule    sol89    1989    only    -    May    22    11:56:35s 0:03:25 -
  75695. +Rule    sol89    1989    only    -    May    23    11:56:40s 0:03:20 -
  75696. +Rule    sol89    1989    only    -    May    24    11:56:45s 0:03:15 -
  75697. +Rule    sol89    1989    only    -    May    25    11:56:55s 0:03:05 -
  75698. +Rule    sol89    1989    only    -    May    26    11:57:00s 0:03:00 -
  75699. +Rule    sol89    1989    only    -    May    27    11:57:05s 0:02:55 -
  75700. +Rule    sol89    1989    only    -    May    28    11:57:15s 0:02:45 -
  75701. +Rule    sol89    1989    only    -    May    29    11:57:20s 0:02:40 -
  75702. +Rule    sol89    1989    only    -    May    30    11:57:30s 0:02:30 -
  75703. +Rule    sol89    1989    only    -    May    31    11:57:35s 0:02:25 -
  75704. +Rule    sol89    1989    only    -    Jun    1    11:57:45s 0:02:15 -
  75705. +Rule    sol89    1989    only    -    Jun    2    11:57:55s 0:02:05 -
  75706. +Rule    sol89    1989    only    -    Jun    3    11:58:05s 0:01:55 -
  75707. +Rule    sol89    1989    only    -    Jun    4    11:58:15s 0:01:45 -
  75708. +Rule    sol89    1989    only    -    Jun    5    11:58:25s 0:01:35 -
  75709. +Rule    sol89    1989    only    -    Jun    6    11:58:35s 0:01:25 -
  75710. +Rule    sol89    1989    only    -    Jun    7    11:58:45s 0:01:15 -
  75711. +Rule    sol89    1989    only    -    Jun    8    11:59:00s 0:01:00 -
  75712. +Rule    sol89    1989    only    -    Jun    9    11:59:10s 0:00:50 -
  75713. +Rule    sol89    1989    only    -    Jun    10    11:59:20s 0:00:40 -
  75714. +Rule    sol89    1989    only    -    Jun    11    11:59:35s 0:00:25 -
  75715. +Rule    sol89    1989    only    -    Jun    12    11:59:45s 0:00:15 -
  75716. +Rule    sol89    1989    only    -    Jun    13    12:00:00s 0:00:00 -
  75717. +Rule    sol89    1989    only    -    Jun    14    12:00:10s -0:00:10 -
  75718. +Rule    sol89    1989    only    -    Jun    15    12:00:25s -0:00:25 -
  75719. +Rule    sol89    1989    only    -    Jun    16    12:00:35s -0:00:35 -
  75720. +Rule    sol89    1989    only    -    Jun    17    12:00:50s -0:00:50 -
  75721. +Rule    sol89    1989    only    -    Jun    18    12:01:05s -0:01:05 -
  75722. +Rule    sol89    1989    only    -    Jun    19    12:01:15s -0:01:15 -
  75723. +Rule    sol89    1989    only    -    Jun    20    12:01:30s -0:01:30 -
  75724. +Rule    sol89    1989    only    -    Jun    21    12:01:40s -0:01:40 -
  75725. +Rule    sol89    1989    only    -    Jun    22    12:01:55s -0:01:55 -
  75726. +Rule    sol89    1989    only    -    Jun    23    12:02:10s -0:02:10 -
  75727. +Rule    sol89    1989    only    -    Jun    24    12:02:20s -0:02:20 -
  75728. +Rule    sol89    1989    only    -    Jun    25    12:02:35s -0:02:35 -
  75729. +Rule    sol89    1989    only    -    Jun    26    12:02:45s -0:02:45 -
  75730. +Rule    sol89    1989    only    -    Jun    27    12:03:00s -0:03:00 -
  75731. +Rule    sol89    1989    only    -    Jun    28    12:03:10s -0:03:10 -
  75732. +Rule    sol89    1989    only    -    Jun    29    12:03:25s -0:03:25 -
  75733. +Rule    sol89    1989    only    -    Jun    30    12:03:35s -0:03:35 -
  75734. +Rule    sol89    1989    only    -    Jul    1    12:03:45s -0:03:45 -
  75735. +Rule    sol89    1989    only    -    Jul    2    12:04:00s -0:04:00 -
  75736. +Rule    sol89    1989    only    -    Jul    3    12:04:10s -0:04:10 -
  75737. +Rule    sol89    1989    only    -    Jul    4    12:04:20s -0:04:20 -
  75738. +Rule    sol89    1989    only    -    Jul    5    12:04:30s -0:04:30 -
  75739. +Rule    sol89    1989    only    -    Jul    6    12:04:40s -0:04:40 -
  75740. +Rule    sol89    1989    only    -    Jul    7    12:04:50s -0:04:50 -
  75741. +Rule    sol89    1989    only    -    Jul    8    12:05:00s -0:05:00 -
  75742. +Rule    sol89    1989    only    -    Jul    9    12:05:10s -0:05:10 -
  75743. +Rule    sol89    1989    only    -    Jul    10    12:05:20s -0:05:20 -
  75744. +Rule    sol89    1989    only    -    Jul    11    12:05:25s -0:05:25 -
  75745. +Rule    sol89    1989    only    -    Jul    12    12:05:35s -0:05:35 -
  75746. +Rule    sol89    1989    only    -    Jul    13    12:05:40s -0:05:40 -
  75747. +Rule    sol89    1989    only    -    Jul    14    12:05:50s -0:05:50 -
  75748. +Rule    sol89    1989    only    -    Jul    15    12:05:55s -0:05:55 -
  75749. +Rule    sol89    1989    only    -    Jul    16    12:06:00s -0:06:00 -
  75750. +Rule    sol89    1989    only    -    Jul    17    12:06:05s -0:06:05 -
  75751. +Rule    sol89    1989    only    -    Jul    18    12:06:10s -0:06:10 -
  75752. +Rule    sol89    1989    only    -    Jul    19    12:06:15s -0:06:15 -
  75753. +Rule    sol89    1989    only    -    Jul    20    12:06:20s -0:06:20 -
  75754. +Rule    sol89    1989    only    -    Jul    21    12:06:20s -0:06:20 -
  75755. +Rule    sol89    1989    only    -    Jul    22    12:06:25s -0:06:25 -
  75756. +Rule    sol89    1989    only    -    Jul    23    12:06:25s -0:06:25 -
  75757. +Rule    sol89    1989    only    -    Jul    24    12:06:30s -0:06:30 -
  75758. +Rule    sol89    1989    only    -    Jul    25    12:06:30s -0:06:30 -
  75759. +Rule    sol89    1989    only    -    Jul    26    12:06:30s -0:06:30 -
  75760. +Rule    sol89    1989    only    -    Jul    27    12:06:30s -0:06:30 -
  75761. +Rule    sol89    1989    only    -    Jul    28    12:06:30s -0:06:30 -
  75762. +Rule    sol89    1989    only    -    Jul    29    12:06:25s -0:06:25 -
  75763. +Rule    sol89    1989    only    -    Jul    30    12:06:25s -0:06:25 -
  75764. +Rule    sol89    1989    only    -    Jul    31    12:06:20s -0:06:20 -
  75765. +Rule    sol89    1989    only    -    Aug    1    12:06:20s -0:06:20 -
  75766. +Rule    sol89    1989    only    -    Aug    2    12:06:15s -0:06:15 -
  75767. +Rule    sol89    1989    only    -    Aug    3    12:06:10s -0:06:10 -
  75768. +Rule    sol89    1989    only    -    Aug    4    12:06:05s -0:06:05 -
  75769. +Rule    sol89    1989    only    -    Aug    5    12:06:00s -0:06:00 -
  75770. +Rule    sol89    1989    only    -    Aug    6    12:05:50s -0:05:50 -
  75771. +Rule    sol89    1989    only    -    Aug    7    12:05:45s -0:05:45 -
  75772. +Rule    sol89    1989    only    -    Aug    8    12:05:35s -0:05:35 -
  75773. +Rule    sol89    1989    only    -    Aug    9    12:05:30s -0:05:30 -
  75774. +Rule    sol89    1989    only    -    Aug    10    12:05:20s -0:05:20 -
  75775. +Rule    sol89    1989    only    -    Aug    11    12:05:10s -0:05:10 -
  75776. +Rule    sol89    1989    only    -    Aug    12    12:05:00s -0:05:00 -
  75777. +Rule    sol89    1989    only    -    Aug    13    12:04:50s -0:04:50 -
  75778. +Rule    sol89    1989    only    -    Aug    14    12:04:40s -0:04:40 -
  75779. +Rule    sol89    1989    only    -    Aug    15    12:04:30s -0:04:30 -
  75780. +Rule    sol89    1989    only    -    Aug    16    12:04:15s -0:04:15 -
  75781. +Rule    sol89    1989    only    -    Aug    17    12:04:05s -0:04:05 -
  75782. +Rule    sol89    1989    only    -    Aug    18    12:03:50s -0:03:50 -
  75783. +Rule    sol89    1989    only    -    Aug    19    12:03:35s -0:03:35 -
  75784. +Rule    sol89    1989    only    -    Aug    20    12:03:25s -0:03:25 -
  75785. +Rule    sol89    1989    only    -    Aug    21    12:03:10s -0:03:10 -
  75786. +Rule    sol89    1989    only    -    Aug    22    12:02:55s -0:02:55 -
  75787. +Rule    sol89    1989    only    -    Aug    23    12:02:40s -0:02:40 -
  75788. +Rule    sol89    1989    only    -    Aug    24    12:02:20s -0:02:20 -
  75789. +Rule    sol89    1989    only    -    Aug    25    12:02:05s -0:02:05 -
  75790. +Rule    sol89    1989    only    -    Aug    26    12:01:50s -0:01:50 -
  75791. +Rule    sol89    1989    only    -    Aug    27    12:01:30s -0:01:30 -
  75792. +Rule    sol89    1989    only    -    Aug    28    12:01:15s -0:01:15 -
  75793. +Rule    sol89    1989    only    -    Aug    29    12:00:55s -0:00:55 -
  75794. +Rule    sol89    1989    only    -    Aug    30    12:00:40s -0:00:40 -
  75795. +Rule    sol89    1989    only    -    Aug    31    12:00:20s -0:00:20 -
  75796. +Rule    sol89    1989    only    -    Sep    1    12:00:00s 0:00:00 -
  75797. +Rule    sol89    1989    only    -    Sep    2    11:59:45s 0:00:15 -
  75798. +Rule    sol89    1989    only    -    Sep    3    11:59:25s 0:00:35 -
  75799. +Rule    sol89    1989    only    -    Sep    4    11:59:05s 0:00:55 -
  75800. +Rule    sol89    1989    only    -    Sep    5    11:58:45s 0:01:15 -
  75801. +Rule    sol89    1989    only    -    Sep    6    11:58:25s 0:01:35 -
  75802. +Rule    sol89    1989    only    -    Sep    7    11:58:05s 0:01:55 -
  75803. +Rule    sol89    1989    only    -    Sep    8    11:57:45s 0:02:15 -
  75804. +Rule    sol89    1989    only    -    Sep    9    11:57:20s 0:02:40 -
  75805. +Rule    sol89    1989    only    -    Sep    10    11:57:00s 0:03:00 -
  75806. +Rule    sol89    1989    only    -    Sep    11    11:56:40s 0:03:20 -
  75807. +Rule    sol89    1989    only    -    Sep    12    11:56:20s 0:03:40 -
  75808. +Rule    sol89    1989    only    -    Sep    13    11:56:00s 0:04:00 -
  75809. +Rule    sol89    1989    only    -    Sep    14    11:55:35s 0:04:25 -
  75810. +Rule    sol89    1989    only    -    Sep    15    11:55:15s 0:04:45 -
  75811. +Rule    sol89    1989    only    -    Sep    16    11:54:55s 0:05:05 -
  75812. +Rule    sol89    1989    only    -    Sep    17    11:54:35s 0:05:25 -
  75813. +Rule    sol89    1989    only    -    Sep    18    11:54:10s 0:05:50 -
  75814. +Rule    sol89    1989    only    -    Sep    19    11:53:50s 0:06:10 -
  75815. +Rule    sol89    1989    only    -    Sep    20    11:53:30s 0:06:30 -
  75816. +Rule    sol89    1989    only    -    Sep    21    11:53:10s 0:06:50 -
  75817. +Rule    sol89    1989    only    -    Sep    22    11:52:45s 0:07:15 -
  75818. +Rule    sol89    1989    only    -    Sep    23    11:52:25s 0:07:35 -
  75819. +Rule    sol89    1989    only    -    Sep    24    11:52:05s 0:07:55 -
  75820. +Rule    sol89    1989    only    -    Sep    25    11:51:45s 0:08:15 -
  75821. +Rule    sol89    1989    only    -    Sep    26    11:51:25s 0:08:35 -
  75822. +Rule    sol89    1989    only    -    Sep    27    11:51:05s 0:08:55 -
  75823. +Rule    sol89    1989    only    -    Sep    28    11:50:40s 0:09:20 -
  75824. +Rule    sol89    1989    only    -    Sep    29    11:50:20s 0:09:40 -
  75825. +Rule    sol89    1989    only    -    Sep    30    11:50:00s 0:10:00 -
  75826. +Rule    sol89    1989    only    -    Oct    1    11:49:45s 0:10:15 -
  75827. +Rule    sol89    1989    only    -    Oct    2    11:49:25s 0:10:35 -
  75828. +Rule    sol89    1989    only    -    Oct    3    11:49:05s 0:10:55 -
  75829. +Rule    sol89    1989    only    -    Oct    4    11:48:45s 0:11:15 -
  75830. +Rule    sol89    1989    only    -    Oct    5    11:48:30s 0:11:30 -
  75831. +Rule    sol89    1989    only    -    Oct    6    11:48:10s 0:11:50 -
  75832. +Rule    sol89    1989    only    -    Oct    7    11:47:50s 0:12:10 -
  75833. +Rule    sol89    1989    only    -    Oct    8    11:47:35s 0:12:25 -
  75834. +Rule    sol89    1989    only    -    Oct    9    11:47:20s 0:12:40 -
  75835. +Rule    sol89    1989    only    -    Oct    10    11:47:00s 0:13:00 -
  75836. +Rule    sol89    1989    only    -    Oct    11    11:46:45s 0:13:15 -
  75837. +Rule    sol89    1989    only    -    Oct    12    11:46:30s 0:13:30 -
  75838. +Rule    sol89    1989    only    -    Oct    13    11:46:15s 0:13:45 -
  75839. +Rule    sol89    1989    only    -    Oct    14    11:46:00s 0:14:00 -
  75840. +Rule    sol89    1989    only    -    Oct    15    11:45:50s 0:14:10 -
  75841. +Rule    sol89    1989    only    -    Oct    16    11:45:35s 0:14:25 -
  75842. +Rule    sol89    1989    only    -    Oct    17    11:45:20s 0:14:40 -
  75843. +Rule    sol89    1989    only    -    Oct    18    11:45:10s 0:14:50 -
  75844. +Rule    sol89    1989    only    -    Oct    19    11:45:00s 0:15:00 -
  75845. +Rule    sol89    1989    only    -    Oct    20    11:44:50s 0:15:10 -
  75846. +Rule    sol89    1989    only    -    Oct    21    11:44:40s 0:15:20 -
  75847. +Rule    sol89    1989    only    -    Oct    22    11:44:30s 0:15:30 -
  75848. +Rule    sol89    1989    only    -    Oct    23    11:44:20s 0:15:40 -
  75849. +Rule    sol89    1989    only    -    Oct    24    11:44:10s 0:15:50 -
  75850. +Rule    sol89    1989    only    -    Oct    25    11:44:05s 0:15:55 -
  75851. +Rule    sol89    1989    only    -    Oct    26    11:44:00s 0:16:00 -
  75852. +Rule    sol89    1989    only    -    Oct    27    11:43:50s 0:16:10 -
  75853. +Rule    sol89    1989    only    -    Oct    28    11:43:45s 0:16:15 -
  75854. +Rule    sol89    1989    only    -    Oct    29    11:43:40s 0:16:20 -
  75855. +Rule    sol89    1989    only    -    Oct    30    11:43:40s 0:16:20 -
  75856. +Rule    sol89    1989    only    -    Oct    31    11:43:35s 0:16:25 -
  75857. +Rule    sol89    1989    only    -    Nov    1    11:43:35s 0:16:25 -
  75858. +Rule    sol89    1989    only    -    Nov    2    11:43:35s 0:16:25 -
  75859. +Rule    sol89    1989    only    -    Nov    3    11:43:30s 0:16:30 -
  75860. +Rule    sol89    1989    only    -    Nov    4    11:43:35s 0:16:25 -
  75861. +Rule    sol89    1989    only    -    Nov    5    11:43:35s 0:16:25 -
  75862. +Rule    sol89    1989    only    -    Nov    6    11:43:35s 0:16:25 -
  75863. +Rule    sol89    1989    only    -    Nov    7    11:43:40s 0:16:20 -
  75864. +Rule    sol89    1989    only    -    Nov    8    11:43:45s 0:16:15 -
  75865. +Rule    sol89    1989    only    -    Nov    9    11:43:50s 0:16:10 -
  75866. +Rule    sol89    1989    only    -    Nov    10    11:43:55s 0:16:05 -
  75867. +Rule    sol89    1989    only    -    Nov    11    11:44:00s 0:16:00 -
  75868. +Rule    sol89    1989    only    -    Nov    12    11:44:05s 0:15:55 -
  75869. +Rule    sol89    1989    only    -    Nov    13    11:44:15s 0:15:45 -
  75870. +Rule    sol89    1989    only    -    Nov    14    11:44:25s 0:15:35 -
  75871. +Rule    sol89    1989    only    -    Nov    15    11:44:35s 0:15:25 -
  75872. +Rule    sol89    1989    only    -    Nov    16    11:44:45s 0:15:15 -
  75873. +Rule    sol89    1989    only    -    Nov    17    11:44:55s 0:15:05 -
  75874. +Rule    sol89    1989    only    -    Nov    18    11:45:10s 0:14:50 -
  75875. +Rule    sol89    1989    only    -    Nov    19    11:45:20s 0:14:40 -
  75876. +Rule    sol89    1989    only    -    Nov    20    11:45:35s 0:14:25 -
  75877. +Rule    sol89    1989    only    -    Nov    21    11:45:50s 0:14:10 -
  75878. +Rule    sol89    1989    only    -    Nov    22    11:46:05s 0:13:55 -
  75879. +Rule    sol89    1989    only    -    Nov    23    11:46:25s 0:13:35 -
  75880. +Rule    sol89    1989    only    -    Nov    24    11:46:40s 0:13:20 -
  75881. +Rule    sol89    1989    only    -    Nov    25    11:47:00s 0:13:00 -
  75882. +Rule    sol89    1989    only    -    Nov    26    11:47:20s 0:12:40 -
  75883. +Rule    sol89    1989    only    -    Nov    27    11:47:35s 0:12:25 -
  75884. +Rule    sol89    1989    only    -    Nov    28    11:47:55s 0:12:05 -
  75885. +Rule    sol89    1989    only    -    Nov    29    11:48:20s 0:11:40 -
  75886. +Rule    sol89    1989    only    -    Nov    30    11:48:40s 0:11:20 -
  75887. +Rule    sol89    1989    only    -    Dec    1    11:49:00s 0:11:00 -
  75888. +Rule    sol89    1989    only    -    Dec    2    11:49:25s 0:10:35 -
  75889. +Rule    sol89    1989    only    -    Dec    3    11:49:50s 0:10:10 -
  75890. +Rule    sol89    1989    only    -    Dec    4    11:50:15s 0:09:45 -
  75891. +Rule    sol89    1989    only    -    Dec    5    11:50:35s 0:09:25 -
  75892. +Rule    sol89    1989    only    -    Dec    6    11:51:00s 0:09:00 -
  75893. +Rule    sol89    1989    only    -    Dec    7    11:51:30s 0:08:30 -
  75894. +Rule    sol89    1989    only    -    Dec    8    11:51:55s 0:08:05 -
  75895. +Rule    sol89    1989    only    -    Dec    9    11:52:20s 0:07:40 -
  75896. +Rule    sol89    1989    only    -    Dec    10    11:52:50s 0:07:10 -
  75897. +Rule    sol89    1989    only    -    Dec    11    11:53:15s 0:06:45 -
  75898. +Rule    sol89    1989    only    -    Dec    12    11:53:45s 0:06:15 -
  75899. +Rule    sol89    1989    only    -    Dec    13    11:54:10s 0:05:50 -
  75900. +Rule    sol89    1989    only    -    Dec    14    11:54:40s 0:05:20 -
  75901. +Rule    sol89    1989    only    -    Dec    15    11:55:10s 0:04:50 -
  75902. +Rule    sol89    1989    only    -    Dec    16    11:55:40s 0:04:20 -
  75903. +Rule    sol89    1989    only    -    Dec    17    11:56:05s 0:03:55 -
  75904. +Rule    sol89    1989    only    -    Dec    18    11:56:35s 0:03:25 -
  75905. +Rule    sol89    1989    only    -    Dec    19    11:57:05s 0:02:55 -
  75906. +Rule    sol89    1989    only    -    Dec    20    11:57:35s 0:02:25 -
  75907. +Rule    sol89    1989    only    -    Dec    21    11:58:05s 0:01:55 -
  75908. +Rule    sol89    1989    only    -    Dec    22    11:58:35s 0:01:25 -
  75909. +Rule    sol89    1989    only    -    Dec    23    11:59:05s 0:00:55 -
  75910. +Rule    sol89    1989    only    -    Dec    24    11:59:35s 0:00:25 -
  75911. +Rule    sol89    1989    only    -    Dec    25    12:00:05s -0:00:05 -
  75912. +Rule    sol89    1989    only    -    Dec    26    12:00:35s -0:00:35 -
  75913. +Rule    sol89    1989    only    -    Dec    27    12:01:05s -0:01:05 -
  75914. +Rule    sol89    1989    only    -    Dec    28    12:01:35s -0:01:35 -
  75915. +Rule    sol89    1989    only    -    Dec    29    12:02:00s -0:02:00 -
  75916. +Rule    sol89    1989    only    -    Dec    30    12:02:30s -0:02:30 -
  75917. +Rule    sol89    1989    only    -    Dec    31    12:03:00s -0:03:00 -
  75918. +
  75919. +# Riyadh is at about 46 degrees 46 minutes East:  3 hrs, 7 mins, 4 secs
  75920. +# Before and after 1989, we'll operate on local mean solar time.
  75921. +
  75922. +# Zone    NAME            GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  75923. +Zone    Mideast/Riyadh89    3:07:04    -        ??    1989
  75924. +                3:07:04    sol89        ??    1990
  75925. +                3:07:04    -        ??
  75926. diff -ru --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/southamerica amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/southamerica
  75927. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/southamerica    Wed Dec 31 17:00:00 1969
  75928. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/southamerica    Sun Oct 15 17:19:54 1995
  75929. @@ -0,0 +1,103 @@
  75930. +# @(#)southamerica    4.3
  75931. +
  75932. +# From Guy Harris:
  75933. +# From Official Airline Guide - Worldwide Edition (1987).  Countries not
  75934. +# listed here do not observe DST, according to the OAG.  Time zone names
  75935. +# are pure inventions, and none are supplied for countries not observing
  75936. +# DST; updates from natives would be appreciated.  The times that DST
  75937. +# starts and ends are based on the assumption that they switch a 2AM just
  75938. +# as everybody else does.
  75939. +
  75940. +###############################################################################
  75941. +
  75942. +# Brazil
  75943. +
  75944. +# From Guy Harris:
  75945. +# The OAG lists October 25, 1987 and February 12, 1988 as the starting and
  75946. +# ending dates, giving them as "estimated date(s) based on previous year".  We
  75947. +# infer a rule here from one example, always a dangerous practice....  Yes,
  75948. +# they really do switch on Saturday, according to the OAG.
  75949. +# "Brazil/Acre" is for the Territory of Acre; "Brazil/DeNoronha" is for
  75950. +# Fernando De Noronha.
  75951. +
  75952. +# From Bob Devine (January 28, 1988):
  75953. +# The only information I found is that there was no DST up to 1985.
  75954. +# But there was some before 1952!
  75955. +
  75956. +# From U. S. Naval Observatory (January 16, 1989):
  75957. +# BRAZIL     WEST     5 H  BEHIND UTC    TERRITORY OF ACRE
  75958. +# BRAZIL     WEST     4 H  BEHIND UTC    ACRE OCT 23, '88-FEB 11,
  75959. +# BRAZIL                                 '89 (ESTIMATED)
  75960. +# BRAZIL     CENTRAL  4 H  BEHIND UTC    MANAUS
  75961. +# BRAZIL     CENTRAL  3 H  BEHIND UTC    MANAUS OCT 23, '88-FEB 11,
  75962. +# BRAZIL     CENTRAL                     '89 (ESTIMATED)
  75963. +# BRAZIL     EAST     3 H  BEHIND UTC    COASTAL STATES, RIO, SAO
  75964. +# BRAZIL     EAST                        PAULO, BRASILIA
  75965. +# BRAZIL     EAST     2 H  BEHIND UTC    COASTAL STATES, RIO, SAO
  75966. +# BRAZIL                                 PAULO, BRASILIA OCT 23,
  75967. +# BRAZIL                                 '88-FEB 11, '89
  75968. +# BRAZIL                                 (ESTIMATED)
  75969. +# BRAZIL              2 H  BEHIND UTC    ATLANTIC ISLANDS, FERNANDO
  75970. +# BRAZIL                                 DE NORONHA
  75971. +# BRAZIL              1 H  BEHIND UTC    OCT 23, '88-FEB 11, '89
  75972. +# BRAZIL                                 (ESTIMATED)
  75973. +# BRAZIL              3 H  BEHIND UTC    FOR MOST MAJOR AIRPORTS.
  75974. +
  75975. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  75976. +Rule    Brazil    1987    max    -    Feb    Sat<=14    2:00    0    S
  75977. +Rule    Brazil    1987    max    -    Oct    Sat<=28    2:00    1:00    D
  75978. +
  75979. +# Zone    NAME            GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  75980. +Zone    Brazil/East        -3:00    Brazil        E%sT
  75981. +Zone    Brazil/West        -4:00    Brazil        W%sT
  75982. +Zone    Brazil/Acre        -5:00    Brazil        A%sT
  75983. +Zone    Brazil/DeNoronha    -2:00    Brazil        F%sT
  75984. +
  75985. +###############################################################################
  75986. +
  75987. +# Chile
  75988. +
  75989. +# From Guy Harris:
  75990. +# The OAG lists October 11, 1987 and March 12, 1988 as the starting and
  75991. +# ending dates, giving them as "estimated date(s) based on previous year."
  75992. +
  75993. +# From Bob Devine (January 28, 1988):
  75994. +# Chile has had 2nd Sunday in October to 2nd Sunday in March DST since 1977.
  75995. +# Switch is at midnight. OAG is right.
  75996. +
  75997. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  75998. +Rule    Chile    1977    max    -    Oct    Sun>=8    0:00    1:00    D
  75999. +Rule    Chile    1978    max    -    Mar    Sun>=8    0:00    0    S
  76000. +
  76001. +# Zone    NAME            GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  76002. +Zone    Chile/Continental    -4:00    Chile        C%sT
  76003. +Zone    Chile/EasterIsland    -6:00    Chile        E%sT
  76004. +
  76005. +###############################################################################
  76006. +
  76007. +# Paraguay
  76008. +
  76009. +# From Bob Devine (January 28, 1988):
  76010. +# Paraguay: First day in October to last in March.  Midnight switch??
  76011. +# Since 1980.
  76012. +
  76013. +# From U. S. Naval Observatory (January 19, 1989):
  76014. +# PARAGUAY            4 H  BEHIND UTC
  76015. +# PARAGUAY            3 H  BEHIND UTC    OCT 1, '88-MAR 31, '89
  76016. +
  76017. +# From Arthur David Olson (January 21, 1989):
  76018. +# Still don't know time of day when switch occurs.  Punt.
  76019. +
  76020. +###############################################################################
  76021. +
  76022. +# Argentina
  76023. +
  76024. +# From Bob Devine (January 28, 1988):
  76025. +# Argentina: first Sunday in October to first Sunday in April since 1976.
  76026. +# Double Summer time from 1969 to 1974.  Switches at midnight.
  76027. +
  76028. +# From U. S. Naval Observatory (January 19, 19889):
  76029. +# ARGENTINA           3 H BEHIND   UTC
  76030. +
  76031. +# From Arthur David Olson (January 21, 1989):
  76032. +# OAG, USNO and Bob have different data.  Punt.
  76033. diff -ru --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/systemv amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/systemv
  76034. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/systemv    Wed Dec 31 17:00:00 1969
  76035. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/systemv    Sun Oct 15 17:19:56 1995
  76036. @@ -0,0 +1,35 @@
  76037. +# @(#)systemv    4.1
  76038. +
  76039. +# Old rules, should the need arise.
  76040. +# No attempt is made to handle Newfoundland, since it cannot be expressed
  76041. +# using the System V "TZ" scheme (half-hour offset), or anything outside
  76042. +# North America (no support for non-standard DST start/end dates), nor
  76043. +# the change in the DST rules in the US in 1987 (can't split between
  76044. +# Canada, with no changes, and the US)
  76045. +#
  76046. +# Be sure to compile this *without* leap second correction for true conformance.
  76047. +
  76048. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  76049. +Rule    SystemV    min    1973    -    Apr    lastSun    2:00    1:00    D
  76050. +Rule    SystemV    min    1973    -    Oct    lastSun    2:00    0    S
  76051. +Rule    SystemV    1974    only    -    Jan    6    2:00    1:00    D
  76052. +Rule    SystemV    1974    only    -    Nov    lastSun    2:00    0    S
  76053. +Rule    SystemV    1975    only    -    Feb    23    2:00    1:00    D
  76054. +Rule    SystemV    1975    only    -    Oct    lastSun    2:00    0    S
  76055. +Rule    SystemV    1976    max    -    Apr    lastSun    2:00    1:00    D
  76056. +Rule    SystemV    1976    max    -    Oct    lastSun    2:00    0    S
  76057. +
  76058. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  76059. +Zone    SystemV/AST4ADT    -4:00    SystemV        A%sT
  76060. +Zone    SystemV/EST5EDT    -5:00    SystemV        E%sT
  76061. +Zone    SystemV/CST6CDT    -6:00    SystemV        C%sT
  76062. +Zone    SystemV/MST7MDT    -7:00    SystemV        M%sT
  76063. +Zone    SystemV/PST8PDT    -8:00    SystemV        P%sT
  76064. +Zone    SystemV/YST9YDT    -9:00    SystemV        Y%sT
  76065. +Zone    SystemV/AST4    -4:00    -        AST
  76066. +Zone    SystemV/EST5    -5:00    -        EST
  76067. +Zone    SystemV/CST6    -6:00    -        CST
  76068. +Zone    SystemV/MST7    -7:00    -        MST
  76069. +Zone    SystemV/PST8    -8:00    -        PST
  76070. +Zone    SystemV/YST9    -9:00    -        YST
  76071. +Zone    SystemV/HST10    -10:00    -        HST
  76072. diff -ru --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/usno1988 amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/usno1988
  76073. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/usno1988    Wed Dec 31 17:00:00 1969
  76074. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/usno1988    Sun Oct 15 17:19:58 1995
  76075. @@ -0,0 +1,111 @@
  76076. +# @(#)usno1988    1.1
  76077. +#
  76078. +# From Arthur David Olson (January 19, 1989):
  76079. +#
  76080. +# Here's some United States Naval Observatory time zone data from
  76081. +# February 1988.  It's here mostly to convince you that the USNO has indeed
  76082. +# been updating its files (see its 1989 data elsewhere).
  76083. +#
  76084. +ANDORRA             1 H AHEAD OF UTC
  76085. +ARGENTINA           3 H BEHIND   UTC
  76086. +BRASIL   WEST       5 H BEHIND UTC        (CRUZEIRO DO SUL) 
  76087. +BRASIL   CENTRAL    4 H BEHIND UTC              (MANAUS)
  76088. +BRASIL   EAST       3 H BEHIND UTC   COASTAL STATES, RIO, SP, BRASILIA
  76089. +BRASIL              2 H BEHIND UTC   ATLANTIC ISLANDS 
  76090. +BRAZIL              5 H BEHIND UTC   WEST (CRUZEIRO DO SUL) 
  76091. +BRAZIL              4 H BEHIND UTC   CENTRAL    (MANAUS)
  76092. +BRAZIL              3 H BEHIND UTC   COASTAL STATES, RIO, SP, BRASILIA
  76093. +BRAZIL              3 H BEHIND UTC   FOR MOST MAJOR AIRPORTS. 
  76094. +BRAZIL              2 H BEHIND UTC   ATLANTIC ISLANDS 
  76095. +BULGARIA            2 H AHEAD OF UTC WINTER 
  76096. +BULGARIA            3 H AHEAD OF UTC SUMMER MAR31 - SEP 85, 0100 LOCAL
  76097. +CHINA               8 H AHEAD OF UTC; ALL OF CHINA, INCL TAIWAN 
  76098. +CUBA                5 H BEHIND UTC IN WINTER
  76099. +CUBA                4 H BEHIND UTC MAY 8 - OCT 8
  76100. +CYPRUS              2 H AHEAD UTC IN WINTER 
  76101. +CYPRUS              3 H AHEAD UTC MAR 25 - SEP 30 
  76102. +DENMARK             1 H AHEAD UTC IN WINTER 
  76103. +DENMARK             2 H AHEAD UTC MAR 31 - SEP 30  , 0200 LOCAL 
  76104. +DENMK. FAEROE IS    1 H AHEAD UTC MAR 31 - SEP 30  , 0200 LOCAL 
  76105. +EGYPT               2 H AHEAD UTC 
  76106. +EGYPT               3 H AHEAD UTC SUMMER (AFTER RAMADAN)
  76107. +ENGLAND             ON UTC IN WINTER; WALES, SCOTLAND, N.I., CH.IS. 
  76108. +ENGLAND             1 H AHEAD OF UTC; SUMMER TIL 28 OCT 0200 LOCAL
  76109. +FINLAND             2 H AHEAD OF UTC IN WINTER
  76110. +FINLAND             3 H AHEAD OF UTC MAR 25 - SEP 30  
  76111. +FRANCE              1 H AHEAD OF UTC IN WINTER
  76112. +FRANCE              2 H AHEAD OF UTC MAR 31 - SEP 30 , 0100 LOCAL 
  76113. +GREECE              2 H AHEAD OF UTC IN WINTER
  76114. +GREECE              3 H AHEAD OF UTC IN SUMMER EFF. 31MAR85 02/03 LOCAL 
  76115. +GREECE              3 H AHEAD OF UTC MAR 25 - SEP 30
  76116. +GREENLAND           4 H BEHIND UTC  IN THULE AIRBASE YEAR ROUND 
  76117. +GREENLAND           3 H BEHIND UTC  IN WINTER AT SONDRESTROM
  76118. +GREENLAND           2 H BEHIND UTC  30 MAR - 30 SEP 2200 LOCAL AT -"- 
  76119. +GREENLAND           2 H BEHIND UTC  AROUND SCORESBY SUND
  76120. +ICELAND             ON UTC
  76121. +IRAN                3.5H AHEAD OF UTC 
  76122. +IRELAND             ON UTC IN WINTER
  76123. +IRELAND             1 H AHEAD OF UTC MAR 31 - OCT 23  0200 LOCAL
  76124. +ITALY               1 H AHEAD OF UTC IN WINTER
  76125. +ITALY               2 H AHEAD OF UTC MAR 31 - SEP 30, 0030 LOCAL
  76126. +JAMAICA             5 H BEHIND UTC IN WINTER
  76127. +JAMAICA             4 H BEHIND UTC APR 29 - OCT 29
  76128. +LIBYA               2 H AHEAD OF UTC
  76129. +MEXICO BAJA CAL N   8 H BEHIND UTC IN WINTER; NORTH BAJA CAL, TIJUANA 
  76130. +MEXICO BAJA CAL N   7 H BEHIND UTC APR 29 - OCT 29
  76131. +MEXICO BAJA CAL S   7 H BEHIND UTC ALL YEAR; MAZATLAN 
  76132. +MEXICO CENTRAL      6 H BEHIND UTC ALL YEAR; MEXICO CITY
  76133. +MONACO              1 H AHEAD UTC IN WINTER 
  76134. +MONACO              2 H AHEAD UTC MAR 25 - SEP30
  76135. +PARAGUAY            4 H BEHIND UTC IN WINTER
  76136. +PARAGUAY            3 H BEHIND UTC SEP 30 - MAR 30
  76137. +POLAND              1 H AHEAD OF UTC IN WINTER
  76138. +POLAND              2 H AHEAD OF UTC MAR 24 - SEP     0200 LOCAL
  76139. +PORTUGAL            ON UTC IN WINTER
  76140. +PORTUGAL            1 H AHEAD OF UTC IN SUMMER MAR 31 - SEP 29   0100 LOCAL 
  76141. +PORTUGAL AZORES     1 H BEHIND UTC IN WINTER
  76142. +PORTUGAL AZORES     ON UTC IN SUMMER MAR 31 - SEP 29
  76143. +PORTUGAL MADEIRA    ON UTC ALL YEAR;
  76144. +ROMANIA             2 H AHEAD OF UTC IN WINTER
  76145. +ROMANIA             3 H AHEAD OF UTC APR 3 - SEP 24 
  76146. +SCOTLAND            SEE ENGLAND 
  76147. +SWITZERLAND         1 H AHEAD OF UTC IN WINTER
  76148. +SWITZERLAND         2 H AHEAD OF UTC MAR 31 - SEP 30  0200 LOCAL
  76149. +TURKEY              3 H AHEAD OF UTC
  76150. +USA   EASTERN       5 H BEHIND UTC IN WINTER; NEW YORK, WASHINGTON
  76151. +USA   EASTERN       4 H BEHIND UTC APR 29 - OCT 29
  76152. +USA   CENTRAL       6 H BEHIND UTC IN WINTER; CHICAGO, HOUSTON
  76153. +USA   CENTRAL       5 H BEHIND UTC APR 29 - OCT 29
  76154. +USA   MOUNTAIN      7 H BEHIND UTC IN WINTER; DENVER
  76155. +USA   MOUNTAIN      6 H BEHIND UTC APR 29 - OCT 29
  76156. +USA   PACIFIC       8 H BEHIND UTC IN WINTER; L.A., SAN FRANCISCO 
  76157. +USA   PACIFIC       7 H BEHIND UTC APR 29 - OCT 29
  76158. +USA   ALASKA STD    9 H BEHIND UTC IN WINTER; MOST OF ALASKA     (AKST) 
  76159. +USA   ALASKA STD    8 H BEHIND UTC APR 29 - OCT 29               (AKDT) 
  76160. +USA   ALEUTIAN     10 H BEHIND UTC IN WINTER; ISLANDS WEST OF 170W
  76161. +USA   - " -         9 H BEHIND UTC APR 29 - OCT 29
  76162. +USA   HAWAII       10 H BEHIND UTC ALL YEAR;
  76163. +USA   BERING       11 H BEHIND UTC ALL YEAR; SAMOA, MIDWAY
  76164. +USSR WEST EUROP     3 H AHEAD OF UTC IN WINTER; LENINGRAD, MOSCOW 
  76165. +USSR WEST EUROP     4 H AHEAD OF UTC APR 1 - SEP 30 
  76166. +USSR CENTRAL EUR    4 H AHEAD OF UTC IN WINTER; ROSTOV, BAKU
  76167. +USSR CENTRAL EUR    5 H AHEAD OF UTC APR 1 - SEP 30 
  76168. +USSR EAST EUROP     5 H AHEAD OF UTC IN WINTER; SVERDLOVSK
  76169. +USSR EAST EUROP     6 H AHEAD OF UTC APR 1 - SEP 30 
  76170. +USSR WEST SIBERIAN  6 H AHEAD OF UTC IN WINTER; TASHKENT, ALMA ATA
  76171. +USSR WEST SIBERIAN  7 H AHEAD OF UTC APR 1 - SEP 30 
  76172. +USSR WEST-CENTRAL   7 H AHEAD OF UTC IN WINTER; NOVOSIBIRSK 
  76173. +USSR WEST-CENTRAL   8 H AHEAD OF UTC APR 1 - SEP 30 
  76174. +USSR WEST-CENTRAL   8 H AHEAD OF UTC IN WINTER; IRKUTSK 
  76175. +USSR WEST-CENTRAL   9 H AHEAD OF UTC APR 1 - SEP 30 
  76176. +USSR CENTRAL SIB    9 H AHEAD OF UTC IN WINTER; YAKUTSK 
  76177. +USSR CENTRAL SIB   10 H AHEAD OF UTC APR 1 - SEP 30 
  76178. +USSR CENTRAL SIB   10 H AHEAD OF UTC IN WINTER; VLADIVOSTOK 
  76179. +USSR CENTRAL SIB   11 H AHEAD OF UTC APR 1 - SEP 30 
  76180. +USSR EAST SIBERIA  11 H AHEAD OF UTC IN WINTER; MAGADAN 
  76181. +USSR EAST SIBERIA  12 H AHEAD OF UTC APR 1 - SEP 30 
  76182. +USSR EAST SIBERIA  12 H AHEAD OF UTC IN WINTER; PETROPAVLOVSK 
  76183. +USSR EAST SIBERIA  13 H AHEAD OF UTC APR 1 - SEP 30 
  76184. +USSR EAST SIBERIA  13 H AHEAD OF UTC IN WINTER; UELEN 
  76185. +USSR EAST SIBERIA  14 H AHEAD OF UTC APR 1 - SEP 30 
  76186. +WALES               SEE ENGLAND 
  76187. diff -ru --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/usno1989 amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/usno1989
  76188. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/usno1989    Wed Dec 31 17:00:00 1969
  76189. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/usno1989    Sun Oct 15 17:19:59 1995
  76190. @@ -0,0 +1,452 @@
  76191. +# @(#)usno1989    1.3
  76192. +#
  76193. +# From Arthur David Olson (January 19, 1989):
  76194. +# 
  76195. +# Here's time zone information from the United States Naval Observatory;
  76196. +# no corrections have been made, and there are some obvious challenges.
  76197. +# The USNO warns:
  76198. +#    DUE TO FREQUENT CHANGES IN THE LOCAL LAWS GOVERNING DAYLIGHT
  76199. +#    SAVING TIME, WE CANNOT GUARANTEE THE ACCURACY OF THIS
  76200. +#    INFORMATION.  PLEASE ALERT US TO ANY DISCREPANCY YOU MAY
  76201. +#    DISCOVER.
  76202. +#
  76203. +AFGHANISTAN         4.5H AHEAD OF UTC
  76204. +ALBANIA             1 H  AHEAD OF UTC
  76205. +ALBANIA             2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76206. +ALBANIA                                (ESTIMATED)
  76207. +ALGERIA             1 H  AHEAD OF UTC
  76208. +AMERICAN SAMOA     11 H  BEHIND UTC
  76209. +ANDORRA             1 H  AHEAD OF UTC
  76210. +ANDORRA             2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76211. +ANDORRA                                (ESTIMATED)
  76212. +ANGOLA              1 H  AHEAD OF UTC
  76213. +ARGENTINA           3 H  BEHIND UTC
  76214. +ARUBA               4 H  BEHIND UTC    ALSO BONAIRE, CURACAO,
  76215. +ARUBA                                  ST.MAARTEN
  76216. +AUSTRALIA  WEST     8 H  AHEAD OF UTC  PERTH, EXMOUTH
  76217. +AUSTRALIA  N.T.     9.5H AHEAD OF UTC  DARWIN  NO ADVANCED TIME
  76218. +AUSTRALIA  N.T.                                IN SUMMER
  76219. +AUSTRALIA  SOUTH    9.5H AHEAD OF UTC  ADELAIDE
  76220. +AUSTRALIA                              INCLUDING BROKEN HILL, NSW
  76221. +AUSTRALIA  SOUTH   10.5H AHEAD OF UTC  ADELAIDE OCT 30, '88-MAR
  76222. +AUSTRALIA  SOUTH                       18, '89 INCLUDING BROKEN
  76223. +AUSTRIALIA SOUTH                       HILL, NSW
  76224. +AUSTRALIA  QUEENL  10 H  AHEAD OF UTC
  76225. +AUSTRALIA  NSW     10 H  AHEAD OF UTC  SYDNEY
  76226. +AUSTRALIA  NSW     11 H  AHEAD OF UTC  SYDNEY OCT 30, '88-MAR 18,
  76227. +AUSTRALIA  NSW                         '89
  76228. +AUSTRALIA  TASM.   10 H  AHEAD OF UTC  HOBART
  76229. +AUSTRALIA  TASM.   11 H  AHEAD OF UTC  HOBART OCT 30, '88-MAR 18,
  76230. +AUSTRALIA  TASM.                       '89
  76231. +AUSTRIA             1 H  AHEAD OF UTC
  76232. +AUSTRIA             2 H  AHEAD OF UTC  MAR 27 - SEPT 24
  76233. +AZORES                   SEE PORTUGAL
  76234. +BAHAMAS             5 H  BEHIND UTC    EXCLUDING TURKS AND CAICOS
  76235. +BAHAMAS                                ISLANDS)
  76236. +BAHAMAS             4 H  BEHIND UTC    APR 3 - OCT 29 (SAME
  76237. +BAHAMAS                                EXCLUSION)
  76238. +BAHRAIN             3 H  AHEAD OF UTC
  76239. +BANGLADESH          6 H  AHEAD OF UTC
  76240. +BARBADOS            4 H  BEHIND UTC
  76241. +BELGIUM             1 H  AHEAD OF UTC
  76242. +BELGIUM             2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76243. +BELIZE              6 H  BEHIND UTC
  76244. +BENIN PEOPLES REP   1 H  AHEAD OF UTC  DAHOMEY
  76245. +BERMUDA             4 H  BEHIND UTC
  76246. +BERMUDA             3 H  BEHIND UTC    APR 3 - OCT 29
  76247. +BHUTAN              6 H  AHEAD OF UTC
  76248. +BOLIVIA             4 H  BEHIND UTC
  76249. +BONAIRE             4 H  BEHIND UTC    ALSO ARUBA,CURACAO,
  76250. +BONAIRE                                ST.MAARTEN, SABA
  76251. +BOTSWANA            2 H  AHEAD OF UTC
  76252. +BRAZIL     WEST     5 H  BEHIND UTC    TERRITORY OF ACRE
  76253. +BRAZIL     WEST     4 H  BEHIND UTC    ACRE OCT 23, '88-FEB 11,
  76254. +BRAZIL                                 '89 (ESTIMATED)
  76255. +BRAZIL     CENTRAL  4 H  BEHIND UTC    MANAUS
  76256. +BRAZIL     CENTRAL  3 H  BEHIND UTC    MANAUS OCT 23, '88-FEB 11,
  76257. +BRAZIL     CENTRAL                     '89 (ESTIMATED)
  76258. +BRAZIL     EAST     3 H  BEHIND UTC    COASTAL STATES, RIO, SAO
  76259. +BRAZIL     EAST                        PAULO, BRASILIA
  76260. +BRAZIL     EAST     2 H  BEHIND UTC    COASTAL STATES, RIO, SAO
  76261. +BRAZIL                                 PAULO, BRASILIA OCT 23,
  76262. +BRAZIL                                 '88-FEB 11, '89
  76263. +BRAZIL                                 (ESTIMATED)
  76264. +BRAZIL              2 H  BEHIND UTC    ATLANTIC ISLANDS, FERNANDO
  76265. +BRAZIL                                 DE NORONHA
  76266. +BRAZIL              1 H  BEHIND UTC    OCT 23, '88-FEB 11, '89
  76267. +BRAZIL                                 (ESTIMATED)
  76268. +BRAZIL              3 H  BEHIND UTC    FOR MOST MAJOR AIRPORTS.
  76269. +BRITISH VIRGIN I.   4 H  BEHIND UTC
  76270. +BRUNEI              8 H  AHEAD OF UTC
  76271. +BULGARIA            2 H  AHEAD OF UTC
  76272. +BULGARIA            3 H  AHEAD OF UTC  MAR 27 - SEP 24
  76273. +BURKINA FASO        ON UTC
  76274. +BURMA               6.5H AHEAD OF UTC
  76275. +BURUNDI             2 H  AHEAD OF UTC
  76276. +CAMBODIA            SEE KAMPUCHEA
  76277. +CAMEROON            1 H  AHEAD OF UTC
  76278. +CANADA   NEW FDL    3.5H BEHIND UTC    ST.JOHN'S
  76279. +CANADA   NEW FDL    1.5H BEHIND UTC    APR 3 - OCT 29
  76280. +CANADA   ATLANTIC   4 H  BEHIND UTC    HALIFAX
  76281. +CANADA   ATLANTIC   3 H  BEHIND UTC    APR 3 - OCT 29
  76282. +CANADA   EASTERN    5 H  BEHIND UTC    TORONTO, MONTREAL, OTTAWA
  76283. +CANADA   EASTERN    4 H  BEHIND UTC    APR 3 - OCT 29
  76284. +CANADA   CENTRAL    6 H  BEHIND UTC    REGINA, WINNIPEG
  76285. +CANADA   CENTRAL    5 H  BEHIND UTC    APR 3 - OCT 29
  76286. +CANADA   MOUNTAIN   7 H  BEHIND UTC    CALGARY, EDMONTON
  76287. +CANADA   MOUNTAIN   6 H  BEHIND UTC    APR 3 - OCT 29
  76288. +CANADA   PACIFIC    8 H  BEHIND UTC    VANCOUVER
  76289. +CANADA   PACIFIC    7 H  BEHIND UTC    APR 3 - OCT 29
  76290. +CANADA   YUKON      SAME AS PACIFIC    DAWSON
  76291. +CAPE VERDE          1 H  BEHIND UTC
  76292. +CAYMAN ISLANDS      5 H  BEHIND UTC
  76293. +CAROLINE ISLAND    10 H  AHEAD OF UTC  EXCLUDING PONAPE IS.,
  76294. +CAROLINE ISLAND                       KUSAIE, AND PINGELAP
  76295. +CENTRAL AFRICA      1 H  AHEAD OF UTC
  76296. +CEYLON              5.5H AHEAD OF UTC, SEE SRI LANKA
  76297. +CHAD                1 H  AHEAD OF UTC
  76298. +CHANNEL ISLANDS     SEE ENGLAND
  76299. +CHILE               4 H  BEHIND UTC    CONTINENTAL
  76300. +CHILE               3 H  BEHIND UTC    OCT 9, '88-MAR 11, '89
  76301. +CHILE               6 H  BEHIND UTC    EASTER ISLAND
  76302. +CHILE               5 H  BEHIND UTC    OCT 9, '88-MAR 11, '89
  76303. +CHINA               8 H  AHEAD OF UTC  ALL OF CHINA, INCL TAIWAN
  76304. +CHINA               9 H  AHEAD OF UTC  APR 17 - SEP 10
  76305. +COCOS (Keeling) I.  6.5H AHEAD OF UTC
  76306. +COLOMBIA            5 H  BEHIND UTC
  76307. +COMOROS             3 H  AHEAD OF UTC
  76308. +CONGO               1 H  AHEAD OF UTC
  76309. +COOK ISLANDS       10 H  BEHIND UTC
  76310. +COOK ISLANDS        9.5H  BEHIND UTC   OCT 30, '88-MAR 24, '89
  76311. +COOK ISLANDS                           (ESTIMATED)
  76312. +COSTA RICA          6 H  BEHIND UTC
  76313. +COTE D'IVOIRE       ON UTC
  76314. +CUBA                5 H  BEHIND UTC
  76315. +CUBA                4 H  BEHIND UTC    MAR 20 - OCT 8
  76316. +CURACAO             4 H  BEHIND UTC    ALSO BONAIRE, ARUBA,
  76317. +CURACAO                                ST.MAARTEN
  76318. +CYPRUS              2 H  AHEAD OF UTC
  76319. +CYPRUS              3 H  AHEAD OF UTC  MAR 27 - SEP 24
  76320. +CZECHOSLOVAKIA      1 H  AHEAD OF UTC
  76321. +CZECHOSLOVAKIA      2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76322. +DENMARK             1 H  AHEAD OF UTC
  76323. +DENMARK             2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76324. +DENMK. FAEROE IS    1 H  AHEAD OF UTC  MAR 27 - SEP 24
  76325. +DJIBOUTI            3 H  AHEAD OF UTC
  76326. +DOMINICA            4 H  BEHIND UTC
  76327. +DOMINICAN REP       4 H  BEHIND UTC
  76328. +ECUADOR             5 H  BEHIND UTC    CONTINENTAL
  76329. +ECUADOR             6 H  BEHIND UTC    GALAPAGOS ISLANDS
  76330. +EGYPT               2 H  AHEAD OF UTC
  76331. +EGYPT               3 H  AHEAD OF UTC  MAY 17 - SEP 30 (AFTER
  76332. +EGYPT                                  RAMADAN)
  76333. +EL SALVADOR         6 H  BEHIND UTC
  76334. +ENGLAND             ON UTC             (WALES, SCOTLAND, N.I.,
  76335. +ENGLAND                                CH. IS.)
  76336. +ENGLAND             1 H  AHEAD OF UTC  MAR 27 - OCT 22
  76337. +ENEZUELA           4 H  BEHIND UTC
  76338. +EQUITORIAL GUINEA   1 H  AHEAD OF UTC
  76339. +ETHIOPIA            3 H  AHEAD OF UTC
  76340. +FALKLAND ISLANDS    4 H  BEHIND UTC
  76341. +FALKLAND ISLANDS    3 H  BEHIND UTC    SEP 11, '88-APR 15, '89
  76342. +FALKLAND ISLANDS                       (ESTIMATED)
  76343. +FAROE ISLAND        ON UTC
  76344. +FAROE ISLAND        1 H  AHEAD OF UTC  MAR 27 - SEP 24
  76345. +FIJI               12 H  AHEAD OF UTC
  76346. +FINLAND             2 H  AHEAD OF UTC
  76347. +FINLAND             3 H  AHEAD OF UTC  MAR 27 - SEP 24
  76348. +FRANCE              1 H  AHEAD OF UTC
  76349. +FRANCE              2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76350. +FRENCH GUIANA       3 H  BEHIND UTC
  76351. +FRENCH POLYNESIA    9 H  BEHIND UTC    GAMBIER ISLAND
  76352. +FRENCH POLYNESIA    9.5H BEHIND UTC    MARQUESAS ISLANDS
  76353. +FRENCH POLYNESIA   10 H  BEHIND UTC    SOCIETY ISLANDS, TUBUAI
  76354. +FRENCH POLYNESIA                       ISLANDS, TUAMOTU ISLAND,
  76355. +FRENCH POLYNESIA                       TAHITI
  76356. +GABON               1 H  AHEAD OF UTC
  76357. +GAMBIA              ON UTC
  76358. +GERMANY ALL         1 H  AHEAD OF UTC
  76359. +GERMANY ALL         2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76360. +GHANA               ON UTC
  76361. +GIBRALTAR           1 H  AHEAD OF UTC
  76362. +GIBRALTAR           2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76363. +GREECE              2 H  AHEAD OF UTC
  76364. +GREECE              3 H  AHEAD OF UTC  MAR 27 - SEP 24
  76365. +GREENLAND           4 H  BEHIND UTC    THULE AIRBASE YEAR ROUND
  76366. +GREENLAND           3 H  BEHIND UTC    ANGMAGSSALIK AND W. COAST
  76367. +GREENLAND           2 H  BEHIND UTC    MAR 27 - SEP 24
  76368. +GREENLAND           1 H  BEHIND UTC    SCORESBYSUND
  76369. +GREENLAND           ON UTC             MAR 27 - SEP 24
  76370. +GRENADA             4 H  BEHIND UTC
  76371. +GUADELOUPE          4 H  BEHIND UTC    ST. BARTHELEMY, NORTHERN
  76372. +GUADELOUPE                             ST. MARTIN MARTINIQUE
  76373. +GUAM               10 H  AHEAD OF UTC
  76374. +GUATEMALA           6 H  BEHIND UTC
  76375. +GUINEA              ON UTC
  76376. +GUINEA BISSAU       ON UTC
  76377. +GUINEA REPUBLIC     ON UTC
  76378. +GUINEA EQUATORIAL   1 H  AHEAD OF UTC
  76379. +GUYANA              3 H  BEHIND UTC
  76380. +HAITI               5 H  BEHIND UTC
  76381. +HAITI               4 H  BEHIND UTC    APR 3 - OCT 29
  76382. +HOLLAND             SEE NETHERLANDS
  76383. +HONDURAS            6 H  BEHIND UTC
  76384. +HONG KONG           8 H  AHEAD OF UTC
  76385. +HUNGARY             1 H  AHEAD OF UTC
  76386. +HUNGARY             2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76387. +ICELAND             ON UTC
  76388. +INDIA               5.5H AHEAD OF UTC  INCLUDING ANDAMAN ISLANDS
  76389. +INDONESIA WEST      7 H  AHEAD OF UTC  SUMATRA, JAVA, BALI,
  76390. +INDONESIA WEST                         JAKARTA
  76391. +INDONESIA CENTRAL   8 H  AHEAD OF UTC  KALIMANTAN, SULAWESI
  76392. +INDONESIA EAST      9 H  AHEAD OF UTC  IRIAN, BARAT
  76393. +IRAN                3.5H AHEAD OF UTC
  76394. +IRAQ                3 H  AHEAD OF UTC
  76395. +IRAQ                4 H  AHEAD OF UTC  APR 1 - SEP 30
  76396. +IRELAND             ON UTC
  76397. +IRELAND             1 H  AHEAD OF UTC  MAR 27 - OCT 22
  76398. +ISRAEL              2 H  AHEAD OF UTC
  76399. +ISRAEL              3 H  AHEAD OF UTC  APR 10 - SEP 3
  76400. +ITALY               1 H  AHEAD OF UTC
  76401. +ITALY               2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76402. +IVORY COAST         ON UTC
  76403. +IWAN              8 H  AHEAD OF UTC
  76404. +JAMAICA             5 H  BEHIND UTC
  76405. +JAPAN               9 H  AHEAD OF UTC
  76406. +JOHNSTON ISLAND    10 H  BEHIND UTC
  76407. +JORDAN              2 H  AHEAD OF UTC
  76408. +JORDAN              3 H  AHEAD OF UTC  APR 1 - OCT 6
  76409. +KAMPUCHEA           7 H  AHEAD OF UTC
  76410. +KENYA               3 H  AHEAD OF UTC
  76411. +KIRIBATI, REP OF   12 H  AHEAD OF UTC  CANTON, ENDERBURY ISLANDS
  76412. +KIRIBATI, REP OF   11 H  AHEAD OF UTC  CHRISTMAS ISLAND
  76413. +KOREA               9 H  AHEAD OF UTC
  76414. +KOREA, REP OF       9 H  AHEAD OF UTC
  76415. +KOREA, REP OF      10 H  AHEAD OF UTC  MAY 8 - OCT 8
  76416. +KUWAIT              3 H  AHEAD OF UTC
  76417. +KUSAIE, PINGELAP  12 H  AHEAD OF UTC  INCLUDING MARSHALL IS.,
  76418. +KUSAIE, PINGELAP                      EXCLUDING KWAJALEIN)
  76419. +KWAJALEIN         12 H  BEHIND UTC
  76420. +LAOS                7 H  AHEAD OF UTC
  76421. +LEBANON             2 H  AHEAD OF UTC
  76422. +LEBANON             3 H  AHEAD OF UTC  JUN 1 - OCT 31
  76423. +LEEWARD ISLANDS     4 H BEHIND UTC     ANTIGUA, DOMINICA,
  76424. +LEEWARD ISLANDS                        MONTSERRAT, ST.
  76425. +LEEWARD ISLAANDS                       CHRISTOPHER, ST. KITTS,
  76426. +LEEWARD ISLANDS                        NEVIS, ANGUILLA
  76427. +LESOTHO             2 H  AHEAD OF UTC
  76428. +LIBERIA             ON UTC
  76429. +LIBYAN ARAB         1 H  AHEAD OF UTC  JAMAHIRIYA/LIBYA
  76430. +LIBYAN ARAB         2 H  AHEAD OF UTC  APR 1 - SEP 30 JAMAHIRIYA/LIBYA
  76431. +LIECHTENSTEIN       1 H  AHEAD OF UTC
  76432. +LIECHTENSTEIN       2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76433. +LUXEMBOURG          1 H  AHEAD OF UTC
  76434. +LUXEMBOURG          2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76435. +MACAO               8 H  AHEAD OF UTC
  76436. +MADAGASCAR          3 H  AHEAD OF UTC
  76437. +MADEIRA             SEE PORTUGAL
  76438. +MALAWI              2 H  AHEAD OF UTC
  76439. +MALAYSIA            8 H  AHEAD OF UTC
  76440. +MALDIVES            5 H  AHEAD OF UTC
  76441. +MALI                ON UTC
  76442. +MALTA               1 H  AHEAD OF UTC
  76443. +MALTA               2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76444. +MARTINIQUE          4 H  BEHIND UTC
  76445. +MAURITANIA          ON UTC
  76446. +MAURITIUS           4 H  AHEAD OF UTC
  76447. +MARIANA ISLAND    10 H  AHEAD OF UTC  EXCLUDING GUAM
  76448. +MEXICO BAJA CAL N   7 H  BEHIND UTC    BAJA CALIFORNIA SUR AND
  76449. +MEXICO BAJA CAL N                      N. PACIFIC COAST (STATES
  76450. +MEXICO BAJA CAL N                      OF SINALOA AND SONORA)
  76451. +MEXICO BAJA CAL N   8 H  BEHIND UTC    ABOVE 28TH PARALLAL APR 3
  76452. +MEXICO BAJA CAL N                      - OCT 29
  76453. +MEXICO BAJA CAL N   7 H  BEHIND UTC    ABOVE 28TH PARALLAL APR 3
  76454. +MEXICO BAJA CAL N                      - 0CT 29
  76455. +MEXICO              6 H  BEHIND UTC    STATES OF DURANGO,
  76456. +MEXICO                                 COAHUILA, NUEVO LEON,
  76457. +MEXICO                                 TAMAULIPAS
  76458. +MEXICO              5 H  BEHIND UTC    STATES OF DURANGO,
  76459. +MEXICO                                 COAHUILA, NUEVO LEON,
  76460. +MEXICO                                 TAMAULIPAS  APR 3 - OCT 29
  76461. +MEXICO              6 H  BEHIND UTC    GENERAL MEXICO, STATES OF
  76462. +MEXICO                                 CAMPECHE, QUINTANA ROO AND
  76463. +MEXICO                                 YUCATAN
  76464. +MIDWAY ISLAND      11 H  BEHIND UTC
  76465. +MONACO              1 H  AHEAD OF UTC
  76466. +MONACO              2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76467. +MONGOLIA            8 H  AHEAD OF UTC
  76468. +MONGOLIA            9 H  AHEAD OF UTC  MAR 27 - SEP 24
  76469. +MONTSERRAT          4 H  BEHIND UTC
  76470. +MOROCCO             ON UTC
  76471. +MOZAMBIQUE          2 H  AHEAD OF UTC
  76472. +NAMIBIA             2 H  AHEAD OF UTC
  76473. +NAURU, REP OF      12 H  AHEAD OF UTC
  76474. +NEPAL              5H45M AHEAD OF UTC
  76475. +NETHERLANDS         1 H  AHEAD OF UTC
  76476. +NETHERLANDS         2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76477. +NETHERLANDS         4 H  BEHIND UTC    ANTILLES AND SOUTHERN ST.
  76478. +NETHERLANDS                            MAARTEN
  76479. +NEW CALEDONIA      11 H  AHEAD OF UTC
  76480. +NEW HEBRIDES        SEE VANUATU
  76481. +NEW ZEALAND        12 H  AHEAD OF UTC  (EXCLUDING CHATHAM ISLAND)
  76482. +NEW ZEALAND        13 H  AHEAD OF UTC  OCT 30, '88-MAR 4, '89
  76483. +NEW ZEALAND       12H45M AHEAD OF UTC  CHATHAM ISLAND
  76484. +NICARAGUA           6 H  BEHIND UTC
  76485. +NIGER               1 H  AHEAD OF UTC
  76486. +NIGERIA             1 H  AHEAD OF UTC
  76487. +NIUE ISLAND        11 H  BEHIND UTC
  76488. +NORFOLK ISLAND    11H30M AHEAD OF UTC
  76489. +NORTHERN IRELAND    ON UTC             WALES, SCOTLAND, N.I.,
  76490. +NORTHERN IRELAND                       CH.IS.
  76491. +NORTHERN IRELAND    1 H  AHEAD OF UTC  MAR 27 - OCT 22
  76492. +NORWAY              1 H  AHEAD OF UTC
  76493. +NORWAY              2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76494. +OGO                ON UTC
  76495. +OMAN                4 H  AHEAD OF UTC
  76496. +PACIFIC ISLAND T.T.
  76497. +PALAU ISLAND       9 H  AHEAD OF UTC
  76498. +PAKISTAN            5 H  AHEAD OF UTC
  76499. +PANAMA              5 H  BEHIND UTC
  76500. +PAPUA NEW GUINEA   10 H  AHEAD OF UTC  INCLUDING BOUGAINVILLE
  76501. +PAPUA NEW GUINEA                       ISLAND
  76502. +PARAGUAY            4 H  BEHIND UTC
  76503. +PARAGUAY            3 H  BEHIND UTC    OCT 1, '88-MAR 31, '89
  76504. +PERU                5 H  BEHIND UTC
  76505. +PHILIPPINES         8 H  AHEAD OF UTC
  76506. +PONAPE ISLAND     11 H  AHEAD OF UTC
  76507. +POLAND              1 H  AHEAD OF UTC
  76508. +POLAND              2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76509. +PORTUGAL MAINLAND   ON UTC
  76510. +PORTUGAL MAINLAND   1 H  AHEAD OF UTC  MAR 27 - SEP 24
  76511. +PORTUGAL AZORES     1 H  BEHIND UTC
  76512. +PORTUGAL AZORES     ON UTC             MAR 27 - SEP 24
  76513. +PORTUGAL MADEIRA    ON UTC
  76514. +PORTUGAL MADEIRA    1 H  AHEAD OF UTC  MAR 27 - SEP 24
  76515. +PUERTO RICO         4 H  BEHIND UTC
  76516. +QATAR               3 H  AHEAD OF UTC
  76517. +ROMANIA             2 H  AHEAD OF UTC
  76518. +ROMANIA             3 H  AHEAD OF UTC  MAR 27 - SEP 24
  76519. +RUSSIA              SEE USSR
  76520. +RWANDA              2 H  AHEAD OF UTC
  76521. +SABA                4 H  BEHIND UTC    ALSO BONAIRE, CURACAO,
  76522. +SAMOA              11 H  BEHIND UTC
  76523. +SAN MARINO          1 H  AHEAD OF UTC
  76524. +SAN MARINO          2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76525. +SAN SALVADOR        6  H  BEHIND UTC
  76526. +SAO TOME ISLAND     ON UTC             AND PRINCIPE ISLAND
  76527. +SAUDI ARABIA        3 H  AHEAD OF UTC
  76528. +SCOTLAND            SEE ENGLAND
  76529. +SENEGAL             ON UTC
  76530. +SEYCHELLES          4 H  AHEAD OF UTC
  76531. +SIERRA LEONE        ON UTC
  76532. +SINGAPORE           8 H  AHEAD OF UTC
  76533. +SOLOMON ISLANDS    11 H  AHEAD OF UTC  EXCLUDING BOUGAINVILLE
  76534. +SOLOMON ISLANDS                        ISLAND
  76535. +SOMALI              3 H  AHEAD OF UTC
  76536. +SOUTH AFRICA        2 H  AHEAD OF UTC
  76537. +SPAIN  CANARY IS    ON UTC
  76538. +SPAIN  CANARY IS    1 H  AHEAD OF UTC  MAR 27 - SEP 24
  76539. +SPAIN               1 H  AHEAD OF UTC  CONTINENTAL, BALEARIC AND
  76540. +SPAIN                                  MALLORCA ISLANDS
  76541. +SPAIN               2 H  AHEAD OF UTC  CONTINENTAL, BALEARIC AND
  76542. +SPAIN                                  MALLORCA ISLANDS  MAR 27 -
  76543. +SPAIN                                  SEP 24
  76544. +SPAIN  MAINLAND     1 H  AHEAD OF UTC  MELILLA
  76545. +SPAIN  MAINLAND     2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76546. +SRI LANKA          5H30M AHEAD OF UTC
  76547. +ST.MAARTEN
  76548. +ST.KITTS-NEVIS     4 H  BEHIND UTC
  76549. +ST.LUCIA           4 H  BEHIND UTC
  76550. +ST.PIERRE          3 H  BEHIND UTC    INCLUDING MIQUELON
  76551. +ST.PIERRE          2 H  BEHIND UTC    INLCUDING MIQUELON  APR 3
  76552. +ST.PIERRE                             - OCT 29
  76553. +ST.VINCENT         4 H  BEHIND UTC    INCLUDING THE GRENADINES
  76554. +ST. HELENA          ON UTC
  76555. +SURINAME            3 H  BEHIND UTC
  76556. +SWAZILAND           2 H  AHEAD OF UTC
  76557. +SWEDEN              1 H  AHEAD OF UTC
  76558. +SWEDEN              2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76559. +SWITZERLAND         1 H  AHEAD OF UTC
  76560. +SWITZERLAND         2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76561. +SYRIA               2 H  AHEAD OF UTC
  76562. +SYRIA               3 H  AHEAD OF UTC  MAR 15 - OCT 30
  76563. +TAHITI             10 H  BEHIND UTC
  76564. +TANZANIA            3 H  AHEAD OF UTC
  76565. +THAILAND            7 H  AHEAD OF UTC
  76566. +TRINIDAD / TOBAGO   4 H  BEHIND UTC
  76567. +TUNISIA             1 H  AHEAD OF UTC
  76568. +TUNISIA             2 H  AHEAD OF UTC  APR 10 - SEP 24
  76569. +TURKEY              2 H  AHEAD OF UTC
  76570. +TURKEY              3 H  AHEAD OF UTC  MAR 27 - SEP 24
  76571. +TURKS AND CAICOS    5 H  BEHIND UTC
  76572. +TURKS AND CAICOS    4 H  BEHIND UTC    APR 3 - OCT 29
  76573. +TUVALU             12 H  AHEAD OF UTC
  76574. +UDAN               2 H  AHEAD OF UTC
  76575. +UGANDA              3 H  AHEAD OF UTC
  76576. +UNITED ARAB EMIR.   4 H  AHEAD OF UTC  ABU DHABI, DUBAI, SHARJAH,
  76577. +UNITED ARAB EMIR                       RAS AL KHAIMAH
  76578. +UNITED KINGDOM      ON UTC             WALES, SCOTLAND, N.I., CH.
  76579. +UNITED KINGDOM                         IS.
  76580. +UNITED KINGDOM      1 H  AHEAD OF UTC  MAR 27 - OCT 22
  76581. +UNITED STATES       SEE USA
  76582. +UPPER VOLTA         ON UTC
  76583. +URUGUAY             3 H  BEHIND UTC
  76584. +URUGUAY             2 H  BEHIND UTC    DEC 11, '88-FEB 25, '89
  76585. +URAGUAY                                (ESTIMATED)
  76586. +USA  EASTERN       5 H  BEHIND UTC    NEW YORK, WASHINGTON
  76587. +USA  EASTERN       4 H  BEHIND UTC    APR 3 - OCT 30
  76588. +USA  CENTRAL       6 H  BEHIND UTC    CHICAGO, HOUSTON
  76589. +USA  CENTRAL       5 H  BEHIND UTC    APR 3 - OCT 30
  76590. +USA  MOUNTAIN      7 H  BEHIND UTC    DENVER
  76591. +USA  MOUNTAIN      6 H  BEHIND UTC    APR 3 - OCT 30
  76592. +USA  PACIFIC       8 H  BEHIND UTC    L.A., SAN FRANCISCO
  76593. +USA  PACIFIC       7 H  BEHIND UTC    APR 3 - OCT 30
  76594. +USA  ALASKA STD    9 H  BEHIND UTC    MOST OF ALASKA     (AKST)
  76595. +USA  ALASKA STD    8 H  BEHIND UTC    APR 3 - OCT 30 (AKDT)
  76596. +USA  ALEUTIAN     10 H  BEHIND UTC    ISLANDS WEST OF 170W
  76597. +USA  - " -         9 H  BEHIND UTC    APR 3 - OCT 30
  76598. +USA  HAWAII       10 H  BEHIND UTC
  76599. +USA  BERING       11 H  BEHIND UTC    SAMOA, MIDWAY
  76600. +USA  FOR SPECIFIC INFO ON USA ZONES/TIMES CALL DOT 202-426-4520
  76601. +USSR WEST EUROP     3 H  AHEAD OF UTC  LENINGRAD, MOSCOW
  76602. +USSR WEST EUROP     4 H  AHEAD OF UTC  APR 1 - SEP 30
  76603. +USSR CENTRAL EUR    4 H  AHEAD OF UTC  ROSTOV, BAKU
  76604. +USSR CENTRAL EUR    5 H  AHEAD OF UTC  APR 1 - SEP 30
  76605. +USSR EAST EUROP     5 H  AHEAD OF UTC  SVERDLOVSK
  76606. +USSR EAST EUROP     6 H  AHEAD OF UTC  APR 1 - SEP 30
  76607. +USSR WEST SIBERIAN  6 H  AHEAD OF UTC  TASHKENT, ALMA ATA
  76608. +USSR WEST SIBERIAN  7 H  AHEAD OF UTC  APR 1 - SEP 30
  76609. +USSR WEST-CENTRAL   7 H  AHEAD OF UTC  NOVOSIBIRSK
  76610. +USSR WEST-CENTRAL   8 H  AHEAD OF UTC  APR 1 - SEP 30
  76611. +USSR WEST-CENTRAL   8 H  AHEAD OF UTC  IRKUTSK
  76612. +USSR WEST-CENTRAL   9 H  AHEAD OF UTC  APR 1 - SEP 30
  76613. +USSR CENTRAL SIB    9 H  AHEAD OF UTC  YAKUTSK
  76614. +USSR CENTRAL SIB   10 H  AHEAD OF UTC  APR 1 - SEP 30
  76615. +USSR CENTRAL SIB   10 H  AHEAD OF UTC  VLADIVOSTOK
  76616. +USSR CENTRAL SIB   11 H  AHEAD OF UTC  APR 1 - SEP 30
  76617. +USSR EAST SIBERIA  11 H  AHEAD OF UTC  MAGADAN
  76618. +USSR EAST SIBERIA  12 H  AHEAD OF UTC  APR 1 - SEP 30
  76619. +USSR EAST SIBERIA  12 H  AHEAD OF UTC  PETROPAVLOVSK
  76620. +USSR EAST SIBERIA  13 H  AHEAD OF UTC  APR 1 - SEP 30
  76621. +USSR EAST SIBERIA  13 H  AHEAD OF UTC  UELEN
  76622. +USSR EAST SIBERIA  14 H  AHEAD OF UTC  APR 1 - SEP 30
  76623. +VANUATU            11 H  AHEAD OF UTC  (NEW HEBRIDES)
  76624. +VANUATU            12 H  AHEAD OF UTC  SEP 25, '88-MAR 25, '89
  76625. +VANUATU                                (ESTIMATED)
  76626. +VATICAN             1 H  AHEAD OF UTC
  76627. +VATICAN             2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76628. +VIETNAM             7 H  AHEAD OF UTC
  76629. +VIRGIN ISLANDS      4 H  BEHIND UTC    ST.CROIX, ST.THOMAS,
  76630. +VIRGIN ISLANDS                         ST.JOHN
  76631. +WAKE ISLAND        12 H  AHEAD OF UTC
  76632. +WALES               SEE ENGLAND
  76633. +WALLIS/FUTUNA IS.  12 H  AHEAD OF UTC
  76634. +WINDWARD ISLANDS    4 H  BEHIND UTC    GRENADA, ST. LUCIA
  76635. +YEMEN               3 H  AHEAD OF UTC  BOTH REPUBLICS
  76636. +YUGOSLAVIA          1 H  AHEAD OF UTC
  76637. +YUGOSLAVIA          2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76638. +ZAIRE  EAST         1 H  AHEAD OF UTC  KINSHASA MBANDAKA
  76639. +ZAIRE  WEST         2 H  AHEAD OF UTC  LUBUMBASHI, KASAI, KIVU,
  76640. +ZAIRE  WEST                            HAUT-ZAIRE, SHABA
  76641. +ZAMBIA              2 H  AHEAD OF UTC
  76642. +ZIMBABWE            2 H  AHEAD OF UTC
  76643. diff -ru --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/getopt.c amiga/fsf/emacs/unixlib/src/zoneinfo/getopt.c
  76644. --- baseline/fsf/emacs/unixlib/src/zoneinfo/getopt.c    Wed Dec 31 17:00:00 1969
  76645. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/getopt.c    Sun Oct 15 17:19:16 1995
  76646. @@ -0,0 +1,678 @@
  76647. +/* Getopt for GNU.
  76648. +   NOTE: getopt is now part of the C library, so if you don't know what
  76649. +   "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu
  76650. +   before changing it!
  76651. +
  76652. +   Copyright (C) 1987, 88, 89, 90, 91, 1992 Free Software Foundation, Inc.
  76653. +
  76654. +   This program is free software; you can redistribute it and/or modify
  76655. +   it under the terms of the GNU General Public License as published by
  76656. +   the Free Software Foundation; either version 2, or (at your option)
  76657. +   any later version.
  76658. +
  76659. +   This program is distributed in the hope that it will be useful,
  76660. +   but WITHOUT ANY WARRANTY; without even the implied warranty of
  76661. +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  76662. +   GNU General Public License for more details.
  76663. +
  76664. +   You should have received a copy of the GNU General Public License
  76665. +   along with this program; if not, write to the Free Software
  76666. +   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  76667. +
  76668. +/* AIX requires this to be the first thing in the file. */
  76669. +#ifdef __GNUC__
  76670. +#define alloca __builtin_alloca
  76671. +#else /* not __GNUC__ */
  76672. +#if defined(sparc) && !defined(USG) && !defined(SVR4) && !defined(__svr4__)
  76673. +#include <alloca.h>
  76674. +#else
  76675. +#ifdef _AIX
  76676. + #pragma alloca
  76677. +#else
  76678. +char *alloca ();
  76679. +#endif
  76680. +#endif /* sparc */
  76681. +#endif /* not __GNUC__ */
  76682. +
  76683. +#ifdef    LIBC
  76684. +/* For when compiled as part of the GNU C library.  */
  76685. +#include <ansidecl.h>
  76686. +#endif
  76687. +
  76688. +#include <stdio.h>
  76689. +
  76690. +/* This needs to come after some library #include
  76691. +   to get __GNU_LIBRARY__ defined.  */
  76692. +#ifdef    __GNU_LIBRARY__
  76693. +#undef    alloca
  76694. +#include <stdlib.h>
  76695. +#include <string.h>
  76696. +#else    /* Not GNU C library.  */
  76697. +#define    __alloca    alloca
  76698. +#endif    /* GNU C library.  */
  76699. +
  76700. +
  76701. +#ifndef __STDC__
  76702. +#define const
  76703. +#endif
  76704. +
  76705. +/* If GETOPT_COMPAT is defined, `+' as well as `--' can introduce a
  76706. +   long-named option.  Because this is not POSIX.2 compliant, it is
  76707. +   being phased out. */
  76708. +#define GETOPT_COMPAT
  76709. +
  76710. +/* This version of `getopt' appears to the caller like standard Unix `getopt'
  76711. +   but it behaves differently for the user, since it allows the user
  76712. +   to intersperse the options with the other arguments.
  76713. +
  76714. +   As `getopt' works, it permutes the elements of ARGV so that,
  76715. +   when it is done, all the options precede everything else.  Thus
  76716. +   all application programs are extended to handle flexible argument order.
  76717. +
  76718. +   Setting the environment variable POSIXLY_CORRECT disables permutation.
  76719. +   Then the behavior is completely standard.
  76720. +
  76721. +   GNU application programs can use a third alternative mode in which
  76722. +   they can distinguish the relative order of options and other arguments.  */
  76723. +
  76724. +#include "getopt.h"
  76725. +
  76726. +/* For communication from `getopt' to the caller.
  76727. +   When `getopt' finds an option that takes an argument,
  76728. +   the argument value is returned here.
  76729. +   Also, when `ordering' is RETURN_IN_ORDER,
  76730. +   each non-option ARGV-element is returned here.  */
  76731. +
  76732. +char *optarg = 0;
  76733. +
  76734. +/* Index in ARGV of the next element to be scanned.
  76735. +   This is used for communication to and from the caller
  76736. +   and for communication between successive calls to `getopt'.
  76737. +
  76738. +   On entry to `getopt', zero means this is the first call; initialize.
  76739. +
  76740. +   When `getopt' returns EOF, this is the index of the first of the
  76741. +   non-option elements that the caller should itself scan.
  76742. +
  76743. +   Otherwise, `optind' communicates from one call to the next
  76744. +   how much of ARGV has been scanned so far.  */
  76745. +
  76746. +int optind = 0;
  76747. +
  76748. +/* The next char to be scanned in the option-element
  76749. +   in which the last option character we returned was found.
  76750. +   This allows us to pick up the scan where we left off.
  76751. +
  76752. +   If this is zero, or a null string, it means resume the scan
  76753. +   by advancing to the next ARGV-element.  */
  76754. +
  76755. +static char *nextchar;
  76756. +
  76757. +/* Callers store zero here to inhibit the error message
  76758. +   for unrecognized options.  */
  76759. +
  76760. +int opterr = 1;
  76761. +
  76762. +/* Describe how to deal with options that follow non-option ARGV-elements.
  76763. +
  76764. +   If the caller did not specify anything,
  76765. +   the default is REQUIRE_ORDER if the environment variable
  76766. +   POSIXLY_CORRECT is defined, PERMUTE otherwise.
  76767. +
  76768. +   REQUIRE_ORDER means don't recognize them as options;
  76769. +   stop option processing when the first non-option is seen.
  76770. +   This is what Unix does.
  76771. +   This mode of operation is selected by either setting the environment
  76772. +   variable POSIXLY_CORRECT, or using `+' as the first character
  76773. +   of the list of option characters.
  76774. +
  76775. +   PERMUTE is the default.  We permute the contents of ARGV as we scan,
  76776. +   so that eventually all the non-options are at the end.  This allows options
  76777. +   to be given in any order, even with programs that were not written to
  76778. +   expect this.
  76779. +
  76780. +   RETURN_IN_ORDER is an option available to programs that were written
  76781. +   to expect options and other ARGV-elements in any order and that care about
  76782. +   the ordering of the two.  We describe each non-option ARGV-element
  76783. +   as if it were the argument of an option with character code 1.
  76784. +   Using `-' as the first character of the list of option characters
  76785. +   selects this mode of operation.
  76786. +
  76787. +   The special argument `--' forces an end of option-scanning regardless
  76788. +   of the value of `ordering'.  In the case of RETURN_IN_ORDER, only
  76789. +   `--' can cause `getopt' to return EOF with `optind' != ARGC.  */
  76790. +
  76791. +static enum
  76792. +{
  76793. +  REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
  76794. +} ordering;
  76795. +
  76796. +#ifdef    __GNU_LIBRARY__
  76797. +#include <string.h>
  76798. +#define    my_index    strchr
  76799. +#define    my_bcopy(src, dst, n)    memcpy ((dst), (src), (n))
  76800. +#else
  76801. +
  76802. +/* Avoid depending on library functions or files
  76803. +   whose names are inconsistent.  */
  76804. +
  76805. +char *getenv ();
  76806. +
  76807. +static char *
  76808. +my_index (string, chr)
  76809. +     char *string;
  76810. +     int chr;
  76811. +{
  76812. +  while (*string)
  76813. +    {
  76814. +      if (*string == chr)
  76815. +    return string;
  76816. +      string++;
  76817. +    }
  76818. +  return 0;
  76819. +}
  76820. +
  76821. +static void
  76822. +my_bcopy (from, to, size)
  76823. +     char *from, *to;
  76824. +     int size;
  76825. +{
  76826. +  int i;
  76827. +  for (i = 0; i < size; i++)
  76828. +    to[i] = from[i];
  76829. +}
  76830. +#endif                /* GNU C library.  */
  76831. +
  76832. +/* Handle permutation of arguments.  */
  76833. +
  76834. +/* Describe the part of ARGV that contains non-options that have
  76835. +   been skipped.  `first_nonopt' is the index in ARGV of the first of them;
  76836. +   `last_nonopt' is the index after the last of them.  */
  76837. +
  76838. +static int first_nonopt;
  76839. +static int last_nonopt;
  76840. +
  76841. +/* Exchange two adjacent subsequences of ARGV.
  76842. +   One subsequence is elements [first_nonopt,last_nonopt)
  76843. +   which contains all the non-options that have been skipped so far.
  76844. +   The other is elements [last_nonopt,optind), which contains all
  76845. +   the options processed since those non-options were skipped.
  76846. +
  76847. +   `first_nonopt' and `last_nonopt' are relocated so that they describe
  76848. +   the new indices of the non-options in ARGV after they are moved.  */
  76849. +
  76850. +static void
  76851. +exchange (argv)
  76852. +     char **argv;
  76853. +{
  76854. +  int nonopts_size = (last_nonopt - first_nonopt) * sizeof (char *);
  76855. +  char **temp = (char **) __alloca (nonopts_size);
  76856. +
  76857. +  /* Interchange the two blocks of data in ARGV.  */
  76858. +
  76859. +  my_bcopy (&argv[first_nonopt], temp, nonopts_size);
  76860. +  my_bcopy (&argv[last_nonopt], &argv[first_nonopt],
  76861. +        (optind - last_nonopt) * sizeof (char *));
  76862. +  my_bcopy (temp, &argv[first_nonopt + optind - last_nonopt], nonopts_size);
  76863. +
  76864. +  /* Update records for the slots the non-options now occupy.  */
  76865. +
  76866. +  first_nonopt += (optind - last_nonopt);
  76867. +  last_nonopt = optind;
  76868. +}
  76869. +
  76870. +/* Scan elements of ARGV (whose length is ARGC) for option characters
  76871. +   given in OPTSTRING.
  76872. +
  76873. +   If an element of ARGV starts with '-', and is not exactly "-" or "--",
  76874. +   then it is an option element.  The characters of this element
  76875. +   (aside from the initial '-') are option characters.  If `getopt'
  76876. +   is called repeatedly, it returns successively each of the option characters
  76877. +   from each of the option elements.
  76878. +
  76879. +   If `getopt' finds another option character, it returns that character,
  76880. +   updating `optind' and `nextchar' so that the next call to `getopt' can
  76881. +   resume the scan with the following option character or ARGV-element.
  76882. +
  76883. +   If there are no more option characters, `getopt' returns `EOF'.
  76884. +   Then `optind' is the index in ARGV of the first ARGV-element
  76885. +   that is not an option.  (The ARGV-elements have been permuted
  76886. +   so that those that are not options now come last.)
  76887. +
  76888. +   OPTSTRING is a string containing the legitimate option characters.
  76889. +   If an option character is seen that is not listed in OPTSTRING,
  76890. +   return '?' after printing an error message.  If you set `opterr' to
  76891. +   zero, the error message is suppressed but we still return '?'.
  76892. +
  76893. +   If a char in OPTSTRING is followed by a colon, that means it wants an arg,
  76894. +   so the following text in the same ARGV-element, or the text of the following
  76895. +   ARGV-element, is returned in `optarg'.  Two colons mean an option that
  76896. +   wants an optional arg; if there is text in the current ARGV-element,
  76897. +   it is returned in `optarg', otherwise `optarg' is set to zero.
  76898. +
  76899. +   If OPTSTRING starts with `-' or `+', it requests different methods of
  76900. +   handling the non-option ARGV-elements.
  76901. +   See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
  76902. +
  76903. +   Long-named options begin with `--' instead of `-'.
  76904. +   Their names may be abbreviated as long as the abbreviation is unique
  76905. +   or is an exact match for some defined option.  If they have an
  76906. +   argument, it follows the option name in the same ARGV-element, separated
  76907. +   from the option name by a `=', or else the in next ARGV-element.
  76908. +   When `getopt' finds a long-named option, it returns 0 if that option's
  76909. +   `flag' field is nonzero, the value of the option's `val' field
  76910. +   if the `flag' field is zero.
  76911. +
  76912. +   The elements of ARGV aren't really const, because we permute them.
  76913. +   But we pretend they're const in the prototype to be compatible
  76914. +   with other systems.
  76915. +
  76916. +   LONGOPTS is a vector of `struct option' terminated by an
  76917. +   element containing a name which is zero.
  76918. +
  76919. +   LONGIND returns the index in LONGOPT of the long-named option found.
  76920. +   It is only valid when a long-named option has been found by the most
  76921. +   recent call.
  76922. +
  76923. +   If LONG_ONLY is nonzero, '-' as well as '--' can introduce
  76924. +   long-named options.  */
  76925. +
  76926. +int
  76927. +_getopt_internal (argc, argv, optstring, longopts, longind, long_only)
  76928. +     int argc;
  76929. +     char *const *argv;
  76930. +     const char *optstring;
  76931. +     const struct option *longopts;
  76932. +     int *longind;
  76933. +     int long_only;
  76934. +{
  76935. +  int option_index;
  76936. +
  76937. +  optarg = 0;
  76938. +
  76939. +  /* Initialize the internal data when the first call is made.
  76940. +     Start processing options with ARGV-element 1 (since ARGV-element 0
  76941. +     is the program name); the sequence of previously skipped
  76942. +     non-option ARGV-elements is empty.  */
  76943. +
  76944. +  if (optind == 0)
  76945. +    {
  76946. +      first_nonopt = last_nonopt = optind = 1;
  76947. +
  76948. +      nextchar = NULL;
  76949. +
  76950. +      /* Determine how to handle the ordering of options and nonoptions.  */
  76951. +
  76952. +      if (optstring[0] == '-')
  76953. +    {
  76954. +      ordering = RETURN_IN_ORDER;
  76955. +      ++optstring;
  76956. +    }
  76957. +      else if (optstring[0] == '+')
  76958. +    {
  76959. +      ordering = REQUIRE_ORDER;
  76960. +      ++optstring;
  76961. +    }
  76962. +      else if (getenv ("POSIXLY_CORRECT") != NULL)
  76963. +    ordering = REQUIRE_ORDER;
  76964. +      else
  76965. +    ordering = PERMUTE;
  76966. +    }
  76967. +
  76968. +  if (nextchar == NULL || *nextchar == '\0')
  76969. +    {
  76970. +      if (ordering == PERMUTE)
  76971. +    {
  76972. +      /* If we have just processed some options following some non-options,
  76973. +         exchange them so that the options come first.  */
  76974. +
  76975. +      if (first_nonopt != last_nonopt && last_nonopt != optind)
  76976. +        exchange ((char **) argv);
  76977. +      else if (last_nonopt != optind)
  76978. +        first_nonopt = optind;
  76979. +
  76980. +      /* Now skip any additional non-options
  76981. +         and extend the range of non-options previously skipped.  */
  76982. +
  76983. +      while (optind < argc
  76984. +         && (argv[optind][0] != '-' || argv[optind][1] == '\0')
  76985. +#ifdef GETOPT_COMPAT
  76986. +         && (longopts == NULL
  76987. +             || argv[optind][0] != '+' || argv[optind][1] == '\0')
  76988. +#endif                /* GETOPT_COMPAT */
  76989. +         )
  76990. +        optind++;
  76991. +      last_nonopt = optind;
  76992. +    }
  76993. +
  76994. +      /* Special ARGV-element `--' means premature end of options.
  76995. +     Skip it like a null option,
  76996. +     then exchange with previous non-options as if it were an option,
  76997. +     then skip everything else like a non-option.  */
  76998. +
  76999. +      if (optind != argc && !strcmp (argv[optind], "--"))
  77000. +    {
  77001. +      optind++;
  77002. +
  77003. +      if (first_nonopt != last_nonopt && last_nonopt != optind)
  77004. +        exchange ((char **) argv);
  77005. +      else if (first_nonopt == last_nonopt)
  77006. +        first_nonopt = optind;
  77007. +      last_nonopt = argc;
  77008. +
  77009. +      optind = argc;
  77010. +    }
  77011. +
  77012. +      /* If we have done all the ARGV-elements, stop the scan
  77013. +     and back over any non-options that we skipped and permuted.  */
  77014. +
  77015. +      if (optind == argc)
  77016. +    {
  77017. +      /* Set the next-arg-index to point at the non-options
  77018. +         that we previously skipped, so the caller will digest them.  */
  77019. +      if (first_nonopt != last_nonopt)
  77020. +        optind = first_nonopt;
  77021. +      return EOF;
  77022. +    }
  77023. +
  77024. +      /* If we have come to a non-option and did not permute it,
  77025. +     either stop the scan or describe it to the caller and pass it by.  */
  77026. +
  77027. +      if ((argv[optind][0] != '-' || argv[optind][1] == '\0')
  77028. +#ifdef GETOPT_COMPAT
  77029. +      && (longopts == NULL
  77030. +          || argv[optind][0] != '+' || argv[optind][1] == '\0')
  77031. +#endif                /* GETOPT_COMPAT */
  77032. +      )
  77033. +    {
  77034. +      if (ordering == REQUIRE_ORDER)
  77035. +        return EOF;
  77036. +      optarg = argv[optind++];
  77037. +      return 1;
  77038. +    }
  77039. +
  77040. +      /* We have found another option-ARGV-element.
  77041. +     Start decoding its characters.  */
  77042. +
  77043. +      nextchar = (argv[optind] + 1
  77044. +          + (longopts != NULL && argv[optind][1] == '-'));
  77045. +    }
  77046. +
  77047. +  if (longopts != NULL
  77048. +      && ((argv[optind][0] == '-'
  77049. +       && (argv[optind][1] == '-' || long_only))
  77050. +#ifdef GETOPT_COMPAT
  77051. +      || argv[optind][0] == '+'
  77052. +#endif                /* GETOPT_COMPAT */
  77053. +      ))
  77054. +    {
  77055. +      const struct option *p;
  77056. +      char *s = nextchar;
  77057. +      int exact = 0;
  77058. +      int ambig = 0;
  77059. +      const struct option *pfound = NULL;
  77060. +      int indfound;
  77061. +
  77062. +      while (*s && *s != '=')
  77063. +    s++;
  77064. +
  77065. +      /* Test all options for either exact match or abbreviated matches.  */
  77066. +      for (p = longopts, option_index = 0; p->name;
  77067. +       p++, option_index++)
  77068. +    if (!strncmp (p->name, nextchar, s - nextchar))
  77069. +      {
  77070. +        if (s - nextchar == strlen (p->name))
  77071. +          {
  77072. +        /* Exact match found.  */
  77073. +        pfound = p;
  77074. +        indfound = option_index;
  77075. +        exact = 1;
  77076. +        break;
  77077. +          }
  77078. +        else if (pfound == NULL)
  77079. +          {
  77080. +        /* First nonexact match found.  */
  77081. +        pfound = p;
  77082. +        indfound = option_index;
  77083. +          }
  77084. +        else
  77085. +          /* Second nonexact match found.  */
  77086. +          ambig = 1;
  77087. +      }
  77088. +
  77089. +      if (ambig && !exact)
  77090. +    {
  77091. +      if (opterr)
  77092. +        fprintf (stderr, "%s: option `%s' is ambiguous\n",
  77093. +             argv[0], argv[optind]);
  77094. +      nextchar += strlen (nextchar);
  77095. +      optind++;
  77096. +      return '?';
  77097. +    }
  77098. +
  77099. +      if (pfound != NULL)
  77100. +    {
  77101. +      option_index = indfound;
  77102. +      optind++;
  77103. +      if (*s)
  77104. +        {
  77105. +          /* Don't test has_arg with >, because some C compilers don't
  77106. +         allow it to be used on enums. */
  77107. +          if (pfound->has_arg)
  77108. +        optarg = s + 1;
  77109. +          else
  77110. +        {
  77111. +          if (opterr)
  77112. +            {
  77113. +              if (argv[optind - 1][1] == '-')
  77114. +            /* --option */
  77115. +            fprintf (stderr,
  77116. +                 "%s: option `--%s' doesn't allow an argument\n",
  77117. +                 argv[0], pfound->name);
  77118. +              else
  77119. +            /* +option or -option */
  77120. +            fprintf (stderr,
  77121. +                 "%s: option `%c%s' doesn't allow an argument\n",
  77122. +                 argv[0], argv[optind - 1][0], pfound->name);
  77123. +            }
  77124. +          nextchar += strlen (nextchar);
  77125. +          return '?';
  77126. +        }
  77127. +        }
  77128. +      else if (pfound->has_arg == 1)
  77129. +        {
  77130. +          if (optind < argc)
  77131. +        optarg = argv[optind++];
  77132. +          else
  77133. +        {
  77134. +          if (opterr)
  77135. +            fprintf (stderr, "%s: option `%s' requires an argument\n",
  77136. +                 argv[0], argv[optind - 1]);
  77137. +          nextchar += strlen (nextchar);
  77138. +          return '?';
  77139. +        }
  77140. +        }
  77141. +      nextchar += strlen (nextchar);
  77142. +      if (longind != NULL)
  77143. +        *longind = option_index;
  77144. +      if (pfound->flag)
  77145. +        {
  77146. +          *(pfound->flag) = pfound->val;
  77147. +          return 0;
  77148. +        }
  77149. +      return pfound->val;
  77150. +    }
  77151. +      /* Can't find it as a long option.  If this is not getopt_long_only,
  77152. +     or the option starts with '--' or is not a valid short
  77153. +     option, then it's an error.
  77154. +     Otherwise interpret it as a short option. */
  77155. +      if (!long_only || argv[optind][1] == '-'
  77156. +#ifdef GETOPT_COMPAT
  77157. +      || argv[optind][0] == '+'
  77158. +#endif                /* GETOPT_COMPAT */
  77159. +      || my_index (optstring, *nextchar) == NULL)
  77160. +    {
  77161. +      if (opterr)
  77162. +        {
  77163. +          if (argv[optind][1] == '-')
  77164. +        /* --option */
  77165. +        fprintf (stderr, "%s: unrecognized option `--%s'\n",
  77166. +             argv[0], nextchar);
  77167. +          else
  77168. +        /* +option or -option */
  77169. +        fprintf (stderr, "%s: unrecognized option `%c%s'\n",
  77170. +             argv[0], argv[optind][0], nextchar);
  77171. +        }
  77172. +      nextchar += strlen (nextchar);
  77173. +      optind++;
  77174. +      return '?';
  77175. +    }
  77176. +    }
  77177. +
  77178. +  /* Look at and handle the next option-character.  */
  77179. +
  77180. +  {
  77181. +    char c = *nextchar++;
  77182. +    char *temp = my_index (optstring, c);
  77183. +
  77184. +    /* Increment `optind' when we start to process its last character.  */
  77185. +    if (*nextchar == '\0')
  77186. +      optind++;
  77187. +
  77188. +    if (temp == NULL || c == ':')
  77189. +      {
  77190. +    if (opterr)
  77191. +      {
  77192. +        if (c < 040 || c >= 0177)
  77193. +          fprintf (stderr, "%s: unrecognized option, character code 0%o\n",
  77194. +               argv[0], c);
  77195. +        else
  77196. +          fprintf (stderr, "%s: unrecognized option `-%c'\n", argv[0], c);
  77197. +      }
  77198. +    return '?';
  77199. +      }
  77200. +    if (temp[1] == ':')
  77201. +      {
  77202. +    if (temp[2] == ':')
  77203. +      {
  77204. +        /* This is an option that accepts an argument optionally.  */
  77205. +        if (*nextchar != '\0')
  77206. +          {
  77207. +        optarg = nextchar;
  77208. +        optind++;
  77209. +          }
  77210. +        else
  77211. +          optarg = 0;
  77212. +        nextchar = NULL;
  77213. +      }
  77214. +    else
  77215. +      {
  77216. +        /* This is an option that requires an argument.  */
  77217. +        if (*nextchar != 0)
  77218. +          {
  77219. +        optarg = nextchar;
  77220. +        /* If we end this ARGV-element by taking the rest as an arg,
  77221. +           we must advance to the next element now.  */
  77222. +        optind++;
  77223. +          }
  77224. +        else if (optind == argc)
  77225. +          {
  77226. +        if (opterr)
  77227. +          fprintf (stderr, "%s: option `-%c' requires an argument\n",
  77228. +               argv[0], c);
  77229. +        c = '?';
  77230. +          }
  77231. +        else
  77232. +          /* We already incremented `optind' once;
  77233. +         increment it again when taking next ARGV-elt as argument.  */
  77234. +          optarg = argv[optind++];
  77235. +        nextchar = NULL;
  77236. +      }
  77237. +      }
  77238. +    return c;
  77239. +  }
  77240. +}
  77241. +
  77242. +int
  77243. +getopt (argc, argv, optstring)
  77244. +     int argc;
  77245. +     char *const *argv;
  77246. +     const char *optstring;
  77247. +{
  77248. +  return _getopt_internal (argc, argv, optstring,
  77249. +               (const struct option *) 0,
  77250. +               (int *) 0,
  77251. +               0);
  77252. +}
  77253. +
  77254. +#ifdef TEST
  77255. +
  77256. +/* Compile with -DTEST to make an executable for use in testing
  77257. +   the above definition of `getopt'.  */
  77258. +
  77259. +int
  77260. +main (argc, argv)
  77261. +     int argc;
  77262. +     char **argv;
  77263. +{
  77264. +  int c;
  77265. +  int digit_optind = 0;
  77266. +
  77267. +  while (1)
  77268. +    {
  77269. +      int this_option_optind = optind ? optind : 1;
  77270. +
  77271. +      c = getopt (argc, argv, "abc:d:0123456789");
  77272. +      if (c == EOF)
  77273. +    break;
  77274. +
  77275. +      switch (c)
  77276. +    {
  77277. +    case '0':
  77278. +    case '1':
  77279. +    case '2':
  77280. +    case '3':
  77281. +    case '4':
  77282. +    case '5':
  77283. +    case '6':
  77284. +    case '7':
  77285. +    case '8':
  77286. +    case '9':
  77287. +      if (digit_optind != 0 && digit_optind != this_option_optind)
  77288. +        printf ("digits occur in two different argv-elements.\n");
  77289. +      digit_optind = this_option_optind;
  77290. +      printf ("option %c\n", c);
  77291. +      break;
  77292. +
  77293. +    case 'a':
  77294. +      printf ("option a\n");
  77295. +      break;
  77296. +
  77297. +    case 'b':
  77298. +      printf ("option b\n");
  77299. +      break;
  77300. +
  77301. +    case 'c':
  77302. +      printf ("option c with value `%s'\n", optarg);
  77303. +      break;
  77304. +
  77305. +    case '?':
  77306. +      break;
  77307. +
  77308. +    default:
  77309. +      printf ("?? getopt returned character code 0%o ??\n", c);
  77310. +    }
  77311. +    }
  77312. +
  77313. +  if (optind < argc)
  77314. +    {
  77315. +      printf ("non-option ARGV-elements: ");
  77316. +      while (optind < argc)
  77317. +    printf ("%s ", argv[optind++]);
  77318. +      printf ("\n");
  77319. +    }
  77320. +
  77321. +  exit (0);
  77322. +}
  77323. +
  77324. +#endif /* TEST */
  77325. diff -ru --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/getopt.h amiga/fsf/emacs/unixlib/src/zoneinfo/getopt.h
  77326. --- baseline/fsf/emacs/unixlib/src/zoneinfo/getopt.h    Wed Dec 31 17:00:00 1969
  77327. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/getopt.h    Sun Oct 15 17:19:17 1995
  77328. @@ -0,0 +1,113 @@
  77329. +/* Declarations for getopt.
  77330. +   Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
  77331. +
  77332. +   This program is free software; you can redistribute it and/or modify
  77333. +   it under the terms of the GNU General Public License as published by
  77334. +   the Free Software Foundation; either version 2, or (at your option)
  77335. +   any later version.
  77336. +
  77337. +   This program is distributed in the hope that it will be useful,
  77338. +   but WITHOUT ANY WARRANTY; without even the implied warranty of
  77339. +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  77340. +   GNU General Public License for more details.
  77341. +
  77342. +   You should have received a copy of the GNU General Public License
  77343. +   along with this program; if not, write to the Free Software
  77344. +   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  77345. +
  77346. +#ifndef _GETOPT_H_
  77347. +#define _GETOPT_H_
  77348. +
  77349. +/* For communication from `getopt' to the caller.
  77350. +   When `getopt' finds an option that takes an argument,
  77351. +   the argument value is returned here.
  77352. +   Also, when `ordering' is RETURN_IN_ORDER,
  77353. +   each non-option ARGV-element is returned here.  */
  77354. +
  77355. +extern char *optarg;
  77356. +
  77357. +/* Index in ARGV of the next element to be scanned.
  77358. +   This is used for communication to and from the caller
  77359. +   and for communication between successive calls to `getopt'.
  77360. +
  77361. +   On entry to `getopt', zero means this is the first call; initialize.
  77362. +
  77363. +   When `getopt' returns EOF, this is the index of the first of the
  77364. +   non-option elements that the caller should itself scan.
  77365. +
  77366. +   Otherwise, `optind' communicates from one call to the next
  77367. +   how much of ARGV has been scanned so far.  */
  77368. +
  77369. +extern int optind;
  77370. +
  77371. +/* Callers store zero here to inhibit the error message `getopt' prints
  77372. +   for unrecognized options.  */
  77373. +
  77374. +extern int opterr;
  77375. +
  77376. +/* Describe the long-named options requested by the application.
  77377. +   The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
  77378. +   of `struct option' terminated by an element containing a name which is
  77379. +   zero.
  77380. +
  77381. +   The field `has_arg' is:
  77382. +   no_argument        (or 0) if the option does not take an argument,
  77383. +   required_argument    (or 1) if the option requires an argument,
  77384. +   optional_argument     (or 2) if the option takes an optional argument.
  77385. +
  77386. +   If the field `flag' is not NULL, it points to a variable that is set
  77387. +   to the value given in the field `val' when the option is found, but
  77388. +   left unchanged if the option is not found.
  77389. +
  77390. +   To have a long-named option do something other than set an `int' to
  77391. +   a compiled-in constant, such as set a value from `optarg', set the
  77392. +   option's `flag' field to zero and its `val' field to a nonzero
  77393. +   value (the equivalent single-letter option character, if there is
  77394. +   one).  For long options that have a zero `flag' field, `getopt'
  77395. +   returns the contents of the `val' field.  */
  77396. +
  77397. +struct option
  77398. +{
  77399. +#ifdef    __STDC__
  77400. +  const char *name;
  77401. +#else
  77402. +  char *name;
  77403. +#endif
  77404. +  /* has_arg can't be an enum because some compilers complain about
  77405. +     type mismatches in all the code that assumes it is an int.  */
  77406. +  int has_arg;
  77407. +  int *flag;
  77408. +  int val;
  77409. +};
  77410. +
  77411. +/* Names for the values of the `has_arg' field of `struct option'.  */
  77412. +
  77413. +enum _argtype
  77414. +{
  77415. +  no_argument,
  77416. +  required_argument,
  77417. +  optional_argument
  77418. +};
  77419. +
  77420. +#ifdef __STDC__
  77421. +extern int getopt (int argc, char *const *argv, const char *shortopts);
  77422. +extern int getopt_long (int argc, char *const *argv, const char *shortopts,
  77423. +                const struct option *longopts, int *longind);
  77424. +extern int getopt_long_only (int argc, char *const *argv,
  77425. +                 const char *shortopts,
  77426. +                     const struct option *longopts, int *longind);
  77427. +
  77428. +/* Internal only.  Users should not call this directly.  */
  77429. +extern int _getopt_internal (int argc, char *const *argv,
  77430. +                 const char *shortopts,
  77431. +                     const struct option *longopts, int *longind,
  77432. +                 int long_only);
  77433. +#else /* not __STDC__ */
  77434. +extern int getopt ();
  77435. +extern int getopt_long ();
  77436. +extern int getopt_long_only ();
  77437. +
  77438. +extern int _getopt_internal ();
  77439. +#endif /* not __STDC__ */
  77440. +
  77441. +#endif /* _GETOPT_H_ */
  77442. diff -ru --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/ialloc.c amiga/fsf/emacs/unixlib/src/zoneinfo/ialloc.c
  77443. --- baseline/fsf/emacs/unixlib/src/zoneinfo/ialloc.c    Wed Dec 31 17:00:00 1969
  77444. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/ialloc.c    Sun Oct 15 17:19:19 1995
  77445. @@ -0,0 +1,142 @@
  77446. +/*-
  77447. + * Copyright (c) 1991 The Regents of the University of California.
  77448. + * All rights reserved.
  77449. + *
  77450. + * This code is derived from software contributed to Berkeley by
  77451. + * Arthur David Olson of the National Cancer Institute.
  77452. + *
  77453. + * Redistribution and use in source and binary forms, with or without
  77454. + * modification, are permitted provided that the following conditions
  77455. + * are met:
  77456. + * 1. Redistributions of source code must retain the above copyright
  77457. + *    notice, this list of conditions and the following disclaimer.
  77458. + * 2. Redistributions in binary form must reproduce the above copyright
  77459. + *    notice, this list of conditions and the following disclaimer in the
  77460. + *    documentation and/or other materials provided with the distribution.
  77461. + * 3. All advertising materials mentioning features or use of this software
  77462. + *    must display the following acknowledgement:
  77463. + *    This product includes software developed by the University of
  77464. + *    California, Berkeley and its contributors.
  77465. + * 4. Neither the name of the University nor the names of its contributors
  77466. + *    may be used to endorse or promote products derived from this software
  77467. + *    without specific prior written permission.
  77468. + *
  77469. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  77470. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  77471. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  77472. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  77473. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  77474. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  77475. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  77476. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  77477. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  77478. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  77479. + * SUCH DAMAGE.
  77480. + */
  77481. +
  77482. +#ifndef lint
  77483. +static char sccsid[] = "@(#)ialloc.c    5.3 (Berkeley) 4/20/91";
  77484. +#endif /* not lint */
  77485. +
  77486. +#ifdef notdef
  77487. +static char    elsieid[] = "@(#)ialloc.c    8.18";
  77488. +#endif
  77489. +
  77490. +/*LINTLIBRARY*/
  77491. +
  77492. +#include <sys/cdefs.h>
  77493. +#include <sys/types.h>
  77494. +#include <string.h>
  77495. +#include <stdlib.h>
  77496. +
  77497. +#ifdef MAL
  77498. +#define NULLMAL(x)    ((x) == NULL || (x) == MAL)
  77499. +#else /* !defined MAL */
  77500. +#define NULLMAL(x)    ((x) == NULL)
  77501. +#endif /* !defined MAL */
  77502. +
  77503. +#define nonzero(n)    (((n) == 0) ? 1 : (n))
  77504. +
  77505. +char *    icalloc __P((int nelem, int elsize));
  77506. +char *    icatalloc __P((char * old, const char * new));
  77507. +char *    icpyalloc __P((const char * string));
  77508. +char *    imalloc __P((int n));
  77509. +char *    irealloc __P((char * pointer, int size));
  77510. +void    ifree __P((char * pointer));
  77511. +
  77512. +char *
  77513. +imalloc(n)
  77514. +const int    n;
  77515. +{
  77516. +#ifdef MAL
  77517. +    register char *    result;
  77518. +
  77519. +    result = malloc((size_t) nonzero(n));
  77520. +    return NULLMAL(result) ? NULL : result;
  77521. +#else /* !defined MAL */
  77522. +    return malloc((size_t) nonzero(n));
  77523. +#endif /* !defined MAL */
  77524. +}
  77525. +
  77526. +char *
  77527. +icalloc(nelem, elsize)
  77528. +int    nelem;
  77529. +int    elsize;
  77530. +{
  77531. +    if (nelem == 0 || elsize == 0)
  77532. +        nelem = elsize = 1;
  77533. +    return calloc((size_t) nelem, (size_t) elsize);
  77534. +}
  77535. +
  77536. +char *
  77537. +irealloc(pointer, size)
  77538. +char * const    pointer;
  77539. +const int    size;
  77540. +{
  77541. +    if (NULLMAL(pointer))
  77542. +        return imalloc(size);
  77543. +    return realloc((void *) pointer, (size_t) nonzero(size));
  77544. +}
  77545. +
  77546. +char *
  77547. +icatalloc(old, new)
  77548. +char * const        old;
  77549. +const char * const    new;
  77550. +{
  77551. +    register char *    result;
  77552. +    register    oldsize, newsize;
  77553. +
  77554. +    newsize = NULLMAL(new) ? 0 : strlen(new);
  77555. +    if (NULLMAL(old))
  77556. +        oldsize = 0;
  77557. +    else if (newsize == 0)
  77558. +        return old;
  77559. +    else    oldsize = strlen(old);
  77560. +    if ((result = irealloc(old, oldsize + newsize + 1)) != NULL)
  77561. +        if (!NULLMAL(new))
  77562. +            (void) strcpy(result + oldsize, new);
  77563. +    return result;
  77564. +}
  77565. +
  77566. +char *
  77567. +icpyalloc(string)
  77568. +const char * const    string;
  77569. +{
  77570. +    return icatalloc((char *) NULL, string);
  77571. +}
  77572. +
  77573. +void
  77574. +ifree(p)
  77575. +char * const    p;
  77576. +{
  77577. +    if (!NULLMAL(p))
  77578. +        (void) free(p);
  77579. +}
  77580. +
  77581. +void
  77582. +icfree(p)
  77583. +char * const    p;
  77584. +{
  77585. +    if (!NULLMAL(p))
  77586. +        (void) free(p);
  77587. +}
  77588. diff -ru --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/smakefile amiga/fsf/emacs/unixlib/src/zoneinfo/smakefile
  77589. --- baseline/fsf/emacs/unixlib/src/zoneinfo/smakefile    Wed Dec 31 17:00:00 1969
  77590. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/smakefile    Sun Oct 15 17:19:20 1995
  77591. @@ -0,0 +1,11 @@
  77592. +CFLAGS= DEFINE=TM_GMTOFF=tm_gmtoff DEFINE=TM_ZONE=tm_zone DEFINE=emkdir=mkdir DEFINE=NOSOLAR IDIR=src:unix/include/ IGNORE=104
  77593. +
  77594. +all: zic
  77595. +
  77596. +zic: zic.o ialloc.o getopt.o
  77597. +    sc link to zic zic.o ialloc.o getopt.o lib src:unix/src/unix.lib
  77598. +
  77599. +zic.o: zic.c
  77600. +ialloc.o: ialloc.c
  77601. +getopt.o: getopt.c getopt.h
  77602. +
  77603. Binary files baseline/fsf/emacs/unixlib/src/zoneinfo/zic and amiga/fsf/emacs/unixlib/src/zoneinfo/zic differ
  77604. diff -ru --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/zic.8 amiga/fsf/emacs/unixlib/src/zoneinfo/zic.8
  77605. --- baseline/fsf/emacs/unixlib/src/zoneinfo/zic.8    Wed Dec 31 17:00:00 1969
  77606. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/zic.8    Sun Oct 15 17:19:24 1995
  77607. @@ -0,0 +1,424 @@
  77608. +.\" Copyright (c) 1991 The Regents of the University of California.
  77609. +.\" All rights reserved.
  77610. +.\"
  77611. +.\" This code is derived from software contributed to Berkeley by
  77612. +.\" Arthur David Olson of the National Cancer Institute.
  77613. +.\"
  77614. +.\" Redistribution and use in source and binary forms, with or without
  77615. +.\" modification, are permitted provided that the following conditions
  77616. +.\" are met:
  77617. +.\" 1. Redistributions of source code must retain the above copyright
  77618. +.\"    notice, this list of conditions and the following disclaimer.
  77619. +.\" 2. Redistributions in binary form must reproduce the above copyright
  77620. +.\"    notice, this list of conditions and the following disclaimer in the
  77621. +.\"    documentation and/or other materials provided with the distribution.
  77622. +.\" 3. All advertising materials mentioning features or use of this software
  77623. +.\"    must display the following acknowledgement:
  77624. +.\"    This product includes software developed by the University of
  77625. +.\"    California, Berkeley and its contributors.
  77626. +.\" 4. Neither the name of the University nor the names of its contributors
  77627. +.\"    may be used to endorse or promote products derived from this software
  77628. +.\"    without specific prior written permission.
  77629. +.\"
  77630. +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  77631. +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  77632. +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  77633. +.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  77634. +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  77635. +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  77636. +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  77637. +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  77638. +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  77639. +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  77640. +.\" SUCH DAMAGE.
  77641. +.\"
  77642. +.\"    @(#)zic.8    5.2 (Berkeley) 4/20/91
  77643. +.\"
  77644. +.TH ZIC 8
  77645. +.SH NAME
  77646. +zic \- time zone compiler
  77647. +.SH SYNOPSIS
  77648. +.B zic
  77649. +[
  77650. +.B \-v
  77651. +] [
  77652. +.B \-d
  77653. +.I directory
  77654. +] [
  77655. +.B \-l
  77656. +.I localtime
  77657. +] [
  77658. +.B \-p
  77659. +.I posixrules
  77660. +] [
  77661. +.B \-L
  77662. +.I leapsecondfilename
  77663. +] [
  77664. +.B \-s
  77665. +] [
  77666. +.I filename
  77667. +\&... ]
  77668. +.SH DESCRIPTION
  77669. +.if t .ds lq ``
  77670. +.if t .ds rq ''
  77671. +.if n .ds lq \&"\"
  77672. +.if n .ds rq \&"\"
  77673. +.de q
  77674. +\\$3\*(lq\\$1\*(rq\\$2
  77675. +..
  77676. +.I Zic
  77677. +reads text from the file(s) named on the command line
  77678. +and creates the time conversion information files specified in this input.
  77679. +If a
  77680. +.I filename
  77681. +is
  77682. +.BR \- ,
  77683. +the standard input is read.
  77684. +.PP
  77685. +These options are available:
  77686. +.TP
  77687. +.BI "\-d " directory
  77688. +Create time conversion information files in the named directory rather than
  77689. +in the standard directory named below.
  77690. +.TP
  77691. +.BI "\-l " timezone
  77692. +Use the given time zone as local time.
  77693. +.I Zic
  77694. +will act as if the input contained a link line of the form
  77695. +.sp
  77696. +.ti +.5i
  77697. +Link    \fItimezone\fP        localtime
  77698. +.TP
  77699. +.BI "\-p " timezone
  77700. +Use the given time zone's rules when handling POSIX-format
  77701. +time zone environment variables.
  77702. +.I Zic
  77703. +will act as if the input contained a link line of the form
  77704. +.sp
  77705. +.ti +.5i
  77706. +Link    \fItimezone\fP        posixrules
  77707. +.TP
  77708. +.BI "\-L " leapsecondfilename
  77709. +Read leap second information from the file with the given name.
  77710. +If this option is not used,
  77711. +no leap second information appears in output files.
  77712. +.TP
  77713. +.B \-v
  77714. +Complain if a year that appears in a data file is outside the range
  77715. +of years representable by
  77716. +.IR time (2)
  77717. +values.
  77718. +.TP
  77719. +.B \-s
  77720. +Limit time values stored in output files to values that are the same
  77721. +whether they're taken to be signed or unsigned.
  77722. +You can use this option to generate SVVS-compatible files.
  77723. +.sp
  77724. +Input lines are made up of fields.
  77725. +Fields are separated from one another by any number of white space characters.
  77726. +Leading and trailing white space on input lines is ignored.
  77727. +An unquoted sharp character (#) in the input introduces a comment which extends
  77728. +to the end of the line the sharp character appears on.
  77729. +White space characters and sharp characters may be enclosed in double quotes
  77730. +(") if they're to be used as part of a field.
  77731. +Any line that is blank (after comment stripping) is ignored.
  77732. +Non-blank lines are expected to be of one of three types:
  77733. +rule lines, zone lines, and link lines.
  77734. +.PP
  77735. +A rule line has the form
  77736. +.nf
  77737. +.B
  77738. +.ti +.5i
  77739. +.ta \w'Rule\0\0'u +\w'NAME\0\0'u +\w'FROM\0\0'u +\w'1973\0\0'u +\w'TYPE\0\0'u +\w'Apr\0\0'u +\w'lastSun\0\0'u +\w'2:00\0\0'u +\w'SAVE\0\0'u
  77740. +.sp
  77741. +Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  77742. +.sp
  77743. +For example:
  77744. +.ti +.5i
  77745. +.sp
  77746. +Rule    USA    1969    1973    \-    Apr    lastSun    2:00    1:00    D
  77747. +.sp
  77748. +.fi
  77749. +The fields that make up a rule line are:
  77750. +.TP "\w'LETTER/S'u"
  77751. +.B NAME
  77752. +Gives the (arbitrary) name of the set of rules this rule is part of.
  77753. +.TP
  77754. +.B FROM
  77755. +Gives the first year in which the rule applies.
  77756. +The word
  77757. +.B minimum
  77758. +(or an abbreviation) means the minimum year with a representable time value.
  77759. +The word
  77760. +.B maximum
  77761. +(or an abbreviation) means the maximum year with a representable time value.
  77762. +.TP
  77763. +.B TO
  77764. +Gives the final year in which the rule applies.
  77765. +In addition to
  77766. +.B minimum
  77767. +and
  77768. +.B maximum
  77769. +(as above),
  77770. +the word
  77771. +.B only
  77772. +(or an abbreviation)
  77773. +may be used to repeat the value of the
  77774. +.B FROM
  77775. +field.
  77776. +.TP
  77777. +.B TYPE
  77778. +Gives the type of year in which the rule applies.
  77779. +If
  77780. +.B TYPE
  77781. +is
  77782. +.B \-
  77783. +then the rule applies in all years between
  77784. +.B FROM
  77785. +and
  77786. +.B TO
  77787. +inclusive;
  77788. +if
  77789. +.B TYPE
  77790. +is
  77791. +.BR uspres ,
  77792. +the rule applies in U.S. Presidential election years;
  77793. +if
  77794. +.B TYPE
  77795. +is
  77796. +.BR nonpres ,
  77797. +the rule applies in years other than U.S. Presidential election years.
  77798. +If
  77799. +.B TYPE
  77800. +is something else, then
  77801. +.I zic
  77802. +executes the command
  77803. +.ti +.5i
  77804. +\fByearistype\fP \fIyear\fP \fItype\fP
  77805. +.br
  77806. +to check the type of a year:
  77807. +an exit status of zero is taken to mean that the year is of the given type;
  77808. +an exit status of one is taken to mean that the year is not of the given type.
  77809. +.TP
  77810. +.B IN
  77811. +Names the month in which the rule takes effect.
  77812. +Month names may be abbreviated.
  77813. +.TP
  77814. +.B ON
  77815. +Gives the day on which the rule takes effect.
  77816. +Recognized forms include:
  77817. +.nf
  77818. +.in +.5i
  77819. +.sp
  77820. +.ta \w'Sun<=25\0\0'u
  77821. +5    the fifth of the month
  77822. +lastSun    the last Sunday in the month
  77823. +lastMon    the last Monday in the month
  77824. +Sun>=8    first Sunday on or after the eighth
  77825. +Sun<=25    last Sunday on or before the 25th
  77826. +.fi
  77827. +.in -.5i
  77828. +.sp
  77829. +Names of days of the week may be abbreviated or spelled out in full.
  77830. +Note that there must be no spaces within the
  77831. +.B ON
  77832. +field.
  77833. +.TP
  77834. +.B AT
  77835. +Gives the time of day at which the rule takes effect.
  77836. +Recognized forms include:
  77837. +.nf
  77838. +.in +.5i
  77839. +.sp
  77840. +.ta \w'1:28:13\0\0'u
  77841. +2    time in hours
  77842. +2:00    time in hours and minutes
  77843. +15:00    24-hour format time (for times after noon)
  77844. +1:28:14    time in hours, minutes, and seconds
  77845. +.fi
  77846. +.in -.5i
  77847. +.sp
  77848. +Any of these forms may be followed by the letter
  77849. +.B w
  77850. +if the given time is local
  77851. +.q "wall clock"
  77852. +time or
  77853. +.B s
  77854. +if the given time is local
  77855. +.q standard
  77856. +time; in the absence of
  77857. +.B w
  77858. +or
  77859. +.BR s ,
  77860. +wall clock time is assumed.
  77861. +.TP
  77862. +.B SAVE
  77863. +Gives the amount of time to be added to local standard time when the rule is in
  77864. +effect.
  77865. +This field has the same format as the
  77866. +.B AT
  77867. +field
  77868. +(although, of course, the
  77869. +.B w
  77870. +and
  77871. +.B s
  77872. +suffixes are not used).
  77873. +.TP
  77874. +.B LETTER/S
  77875. +Gives the
  77876. +.q "variable part"
  77877. +(for example, the
  77878. +.q S
  77879. +or
  77880. +.q D
  77881. +in
  77882. +.q EST
  77883. +or
  77884. +.q EDT )
  77885. +of time zone abbreviations to be used when this rule is in effect.
  77886. +If this field is
  77887. +.BR \- ,
  77888. +the variable part is null.
  77889. +.PP
  77890. +A zone line has the form
  77891. +.sp
  77892. +.nf
  77893. +.ti +.5i
  77894. +.ta \w'Zone\0\0'u +\w'Australia/South\-west\0\0'u +\w'GMTOFF\0\0'u +\w'RULES/SAVE\0\0'u +\w'FORMAT\0\0'u
  77895. +Zone    NAME    GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  77896. +.sp
  77897. +For example:
  77898. +.sp
  77899. +.ti +.5i
  77900. +Zone    Australia/South\-west    9:30    Aus    CST    1987 Mar 15 2:00
  77901. +.sp
  77902. +.fi
  77903. +The fields that make up a zone line are:
  77904. +.TP "\w'GMTOFF'u"
  77905. +.B NAME
  77906. +The name of the time zone.
  77907. +This is the name used in creating the time conversion information file for the
  77908. +zone.
  77909. +.TP
  77910. +.B GMTOFF
  77911. +The amount of time to add to GMT to get standard time in this zone.
  77912. +This field has the same format as the
  77913. +.B AT
  77914. +and
  77915. +.B SAVE
  77916. +fields of rule lines;
  77917. +begin the field with a minus sign if time must be subtracted from GMT.
  77918. +.TP
  77919. +.B RULES/SAVE
  77920. +The name of the rule(s) that apply in the time zone or,
  77921. +alternately, an amount of time to add to local standard time.
  77922. +If this field is
  77923. +.B \-
  77924. +then standard time always applies in the time zone.
  77925. +.TP
  77926. +.B FORMAT
  77927. +The format for time zone abbreviations in this time zone.
  77928. +The pair of characters
  77929. +.B %s
  77930. +is used to show where the
  77931. +.q "variable part"
  77932. +of the time zone abbreviation goes.
  77933. +.TP
  77934. +.B UNTIL
  77935. +The time at which the GMT offset or the rule(s) change for a location.
  77936. +It is specified as a year, a month, a day, and a time of day.
  77937. +If this is specified,
  77938. +the time zone information is generated from the given GMT offset
  77939. +and rule change until the time specified.
  77940. +.IP
  77941. +The next line must be a
  77942. +.q continuation
  77943. +line; this has the same form as a zone line except that the
  77944. +string
  77945. +.q Zone
  77946. +and the name are omitted, as the continuation line will
  77947. +place information starting at the time specified as the
  77948. +.B UNTIL
  77949. +field in the previous line in the file used by the previous line.
  77950. +Continuation lines may contain an
  77951. +.B UNTIL
  77952. +field, just as zone lines do, indicating that the next line is a further
  77953. +continuation.
  77954. +.PP
  77955. +A link line has the form
  77956. +.sp
  77957. +.nf
  77958. +.ti +.5i
  77959. +.if t .ta \w'Link\0\0'u +\w'LINK-FROM\0\0'u
  77960. +.if n .ta \w'Link\0\0'u +\w'US/Eastern\0\0'u
  77961. +Link    LINK-FROM    LINK-TO
  77962. +.sp
  77963. +For example:
  77964. +.sp
  77965. +.ti +.5i
  77966. +Link    US/Eastern    EST5EDT
  77967. +.sp
  77968. +.fi
  77969. +The
  77970. +.B LINK-FROM
  77971. +field should appear as the
  77972. +.B NAME
  77973. +field in some zone line;
  77974. +the
  77975. +.B LINK-TO
  77976. +field is used as an alternate name for that zone.
  77977. +.PP
  77978. +Except for continuation lines,
  77979. +lines may appear in any order in the input.
  77980. +.PP
  77981. +Lines in the file that describes leap seconds have the following form:
  77982. +.nf
  77983. +.B
  77984. +.ti +.5i
  77985. +.ta \w'Leap\0\0'u +\w'YEAR\0\0'u +\w'MONTH\0\0'u +\w'DAY\0\0'u +\w'HH:MM:SS\0\0'u +\w'CORR\0\0'u
  77986. +Leap    YEAR    MONTH    DAY    HH:MM:SS    CORR    R/S
  77987. +.sp
  77988. +For example:
  77989. +.ti +.5i
  77990. +.sp
  77991. +Leap    1974    Dec    31    23:59:60    +    S
  77992. +.sp
  77993. +.fi
  77994. +The 
  77995. +.BR YEAR ,
  77996. +.BR MONTH ,
  77997. +.BR DAY ,
  77998. +and
  77999. +.B HH:MM:SS
  78000. +fields tell when the leap second happened.
  78001. +The
  78002. +.B CORR
  78003. +field
  78004. +should be
  78005. +.q +
  78006. +if a second was added
  78007. +or 
  78008. +.q -
  78009. +if a second was skipped.
  78010. +The
  78011. +.B R/S
  78012. +field
  78013. +should be (an abbreviation of)
  78014. +.q Stationary
  78015. +if the leap second time given by the other fields should be interpreted as GMT
  78016. +or
  78017. +(an abbreviation of)
  78018. +.q Rolling
  78019. +if the leap second time given by the other fields should be interpreted as
  78020. +local wall clock time.
  78021. +.SH NOTE
  78022. +For areas with more than two types of local time,
  78023. +you may need to use local standard time in the
  78024. +.B AT
  78025. +field of the earliest transition time's rule to ensure that
  78026. +the earliest transition time recorded in the compiled file is correct.
  78027. +.SH FILE
  78028. +/etc/zoneinfo    standard directory used for created files
  78029. +.SH "SEE ALSO"
  78030. +newctime(3), tzfile(5), zdump(8)
  78031. +.. @(#)zic.8    4.4
  78032. diff -ru --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/zic.c amiga/fsf/emacs/unixlib/src/zoneinfo/zic.c
  78033. --- baseline/fsf/emacs/unixlib/src/zoneinfo/zic.c    Wed Dec 31 17:00:00 1969
  78034. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/zic.c    Sun Oct 15 17:19:26 1995
  78035. @@ -0,0 +1,1903 @@
  78036. +/*-
  78037. + * Copyright (c) 1991 The Regents of the University of California.
  78038. + * All rights reserved.
  78039. + *
  78040. + * This code is derived from software contributed to Berkeley by
  78041. + * Arthur David Olson of the National Cancer Institute.
  78042. + *
  78043. + * Redistribution and use in source and binary forms, with or without
  78044. + * modification, are permitted provided that the following conditions
  78045. + * are met:
  78046. + * 1. Redistributions of source code must retain the above copyright
  78047. + *    notice, this list of conditions and the following disclaimer.
  78048. + * 2. Redistributions in binary form must reproduce the above copyright
  78049. + *    notice, this list of conditions and the following disclaimer in the
  78050. + *    documentation and/or other materials provided with the distribution.
  78051. + * 3. All advertising materials mentioning features or use of this software
  78052. + *    must display the following acknowledgement:
  78053. + *    This product includes software developed by the University of
  78054. + *    California, Berkeley and its contributors.
  78055. + * 4. Neither the name of the University nor the names of its contributors
  78056. + *    may be used to endorse or promote products derived from this software
  78057. + *    without specific prior written permission.
  78058. + *
  78059. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  78060. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  78061. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  78062. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  78063. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  78064. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  78065. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  78066. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  78067. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  78068. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  78069. + * SUCH DAMAGE.
  78070. + */
  78071. +
  78072. +#ifndef lint
  78073. +static char sccsid[] = "@(#)zic.c    5.3 (Berkeley) 4/20/91";
  78074. +#endif /* not lint */
  78075. +
  78076. +#ifdef notdef
  78077. +static char    elsieid[] = "@(#)zic.c    4.12";
  78078. +#endif
  78079. +
  78080. +#include <sys/types.h>
  78081. +#include <sys/cdefs.h>
  78082. +#include <sys/stat.h>
  78083. +#include <time.h>
  78084. +#include <tzfile.h>
  78085. +#include <stdio.h>
  78086. +#include <ctype.h>
  78087. +#include <string.h>
  78088. +#include <stdlib.h>
  78089. +
  78090. +#ifndef TRUE
  78091. +#define TRUE    1
  78092. +#define FALSE    0
  78093. +#endif /* !defined TRUE */
  78094. +
  78095. +#ifndef EXIT_FAILURE
  78096. +#define EXIT_FAILURE 1
  78097. +#endif
  78098. +
  78099. +#ifndef EXIT_SUCCESS
  78100. +#define EXIT_SUCCESS 0
  78101. +#endif
  78102. +
  78103. +struct rule {
  78104. +    const char *    r_filename;
  78105. +    int        r_linenum;
  78106. +    const char *    r_name;
  78107. +
  78108. +    int        r_loyear;    /* for example, 1986 */
  78109. +    int        r_hiyear;    /* for example, 1986 */
  78110. +    const char *    r_yrtype;
  78111. +
  78112. +    int        r_month;    /* 0..11 */
  78113. +
  78114. +    int        r_dycode;    /* see below */
  78115. +    int        r_dayofmonth;
  78116. +    int        r_wday;
  78117. +
  78118. +    long        r_tod;        /* time from midnight */
  78119. +    int        r_todisstd;    /* above is standard time if TRUE */
  78120. +                    /* or wall clock time if FALSE */
  78121. +    long        r_stdoff;    /* offset from standard time */
  78122. +    const char *    r_abbrvar;    /* variable part of abbreviation */
  78123. +
  78124. +    int        r_todo;        /* a rule to do (used in outzone) */
  78125. +    time_t        r_temp;        /* used in outzone */
  78126. +};
  78127. +
  78128. +/*
  78129. +**    r_dycode        r_dayofmonth    r_wday
  78130. +*/
  78131. +
  78132. +#define DC_DOM        0    /* 1..31 */    /* unused */
  78133. +#define DC_DOWGEQ    1    /* 1..31 */    /* 0..6 (Sun..Sat) */
  78134. +#define DC_DOWLEQ    2    /* 1..31 */    /* 0..6 (Sun..Sat) */
  78135. +
  78136. +struct zone {
  78137. +    const char *    z_filename;
  78138. +    int        z_linenum;
  78139. +
  78140. +    const char *    z_name;
  78141. +    long        z_gmtoff;
  78142. +    const char *    z_rule;
  78143. +    const char *    z_format;
  78144. +
  78145. +    long        z_stdoff;
  78146. +
  78147. +    struct rule *    z_rules;
  78148. +    int        z_nrules;
  78149. +
  78150. +    struct rule    z_untilrule;
  78151. +    time_t        z_untiltime;
  78152. +};
  78153. +
  78154. +extern char *    icatalloc __P((char * old, const char * new));
  78155. +extern char *    icpyalloc __P((const char * string));
  78156. +extern void    ifree __P((char * p));
  78157. +extern char *    imalloc __P((int n));
  78158. +extern char *    irealloc __P((char * old, int n));
  78159. +extern int    link __P((const char * fromname, const char * toname));
  78160. +extern char *    optarg;
  78161. +extern int    optind;
  78162. +static void    addtt __P((time_t starttime, int type));
  78163. +static int    addtype
  78164. +            __P((long gmtoff, const char * abbr, int isdst,
  78165. +            int ttisstd));
  78166. +static void    addleap __P((time_t t, int positive, int rolling));
  78167. +static void    adjleap __P((void));
  78168. +static void    associate __P((void));
  78169. +static int    ciequal __P((const char * ap, const char * bp));
  78170. +static void    convert __P((long val, char * buf));
  78171. +static void    dolink __P((const char * fromfile, const char * tofile));
  78172. +static void    eat __P((const char * name, int num));
  78173. +static void    eats __P((const char * name, int num,
  78174. +            const char * rname, int rnum));
  78175. +static long    eitol __P((int i));
  78176. +static void    error __P((const char * message));
  78177. +static char **    getfields __P((char * buf));
  78178. +static long    gethms __P((char * string, const char * errstrng,
  78179. +            int signable));
  78180. +static void    infile __P((const char * filename));
  78181. +static void    inleap __P((char ** fields, int nfields));
  78182. +static void    inlink __P((char ** fields, int nfields));
  78183. +static void    inrule __P((char ** fields, int nfields));
  78184. +static int    inzcont __P((char ** fields, int nfields));
  78185. +static int    inzone __P((char ** fields, int nfields));
  78186. +static int    inzsub __P((char ** fields, int nfields, int iscont));
  78187. +static int    itsabbr __P((const char * abbr, const char * word));
  78188. +static int    itsdir __P((const char * name));
  78189. +static int    lowerit __P((int c));
  78190. +static char *    memcheck __P((char * tocheck));
  78191. +static int    mkdirs __P((char * filename));
  78192. +static void    newabbr __P((const char * abbr));
  78193. +static long    oadd __P((long t1, long t2));
  78194. +static void    outzone __P((const struct zone * zp, int ntzones));
  78195. +static void    puttzcode __P((long code, FILE * fp));
  78196. +static int    rcomp __P((const void *leftp, const void *rightp));
  78197. +static time_t    rpytime __P((const struct rule * rp, int wantedy));
  78198. +static void    rulesub __P((struct rule * rp, char * loyearp, char * hiyearp,
  78199. +        char * typep, char * monthp, char * dayp, char * timep));
  78200. +static void    setboundaries __P((void));
  78201. +static time_t    tadd __P((time_t t1, long t2));
  78202. +static void    usage __P((void));
  78203. +static void    writezone __P((const char * name));
  78204. +static int    yearistype __P((int year, const char * type));
  78205. +
  78206. +static int        charcnt;
  78207. +static int        errors;
  78208. +static const char *    filename;
  78209. +static int        leapcnt;
  78210. +static int        linenum;
  78211. +static time_t        max_time;
  78212. +static int        max_year;
  78213. +static time_t        min_time;
  78214. +static int        min_year;
  78215. +static int        noise;
  78216. +static const char *    rfilename;
  78217. +static int        rlinenum;
  78218. +static const char *    progname;
  78219. +static int        timecnt;
  78220. +static int        typecnt;
  78221. +static int        tt_signed;
  78222. +
  78223. +/*
  78224. +** Line codes.
  78225. +*/
  78226. +
  78227. +#define LC_RULE        0
  78228. +#define LC_ZONE        1
  78229. +#define LC_LINK        2
  78230. +#define LC_LEAP        3
  78231. +
  78232. +/*
  78233. +** Which fields are which on a Zone line.
  78234. +*/
  78235. +
  78236. +#define ZF_NAME        1
  78237. +#define ZF_GMTOFF    2
  78238. +#define ZF_RULE        3
  78239. +#define ZF_FORMAT    4
  78240. +#define ZF_TILYEAR    5
  78241. +#define ZF_TILMONTH    6
  78242. +#define ZF_TILDAY    7
  78243. +#define ZF_TILTIME    8
  78244. +#define ZONE_MINFIELDS    5
  78245. +#define ZONE_MAXFIELDS    9
  78246. +
  78247. +/*
  78248. +** Which fields are which on a Zone continuation line.
  78249. +*/
  78250. +
  78251. +#define ZFC_GMTOFF    0
  78252. +#define ZFC_RULE    1
  78253. +#define ZFC_FORMAT    2
  78254. +#define ZFC_TILYEAR    3
  78255. +#define ZFC_TILMONTH    4
  78256. +#define ZFC_TILDAY    5
  78257. +#define ZFC_TILTIME    6
  78258. +#define ZONEC_MINFIELDS    3
  78259. +#define ZONEC_MAXFIELDS    7
  78260. +
  78261. +/*
  78262. +** Which files are which on a Rule line.
  78263. +*/
  78264. +
  78265. +#define RF_NAME        1
  78266. +#define RF_LOYEAR    2
  78267. +#define RF_HIYEAR    3
  78268. +#define RF_COMMAND    4
  78269. +#define RF_MONTH    5
  78270. +#define RF_DAY        6
  78271. +#define RF_TOD        7
  78272. +#define RF_STDOFF    8
  78273. +#define RF_ABBRVAR    9
  78274. +#define RULE_FIELDS    10
  78275. +
  78276. +/*
  78277. +** Which fields are which on a Link line.
  78278. +*/
  78279. +
  78280. +#define LF_FROM        1
  78281. +#define LF_TO        2
  78282. +#define LINK_FIELDS    3
  78283. +
  78284. +/*
  78285. +** Which fields are which on a Leap line.
  78286. +*/
  78287. +
  78288. +#define LP_YEAR        1
  78289. +#define LP_MONTH    2
  78290. +#define LP_DAY        3
  78291. +#define LP_TIME        4
  78292. +#define LP_CORR        5
  78293. +#define LP_ROLL        6
  78294. +#define LEAP_FIELDS    7
  78295. +
  78296. +/*
  78297. +** Year synonyms.
  78298. +*/
  78299. +
  78300. +#define YR_MINIMUM    0
  78301. +#define YR_MAXIMUM    1
  78302. +#define YR_ONLY        2
  78303. +
  78304. +static struct rule *    rules;
  78305. +static int        nrules;    /* number of rules */
  78306. +
  78307. +static struct zone *    zones;
  78308. +static int        nzones;    /* number of zones */
  78309. +
  78310. +struct link {
  78311. +    const char *    l_filename;
  78312. +    int        l_linenum;
  78313. +    const char *    l_from;
  78314. +    const char *    l_to;
  78315. +};
  78316. +
  78317. +static struct link *    links;
  78318. +static int        nlinks;
  78319. +
  78320. +struct lookup {
  78321. +    const char *    l_word;
  78322. +    const int    l_value;
  78323. +};
  78324. +
  78325. +static struct lookup const *    byword __P((const char * string,
  78326. +                    const struct lookup * lp));
  78327. +
  78328. +static struct lookup const    line_codes[] = {
  78329. +    "Rule",        LC_RULE,
  78330. +    "Zone",        LC_ZONE,
  78331. +    "Link",        LC_LINK,
  78332. +    "Leap",        LC_LEAP,
  78333. +    NULL,        0
  78334. +};
  78335. +
  78336. +static struct lookup const    mon_names[] = {
  78337. +    "January",    TM_JANUARY,
  78338. +    "February",    TM_FEBRUARY,
  78339. +    "March",    TM_MARCH,
  78340. +    "April",    TM_APRIL,
  78341. +    "May",        TM_MAY,
  78342. +    "June",        TM_JUNE,
  78343. +    "July",        TM_JULY,
  78344. +    "August",    TM_AUGUST,
  78345. +    "September",    TM_SEPTEMBER,
  78346. +    "October",    TM_OCTOBER,
  78347. +    "November",    TM_NOVEMBER,
  78348. +    "December",    TM_DECEMBER,
  78349. +    NULL,        0
  78350. +};
  78351. +
  78352. +static struct lookup const    wday_names[] = {
  78353. +    "Sunday",    TM_SUNDAY,
  78354. +    "Monday",    TM_MONDAY,
  78355. +    "Tuesday",    TM_TUESDAY,
  78356. +    "Wednesday",    TM_WEDNESDAY,
  78357. +    "Thursday",    TM_THURSDAY,
  78358. +    "Friday",    TM_FRIDAY,
  78359. +    "Saturday",    TM_SATURDAY,
  78360. +    NULL,        0
  78361. +};
  78362. +
  78363. +static struct lookup const    lasts[] = {
  78364. +    "last-Sunday",        TM_SUNDAY,
  78365. +    "last-Monday",        TM_MONDAY,
  78366. +    "last-Tuesday",        TM_TUESDAY,
  78367. +    "last-Wednesday",    TM_WEDNESDAY,
  78368. +    "last-Thursday",    TM_THURSDAY,
  78369. +    "last-Friday",        TM_FRIDAY,
  78370. +    "last-Saturday",    TM_SATURDAY,
  78371. +    NULL,            0
  78372. +};
  78373. +
  78374. +static struct lookup const    begin_years[] = {
  78375. +    "minimum",        YR_MINIMUM,
  78376. +    "maximum",        YR_MAXIMUM,
  78377. +    NULL,            0
  78378. +};
  78379. +
  78380. +static struct lookup const    end_years[] = {
  78381. +    "minimum",        YR_MINIMUM,
  78382. +    "maximum",        YR_MAXIMUM,
  78383. +    "only",            YR_ONLY,
  78384. +    NULL,            0
  78385. +};
  78386. +
  78387. +static struct lookup const    leap_types[] = {
  78388. +    "Rolling",        TRUE,
  78389. +    "Stationary",        FALSE,
  78390. +    NULL,            0
  78391. +};
  78392. +
  78393. +static const int    len_months[2][MONSPERYEAR] = {
  78394. +    31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,
  78395. +    31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
  78396. +};
  78397. +
  78398. +static const int    len_years[2] = {
  78399. +    DAYSPERNYEAR, DAYSPERLYEAR
  78400. +};
  78401. +
  78402. +static time_t        ats[TZ_MAX_TIMES];
  78403. +static unsigned char    types[TZ_MAX_TIMES];
  78404. +static long        gmtoffs[TZ_MAX_TYPES];
  78405. +static char        isdsts[TZ_MAX_TYPES];
  78406. +static char        abbrinds[TZ_MAX_TYPES];
  78407. +static char        ttisstds[TZ_MAX_TYPES];
  78408. +static char        chars[TZ_MAX_CHARS];
  78409. +static time_t        trans[TZ_MAX_LEAPS];
  78410. +static long        corr[TZ_MAX_LEAPS];
  78411. +static char        roll[TZ_MAX_LEAPS];
  78412. +
  78413. +/*
  78414. +** Memory allocation.
  78415. +*/
  78416. +
  78417. +static char *
  78418. +memcheck(ptr)
  78419. +char * const    ptr;
  78420. +{
  78421. +    if (ptr == NULL) {
  78422. +        (void) perror(progname);
  78423. +        (void) exit(EXIT_FAILURE);
  78424. +    }
  78425. +    return ptr;
  78426. +}
  78427. +
  78428. +#define emalloc(size)        memcheck(imalloc(size))
  78429. +#define erealloc(ptr, size)    memcheck(irealloc(ptr, size))
  78430. +#define ecpyalloc(ptr)        memcheck(icpyalloc(ptr))
  78431. +#define ecatalloc(oldp, newp)    memcheck(icatalloc(oldp, newp))
  78432. +
  78433. +/*
  78434. +** Error handling.
  78435. +*/
  78436. +
  78437. +static void
  78438. +eats(name, num, rname, rnum)
  78439. +const char * const    name;
  78440. +const int        num;
  78441. +const char * const    rname;
  78442. +const int        rnum;
  78443. +{
  78444. +    filename = name;
  78445. +    linenum = num;
  78446. +    rfilename = rname;
  78447. +    rlinenum = rnum;
  78448. +}
  78449. +
  78450. +static void
  78451. +eat(name, num)
  78452. +const char * const    name;
  78453. +const int        num;
  78454. +{
  78455. +    eats(name, num, (char *) NULL, -1);
  78456. +}
  78457. +
  78458. +static void
  78459. +error(string)
  78460. +const char * const    string;
  78461. +{
  78462. +    /*
  78463. +    ** Match the format of "cc" to allow sh users to
  78464. +    **     zic ... 2>&1 | error -t "*" -v
  78465. +    ** on BSD systems.
  78466. +    */
  78467. +    (void) fprintf(stderr, "\"%s\", line %d: %s",
  78468. +        filename, linenum, string);
  78469. +    if (rfilename != NULL)
  78470. +        (void) fprintf(stderr, " (rule from \"%s\", line %d)",
  78471. +            rfilename, rlinenum);
  78472. +    (void) fprintf(stderr, "\n");
  78473. +    ++errors;
  78474. +}
  78475. +
  78476. +static void
  78477. +usage()
  78478. +{
  78479. +    (void) fprintf(stderr,
  78480. +"%s: usage is %s [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] [ -d directory ]\n\
  78481. +\t[ -L leapseconds ] [ filename ... ]\n",
  78482. +        progname, progname);
  78483. +    (void) exit(EXIT_FAILURE);
  78484. +}
  78485. +
  78486. +static const char *    psxrules = NULL;
  78487. +static const char *    lcltime = NULL;
  78488. +static const char *    directory = NULL;
  78489. +static const char *    leapsec = NULL;
  78490. +static int        sflag = FALSE;
  78491. +
  78492. +int
  78493. +main(argc, argv)
  78494. +int    argc;
  78495. +char *    argv[];
  78496. +{
  78497. +    register int    i, j;
  78498. +    register int    c;
  78499. +
  78500. +    (void) umask(umask(022) | 022);
  78501. +    progname = argv[0];
  78502. +    while ((c = getopt(argc, argv, "d:l:p:L:vs")) != EOF)
  78503. +        switch (c) {
  78504. +            default:
  78505. +                usage();
  78506. +            case 'd':
  78507. +                if (directory == NULL)
  78508. +                    directory = optarg;
  78509. +                else {
  78510. +                    (void) fprintf(stderr,
  78511. +"%s: More than one -d option specified\n",
  78512. +                        progname);
  78513. +                    (void) exit(EXIT_FAILURE);
  78514. +                }
  78515. +                break;
  78516. +            case 'l':
  78517. +                if (lcltime == NULL)
  78518. +                    lcltime = optarg;
  78519. +                else {
  78520. +                    (void) fprintf(stderr,
  78521. +"%s: More than one -l option specified\n",
  78522. +                        progname);
  78523. +                    (void) exit(EXIT_FAILURE);
  78524. +                }
  78525. +                break;
  78526. +            case 'p':
  78527. +                if (psxrules == NULL)
  78528. +                    psxrules = optarg;
  78529. +                else {
  78530. +                    (void) fprintf(stderr,
  78531. +"%s: More than one -p option specified\n",
  78532. +                        progname);
  78533. +                    (void) exit(EXIT_FAILURE);
  78534. +                }
  78535. +                break;
  78536. +            case 'L':
  78537. +                if (leapsec == NULL)
  78538. +                    leapsec = optarg;
  78539. +                else {
  78540. +                    (void) fprintf(stderr,
  78541. +"%s: More than one -L option specified\n",
  78542. +                        progname);
  78543. +                    (void) exit(EXIT_FAILURE);
  78544. +                }
  78545. +                break;
  78546. +            case 'v':
  78547. +                noise = TRUE;
  78548. +                break;
  78549. +            case 's':
  78550. +                sflag = TRUE;
  78551. +                break;
  78552. +        }
  78553. +    if (optind == argc - 1 && strcmp(argv[optind], "=") == 0)
  78554. +        usage();    /* usage message by request */
  78555. +    if (directory == NULL)
  78556. +        directory = TZDIR;
  78557. +
  78558. +    setboundaries();
  78559. +
  78560. +    if (optind < argc && leapsec != NULL) {
  78561. +        infile(leapsec);
  78562. +        adjleap();
  78563. +    }
  78564. +
  78565. +    zones = (struct zone *) emalloc(0);
  78566. +    rules = (struct rule *) emalloc(0);
  78567. +    links = (struct link *) emalloc(0);
  78568. +    for (i = optind; i < argc; ++i)
  78569. +        infile(argv[i]);
  78570. +    if (errors)
  78571. +        (void) exit(EXIT_FAILURE);
  78572. +    associate();
  78573. +    for (i = 0; i < nzones; i = j) {
  78574. +        /*
  78575. +        ** Find the next non-continuation zone entry.
  78576. +        */
  78577. +        for (j = i + 1; j < nzones && zones[j].z_name == NULL; ++j)
  78578. +            ;
  78579. +        outzone(&zones[i], j - i);
  78580. +    }
  78581. +    /*
  78582. +    ** Make links.
  78583. +    */
  78584. +    for (i = 0; i < nlinks; ++i)
  78585. +        dolink(links[i].l_from, links[i].l_to);
  78586. +    if (lcltime != NULL)
  78587. +        dolink(lcltime, TZDEFAULT);
  78588. +    if (psxrules != NULL)
  78589. +        dolink(psxrules, TZDEFRULES);
  78590. +    return (errors == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
  78591. +}
  78592. +
  78593. +static void
  78594. +dolink(fromfile, tofile)
  78595. +const char * const    fromfile;
  78596. +const char * const    tofile;
  78597. +{
  78598. +    register char *    fromname;
  78599. +    register char *    toname;
  78600. +
  78601. +    fromname = ecpyalloc(directory);
  78602. +    fromname = ecatalloc(fromname, "/");
  78603. +    fromname = ecatalloc(fromname, fromfile);
  78604. +    if (strchr(tofile, ':')) toname = ecpyalloc(tofile);
  78605. +    else
  78606. +      {
  78607. +        toname = ecpyalloc(directory);
  78608. +        toname = ecatalloc(toname, "/");
  78609. +        toname = ecatalloc(toname, tofile);
  78610. +      }
  78611. +    /*
  78612. +    ** We get to be careful here since
  78613. +    ** there's a fair chance of root running us.
  78614. +    */
  78615. +    if (!itsdir(toname))
  78616. +        (void) remove(toname);
  78617. +    if (link(fromname, toname) != 0) {
  78618. +        (void) fprintf(stderr, "%s: Can't link from %s to ",
  78619. +            progname, fromname);
  78620. +        (void) perror(toname);
  78621. +        (void) exit(EXIT_FAILURE);
  78622. +    }
  78623. +    ifree(fromname);
  78624. +    ifree(toname);
  78625. +}
  78626. +
  78627. +static void
  78628. +setboundaries()
  78629. +{
  78630. +    register time_t    bit;
  78631. +
  78632. +    for (bit = 1; bit > 0; bit <<= 1)
  78633. +        ;
  78634. +    if (bit == 0) {        /* time_t is an unsigned type */
  78635. +        tt_signed = FALSE;
  78636. +        min_time = 0;
  78637. +        max_time = ~(time_t) 0;
  78638. +        if (sflag)
  78639. +            max_time >>= 1;
  78640. +    } else {
  78641. +        tt_signed = TRUE;
  78642. +        min_time = bit;
  78643. +        max_time = bit;
  78644. +        ++max_time;
  78645. +        max_time = -max_time;
  78646. +        if (sflag)
  78647. +            min_time = 0;
  78648. +    }
  78649. +    min_year = TM_YEAR_BASE + gmtime(&min_time)->tm_year;
  78650. +    max_year = TM_YEAR_BASE + gmtime(&max_time)->tm_year;
  78651. +}
  78652. +
  78653. +static int
  78654. +itsdir(name)
  78655. +const char * const    name;
  78656. +{
  78657. +    struct stat    s;
  78658. +
  78659. +    return (stat(name, &s) == 0 && S_ISDIR(s.st_mode));
  78660. +}
  78661. +
  78662. +/*
  78663. +** Associate sets of rules with zones.
  78664. +*/
  78665. +
  78666. +/*
  78667. +** Sort by rule name.
  78668. +*/
  78669. +
  78670. +static int
  78671. +rcomp(cp1, cp2)
  78672. +const void *    cp1;
  78673. +const void *    cp2;
  78674. +{
  78675. +    return strcmp(((struct rule *) cp1)->r_name,
  78676. +        ((struct rule *) cp2)->r_name);
  78677. +}
  78678. +
  78679. +static void
  78680. +associate()
  78681. +{
  78682. +    register struct zone *    zp;
  78683. +    register struct rule *    rp;
  78684. +    register int        base, out;
  78685. +    register int        i;
  78686. +
  78687. +    if (nrules != 0)
  78688. +        (void) qsort((void *) rules, (size_t) nrules,
  78689. +             (size_t) sizeof *rules, rcomp);
  78690. +    for (i = 0; i < nzones; ++i) {
  78691. +        zp = &zones[i];
  78692. +        zp->z_rules = NULL;
  78693. +        zp->z_nrules = 0;
  78694. +    }
  78695. +    for (base = 0; base < nrules; base = out) {
  78696. +        rp = &rules[base];
  78697. +        for (out = base + 1; out < nrules; ++out)
  78698. +            if (strcmp(rp->r_name, rules[out].r_name) != 0)
  78699. +                break;
  78700. +        for (i = 0; i < nzones; ++i) {
  78701. +            zp = &zones[i];
  78702. +            if (strcmp(zp->z_rule, rp->r_name) != 0)
  78703. +                continue;
  78704. +            zp->z_rules = rp;
  78705. +            zp->z_nrules = out - base;
  78706. +        }
  78707. +    }
  78708. +    for (i = 0; i < nzones; ++i) {
  78709. +        zp = &zones[i];
  78710. +        if (zp->z_nrules == 0) {
  78711. +            /*
  78712. +            ** Maybe we have a local standard time offset.
  78713. +            */
  78714. +            eat(zp->z_filename, zp->z_linenum);
  78715. +            zp->z_stdoff =
  78716. +                gethms((char *)zp->z_rule, "unruly zone", TRUE);
  78717. +            /*
  78718. +            ** Note, though, that if there's no rule,
  78719. +            ** a '%s' in the format is a bad thing.
  78720. +            */
  78721. +            if (strchr(zp->z_format, '%') != 0)
  78722. +                error("%s in ruleless zone");
  78723. +        }
  78724. +    }
  78725. +    if (errors)
  78726. +        (void) exit(EXIT_FAILURE);
  78727. +}
  78728. +
  78729. +static void
  78730. +infile(name)
  78731. +const char *    name;
  78732. +{
  78733. +    register FILE *            fp;
  78734. +    register char **        fields;
  78735. +    register char *            cp;
  78736. +    register const struct lookup *    lp;
  78737. +    register int            nfields;
  78738. +    register int            wantcont;
  78739. +    register int            num;
  78740. +    char                buf[BUFSIZ];
  78741. +
  78742. +    if (strcmp(name, "-") == 0) {
  78743. +        name = "standard input";
  78744. +        fp = stdin;
  78745. +    } else if ((fp = fopen(name, "r")) == NULL) {
  78746. +        (void) fprintf(stderr, "%s: Can't open ", progname);
  78747. +        (void) perror(name);
  78748. +        (void) exit(EXIT_FAILURE);
  78749. +    }
  78750. +    wantcont = FALSE;
  78751. +    for (num = 1; ; ++num) {
  78752. +        eat(name, num);
  78753. +        if (fgets(buf, (int) sizeof buf, fp) != buf)
  78754. +            break;
  78755. +        cp = strchr(buf, '\n');
  78756. +        if (cp == NULL) {
  78757. +            error("line too long");
  78758. +            (void) exit(EXIT_FAILURE);
  78759. +        }
  78760. +        *cp = '\0';
  78761. +        fields = getfields(buf);
  78762. +        nfields = 0;
  78763. +        while (fields[nfields] != NULL) {
  78764. +            if (ciequal(fields[nfields], "-"))
  78765. +                fields[nfields] = "";
  78766. +            ++nfields;
  78767. +        }
  78768. +        if (nfields == 0) {
  78769. +            /* nothing to do */
  78770. +        } else if (wantcont) {
  78771. +            wantcont = inzcont(fields, nfields);
  78772. +        } else {
  78773. +            lp = byword(fields[0], line_codes);
  78774. +            if (lp == NULL)
  78775. +                error("input line of unknown type");
  78776. +            else switch ((int) (lp->l_value)) {
  78777. +                case LC_RULE:
  78778. +                    inrule(fields, nfields);
  78779. +                    wantcont = FALSE;
  78780. +                    break;
  78781. +                case LC_ZONE:
  78782. +                    wantcont = inzone(fields, nfields);
  78783. +                    break;
  78784. +                case LC_LINK:
  78785. +                    inlink(fields, nfields);
  78786. +                    wantcont = FALSE;
  78787. +                    break;
  78788. +                case LC_LEAP:
  78789. +                    if (name != leapsec)
  78790. +                        (void) fprintf(stderr,
  78791. +"%s: Leap line in non leap seconds file %s\n",
  78792. +                            progname, name);
  78793. +                    else    inleap(fields, nfields);
  78794. +                    wantcont = FALSE;
  78795. +                    break;
  78796. +                default:    /* "cannot happen" */
  78797. +                    (void) fprintf(stderr,
  78798. +"%s: panic: Invalid l_value %d\n",
  78799. +                        progname, lp->l_value);
  78800. +                    (void) exit(EXIT_FAILURE);
  78801. +            }
  78802. +        }
  78803. +        ifree((char *) fields);
  78804. +    }
  78805. +    if (ferror(fp)) {
  78806. +        (void) fprintf(stderr, "%s: Error reading ", progname);
  78807. +        (void) perror(filename);
  78808. +        (void) exit(EXIT_FAILURE);
  78809. +    }
  78810. +    if (fp != stdin && fclose(fp)) {
  78811. +        (void) fprintf(stderr, "%s: Error closing ", progname);
  78812. +        (void) perror(filename);
  78813. +        (void) exit(EXIT_FAILURE);
  78814. +    }
  78815. +    if (wantcont)
  78816. +        error("expected continuation line not found");
  78817. +}
  78818. +
  78819. +/*
  78820. +** Convert a string of one of the forms
  78821. +**    h    -h     hh:mm    -hh:mm    hh:mm:ss    -hh:mm:ss
  78822. +** into a number of seconds.
  78823. +** A null string maps to zero.
  78824. +** Call error with errstring and return zero on errors.
  78825. +*/
  78826. +
  78827. +static long
  78828. +gethms(string, errstring, signable)
  78829. +char *        string;
  78830. +const char * const    errstring;
  78831. +const int        signable;
  78832. +{
  78833. +    int    hh, mm, ss, sign;
  78834. +
  78835. +    if (string == NULL || *string == '\0')
  78836. +        return 0;
  78837. +    if (!signable)
  78838. +        sign = 1;
  78839. +    else if (*string == '-') {
  78840. +        sign = -1;
  78841. +        ++string;
  78842. +    } else    sign = 1;
  78843. +    if (sscanf(string, "%d:%d:%d", &hh, &mm, &ss) == 3) ;
  78844. +    else if (sscanf(string, "%d:%d", &hh, &mm) == 2) ss = 0;
  78845. +    else if (sscanf(string, "%d", &hh) == 1) mm = ss = 0;
  78846. +    else
  78847. +    {
  78848. +        error(errstring);
  78849. +        return 0;
  78850. +    }
  78851. +    if (hh < 0 || hh >= HOURSPERDAY ||
  78852. +        mm < 0 || mm >= MINSPERHOUR ||
  78853. +        ss < 0 || ss > SECSPERMIN) {
  78854. +            error(errstring);
  78855. +            return 0;
  78856. +    }
  78857. +    return eitol(sign) *
  78858. +        (eitol(hh * MINSPERHOUR + mm) *
  78859. +        eitol(SECSPERMIN) + eitol(ss));
  78860. +}
  78861. +
  78862. +static void
  78863. +inrule(fields, nfields)
  78864. +register char ** const    fields;
  78865. +const int        nfields;
  78866. +{
  78867. +    static struct rule    r;
  78868. +
  78869. +    if (nfields != RULE_FIELDS) {
  78870. +        error("wrong number of fields on Rule line");
  78871. +        return;
  78872. +    }
  78873. +    if (*fields[RF_NAME] == '\0') {
  78874. +        error("nameless rule");
  78875. +        return;
  78876. +    }
  78877. +    r.r_filename = filename;
  78878. +    r.r_linenum = linenum;
  78879. +    r.r_stdoff = gethms(fields[RF_STDOFF], "invalid saved time", TRUE);
  78880. +    rulesub(&r, fields[RF_LOYEAR], fields[RF_HIYEAR], fields[RF_COMMAND],
  78881. +        fields[RF_MONTH], fields[RF_DAY], fields[RF_TOD]);
  78882. +    r.r_name = ecpyalloc(fields[RF_NAME]);
  78883. +    r.r_abbrvar = ecpyalloc(fields[RF_ABBRVAR]);
  78884. +    rules = (struct rule *) erealloc((char *) rules,
  78885. +        (int) ((nrules + 1) * sizeof *rules));
  78886. +    rules[nrules++] = r;
  78887. +}
  78888. +
  78889. +static int
  78890. +inzone(fields, nfields)
  78891. +register char ** const    fields;
  78892. +const int        nfields;
  78893. +{
  78894. +    register int    i;
  78895. +    char        buf[132];
  78896. +
  78897. +    if (nfields < ZONE_MINFIELDS || nfields > ZONE_MAXFIELDS) {
  78898. +        error("wrong number of fields on Zone line");
  78899. +        return FALSE;
  78900. +    }
  78901. +    if (strcmp(fields[ZF_NAME], TZDEFAULT) == 0 && lcltime != NULL) {
  78902. +        (void) sprintf(buf,
  78903. +            "\"Zone %s\" line and -l option are mutually exclusive",
  78904. +            TZDEFAULT);
  78905. +        error(buf);
  78906. +        return FALSE;
  78907. +    }
  78908. +    if (strcmp(fields[ZF_NAME], TZDEFRULES) == 0 && psxrules != NULL) {
  78909. +        (void) sprintf(buf,
  78910. +            "\"Zone %s\" line and -p option are mutually exclusive",
  78911. +            TZDEFRULES);
  78912. +        error(buf);
  78913. +        return FALSE;
  78914. +    }
  78915. +    for (i = 0; i < nzones; ++i)
  78916. +        if (zones[i].z_name != NULL &&
  78917. +            strcmp(zones[i].z_name, fields[ZF_NAME]) == 0) {
  78918. +                (void) sprintf(buf,
  78919. +"duplicate zone name %s (file \"%s\", line %d)",
  78920. +                    fields[ZF_NAME],
  78921. +                    zones[i].z_filename,
  78922. +                    zones[i].z_linenum);
  78923. +                error(buf);
  78924. +                return FALSE;
  78925. +        }
  78926. +    return inzsub(fields, nfields, FALSE);
  78927. +}
  78928. +
  78929. +static int
  78930. +inzcont(fields, nfields)
  78931. +register char ** const    fields;
  78932. +const int        nfields;
  78933. +{
  78934. +    if (nfields < ZONEC_MINFIELDS || nfields > ZONEC_MAXFIELDS) {
  78935. +        error("wrong number of fields on Zone continuation line");
  78936. +        return FALSE;
  78937. +    }
  78938. +    return inzsub(fields, nfields, TRUE);
  78939. +}
  78940. +
  78941. +static int
  78942. +inzsub(fields, nfields, iscont)
  78943. +register char ** const    fields;
  78944. +const int        nfields;
  78945. +const int        iscont;
  78946. +{
  78947. +    register char *        cp;
  78948. +    static struct zone    z;
  78949. +    register int        i_gmtoff, i_rule, i_format;
  78950. +    register int        i_untilyear, i_untilmonth;
  78951. +    register int        i_untilday, i_untiltime;
  78952. +    register int        hasuntil;
  78953. +
  78954. +    if (iscont) {
  78955. +        i_gmtoff = ZFC_GMTOFF;
  78956. +        i_rule = ZFC_RULE;
  78957. +        i_format = ZFC_FORMAT;
  78958. +        i_untilyear = ZFC_TILYEAR;
  78959. +        i_untilmonth = ZFC_TILMONTH;
  78960. +        i_untilday = ZFC_TILDAY;
  78961. +        i_untiltime = ZFC_TILTIME;
  78962. +        z.z_name = NULL;
  78963. +    } else {
  78964. +        i_gmtoff = ZF_GMTOFF;
  78965. +        i_rule = ZF_RULE;
  78966. +        i_format = ZF_FORMAT;
  78967. +        i_untilyear = ZF_TILYEAR;
  78968. +        i_untilmonth = ZF_TILMONTH;
  78969. +        i_untilday = ZF_TILDAY;
  78970. +        i_untiltime = ZF_TILTIME;
  78971. +        z.z_name = ecpyalloc(fields[ZF_NAME]);
  78972. +    }
  78973. +    z.z_filename = filename;
  78974. +    z.z_linenum = linenum;
  78975. +    z.z_gmtoff = gethms(fields[i_gmtoff], "invalid GMT offset", TRUE);
  78976. +    if ((cp = strchr(fields[i_format], '%')) != 0) {
  78977. +        if (*++cp != 's' || strchr(cp, '%') != 0) {
  78978. +            error("invalid abbreviation format");
  78979. +            return FALSE;
  78980. +        }
  78981. +    }
  78982. +    z.z_rule = ecpyalloc(fields[i_rule]);
  78983. +    z.z_format = ecpyalloc(fields[i_format]);
  78984. +    hasuntil = nfields > i_untilyear;
  78985. +    if (hasuntil) {
  78986. +        z.z_untilrule.r_filename = filename;
  78987. +        z.z_untilrule.r_linenum = linenum;
  78988. +        rulesub(&z.z_untilrule,
  78989. +            fields[i_untilyear],
  78990. +            "only",
  78991. +            "",
  78992. +            (nfields > i_untilmonth) ? fields[i_untilmonth] : "Jan",
  78993. +            (nfields > i_untilday) ? fields[i_untilday] : "1",
  78994. +            (nfields > i_untiltime) ? fields[i_untiltime] : "0");
  78995. +        z.z_untiltime = rpytime(&z.z_untilrule, z.z_untilrule.r_loyear);
  78996. +        if (iscont && nzones > 0 && z.z_untiltime < max_time &&
  78997. +            z.z_untiltime > min_time &&
  78998. +            zones[nzones - 1].z_untiltime >= z.z_untiltime) {
  78999. +error("Zone continuation line end time is not after end time of previous line");
  79000. +            return FALSE;
  79001. +        }
  79002. +    }
  79003. +    zones = (struct zone *) erealloc((char *) zones,
  79004. +        (int) ((nzones + 1) * sizeof *zones));
  79005. +    zones[nzones++] = z;
  79006. +    /*
  79007. +    ** If there was an UNTIL field on this line,
  79008. +    ** there's more information about the zone on the next line.
  79009. +    */
  79010. +    return hasuntil;
  79011. +}
  79012. +
  79013. +static void
  79014. +inleap(fields, nfields)
  79015. +register char ** const    fields;
  79016. +const int        nfields;
  79017. +{
  79018. +    register const char *        cp;
  79019. +    register const struct lookup *    lp;
  79020. +    register int            i, j;
  79021. +    int                year, month, day;
  79022. +    long                dayoff, tod;
  79023. +    time_t                t;
  79024. +
  79025. +    if (nfields != LEAP_FIELDS) {
  79026. +        error("wrong number of fields on Leap line");
  79027. +        return;
  79028. +    }
  79029. +    dayoff = 0;
  79030. +    cp = fields[LP_YEAR];
  79031. +    if (sscanf((char *)cp, "%d", &year) != 1 ||
  79032. +        year < min_year || year > max_year) {
  79033. +            /*
  79034. +             * Leapin' Lizards!
  79035. +             */
  79036. +            error("invalid leaping year");
  79037. +            return;
  79038. +    }
  79039. +    j = EPOCH_YEAR;
  79040. +    while (j != year) {
  79041. +        if (year > j) {
  79042. +            i = len_years[isleap(j)];
  79043. +            ++j;
  79044. +        } else {
  79045. +            --j;
  79046. +            i = -len_years[isleap(j)];
  79047. +        }
  79048. +        dayoff = oadd(dayoff, eitol(i));
  79049. +    }
  79050. +    if ((lp = byword(fields[LP_MONTH], mon_names)) == NULL) {
  79051. +        error("invalid month name");
  79052. +        return;
  79053. +    }
  79054. +    month = lp->l_value;
  79055. +    j = TM_JANUARY;
  79056. +    while (j != month) {
  79057. +        i = len_months[isleap(year)][j];
  79058. +        dayoff = oadd(dayoff, eitol(i));
  79059. +        ++j;
  79060. +    }
  79061. +    cp = fields[LP_DAY];
  79062. +    if (sscanf((char *)cp, "%d", &day) != 1 ||
  79063. +        day <= 0 || day > len_months[isleap(year)][month]) {
  79064. +            error("invalid day of month");
  79065. +            return;
  79066. +    }
  79067. +    dayoff = oadd(dayoff, eitol(day - 1));
  79068. +    if (dayoff < 0 && !tt_signed) {
  79069. +        error("time before zero");
  79070. +        return;
  79071. +    }
  79072. +    t = (time_t) dayoff * SECSPERDAY;
  79073. +    /*
  79074. +    ** Cheap overflow check.
  79075. +    */
  79076. +    if (t / SECSPERDAY != dayoff) {
  79077. +        error("time overflow");
  79078. +        return;
  79079. +    }
  79080. +    tod = gethms(fields[LP_TIME], "invalid time of day", FALSE);
  79081. +    cp = fields[LP_CORR];
  79082. +    if (strcmp(cp, "+") != 0 && strcmp(cp, "") != 0) {
  79083. +        /* infile() turned "-" into "" */
  79084. +        error("illegal CORRECTION field on Leap line");
  79085. +        return;
  79086. +    }
  79087. +    if ((lp = byword(fields[LP_ROLL], leap_types)) == NULL) {
  79088. +        error("illegal Rolling/Stationary field on Leap line");
  79089. +        return;
  79090. +    }
  79091. +    addleap(tadd(t, tod), *cp == '+', lp->l_value);
  79092. +}
  79093. +
  79094. +static void
  79095. +inlink(fields, nfields)
  79096. +register char ** const    fields;
  79097. +const int        nfields;
  79098. +{
  79099. +    struct link    l;
  79100. +
  79101. +    if (nfields != LINK_FIELDS) {
  79102. +        error("wrong number of fields on Link line");
  79103. +        return;
  79104. +    }
  79105. +    if (*fields[LF_FROM] == '\0') {
  79106. +        error("blank FROM field on Link line");
  79107. +        return;
  79108. +    }
  79109. +    if (*fields[LF_TO] == '\0') {
  79110. +        error("blank TO field on Link line");
  79111. +        return;
  79112. +    }
  79113. +    l.l_filename = filename;
  79114. +    l.l_linenum = linenum;
  79115. +    l.l_from = ecpyalloc(fields[LF_FROM]);
  79116. +    l.l_to = ecpyalloc(fields[LF_TO]);
  79117. +    links = (struct link *) erealloc((char *) links,
  79118. +        (int) ((nlinks + 1) * sizeof *links));
  79119. +    links[nlinks++] = l;
  79120. +}
  79121. +
  79122. +static void
  79123. +rulesub(rp, loyearp, hiyearp, typep, monthp, dayp, timep)
  79124. +register struct rule * const    rp;
  79125. +char * const            loyearp;
  79126. +char * const            hiyearp;
  79127. +char * const            typep;
  79128. +char * const            monthp;
  79129. +char * const            dayp;
  79130. +char * const            timep;
  79131. +{
  79132. +    register struct lookup const *    lp;
  79133. +    register char *            cp;
  79134. +
  79135. +    if ((lp = byword(monthp, mon_names)) == NULL) {
  79136. +        error("invalid month name");
  79137. +        return;
  79138. +    }
  79139. +    rp->r_month = lp->l_value;
  79140. +    rp->r_todisstd = FALSE;
  79141. +    cp = timep;
  79142. +    if (*cp != '\0') {
  79143. +        cp += strlen(cp) - 1;
  79144. +        switch (lowerit(*cp)) {
  79145. +            case 's':
  79146. +                rp->r_todisstd = TRUE;
  79147. +                *cp = '\0';
  79148. +                break;
  79149. +            case 'w':
  79150. +                rp->r_todisstd = FALSE;
  79151. +                *cp = '\0';
  79152. +                break;
  79153. +        }
  79154. +    }
  79155. +    rp->r_tod = gethms(timep, "invalid time of day", FALSE);
  79156. +    /*
  79157. +    ** Year work.
  79158. +    */
  79159. +    cp = loyearp;
  79160. +    if ((lp = byword(cp, begin_years)) != NULL) switch ((int) lp->l_value) {
  79161. +        case YR_MINIMUM:
  79162. +            rp->r_loyear = min_year;
  79163. +            break;
  79164. +        case YR_MAXIMUM:
  79165. +            rp->r_loyear = max_year;
  79166. +            break;
  79167. +        default:    /* "cannot happen" */
  79168. +            (void) fprintf(stderr,
  79169. +                "%s: panic: Invalid l_value %d\n",
  79170. +                progname, lp->l_value);
  79171. +            (void) exit(EXIT_FAILURE);
  79172. +    } else if (sscanf(cp, "%d", &rp->r_loyear) != 1 ||
  79173. +        rp->r_loyear < min_year || rp->r_loyear > max_year) {
  79174. +            if (noise)
  79175. +                error("invalid starting year");
  79176. +            if (rp->r_loyear > max_year)
  79177. +                return;
  79178. +    }
  79179. +    cp = hiyearp;
  79180. +    if ((lp = byword(cp, end_years)) != NULL) switch ((int) lp->l_value) {
  79181. +        case YR_MINIMUM:
  79182. +            rp->r_hiyear = min_year;
  79183. +            break;
  79184. +        case YR_MAXIMUM:
  79185. +            rp->r_hiyear = max_year;
  79186. +            break;
  79187. +        case YR_ONLY:
  79188. +            rp->r_hiyear = rp->r_loyear;
  79189. +            break;
  79190. +        default:    /* "cannot happen" */
  79191. +            (void) fprintf(stderr,
  79192. +                "%s: panic: Invalid l_value %d\n",
  79193. +                progname, lp->l_value);
  79194. +            (void) exit(EXIT_FAILURE);
  79195. +    } else if (sscanf(cp, "%d", &rp->r_hiyear) != 1 ||
  79196. +        rp->r_hiyear < min_year || rp->r_hiyear > max_year) {
  79197. +            if (noise)
  79198. +                error("invalid ending year");
  79199. +            if (rp->r_hiyear < min_year)
  79200. +                return;
  79201. +    }
  79202. +    if (rp->r_hiyear < min_year)
  79203. +         return;
  79204. +     if (rp->r_loyear < min_year)
  79205. +         rp->r_loyear = min_year;
  79206. +     if (rp->r_hiyear > max_year)
  79207. +         rp->r_hiyear = max_year;
  79208. +    if (rp->r_loyear > rp->r_hiyear) {
  79209. +        error("starting year greater than ending year");
  79210. +        return;
  79211. +    }
  79212. +    if (*typep == '\0')
  79213. +        rp->r_yrtype = NULL;
  79214. +    else {
  79215. +        if (rp->r_loyear == rp->r_hiyear) {
  79216. +            error("typed single year");
  79217. +            return;
  79218. +        }
  79219. +        rp->r_yrtype = ecpyalloc(typep);
  79220. +    }
  79221. +    /*
  79222. +    ** Day work.
  79223. +    ** Accept things such as:
  79224. +    **    1
  79225. +    **    last-Sunday
  79226. +    **    Sun<=20
  79227. +    **    Sun>=7
  79228. +    */
  79229. +    if ((lp = byword(dayp, lasts)) != NULL) {
  79230. +        rp->r_dycode = DC_DOWLEQ;
  79231. +        rp->r_wday = lp->l_value;
  79232. +        rp->r_dayofmonth = len_months[1][rp->r_month];
  79233. +    } else {
  79234. +        if ((cp = strchr(dayp, '<')) != 0)
  79235. +            rp->r_dycode = DC_DOWLEQ;
  79236. +        else if ((cp = strchr(dayp, '>')) != 0)
  79237. +            rp->r_dycode = DC_DOWGEQ;
  79238. +        else {
  79239. +            cp = dayp;
  79240. +            rp->r_dycode = DC_DOM;
  79241. +        }
  79242. +        if (rp->r_dycode != DC_DOM) {
  79243. +            *cp++ = 0;
  79244. +            if (*cp++ != '=') {
  79245. +                error("invalid day of month");
  79246. +                return;
  79247. +            }
  79248. +            if ((lp = byword(dayp, wday_names)) == NULL) {
  79249. +                error("invalid weekday name");
  79250. +                return;
  79251. +            }
  79252. +            rp->r_wday = lp->l_value;
  79253. +        }
  79254. +        if (sscanf(cp, "%d", &rp->r_dayofmonth) != 1 ||
  79255. +            rp->r_dayofmonth <= 0 ||
  79256. +            (rp->r_dayofmonth > len_months[1][rp->r_month])) {
  79257. +                error("invalid day of month");
  79258. +                return;
  79259. +        }
  79260. +    }
  79261. +}
  79262. +
  79263. +static void
  79264. +convert(val, buf)
  79265. +const long    val;
  79266. +char * const    buf;
  79267. +{
  79268. +    register int    i;
  79269. +    register long    shift;
  79270. +
  79271. +    for (i = 0, shift = 24; i < 4; ++i, shift -= 8)
  79272. +        buf[i] = val >> shift;
  79273. +}
  79274. +
  79275. +static void
  79276. +puttzcode(val, fp)
  79277. +const long    val;
  79278. +FILE * const    fp;
  79279. +{
  79280. +    char    buf[4];
  79281. +
  79282. +    convert(val, buf);
  79283. +    (void) fwrite((void *) buf, (size_t) sizeof buf, (size_t) 1, fp);
  79284. +}
  79285. +
  79286. +static void
  79287. +writezone(name)
  79288. +const char * const    name;
  79289. +{
  79290. +    register FILE *        fp;
  79291. +    register int        i, j;
  79292. +    char            fullname[BUFSIZ];
  79293. +    static struct tzhead    tzh;
  79294. +
  79295. +    if (strlen(directory) + 1 + strlen(name) >= sizeof fullname) {
  79296. +        (void) fprintf(stderr,
  79297. +            "%s: File name %s/%s too long\n", progname,
  79298. +            directory, name);
  79299. +        (void) exit(EXIT_FAILURE);
  79300. +    }
  79301. +    (void) sprintf(fullname, "%s/%s", directory, name);
  79302. +    if ((fp = fopen(fullname, "wb")) == NULL) {
  79303. +        if (mkdirs(fullname) != 0)
  79304. +            (void) exit(EXIT_FAILURE);
  79305. +        if ((fp = fopen(fullname, "wb")) == NULL) {
  79306. +            (void) fprintf(stderr, "%s: Can't create ", progname);
  79307. +            (void) perror(fullname);
  79308. +            (void) exit(EXIT_FAILURE);
  79309. +        }
  79310. +    }
  79311. +    convert(eitol(typecnt), tzh.tzh_ttisstdcnt);
  79312. +    convert(eitol(leapcnt), tzh.tzh_leapcnt);
  79313. +    convert(eitol(timecnt), tzh.tzh_timecnt);
  79314. +    convert(eitol(typecnt), tzh.tzh_typecnt);
  79315. +    convert(eitol(charcnt), tzh.tzh_charcnt);
  79316. +    (void) fwrite((void *) &tzh, (size_t) sizeof tzh, (size_t) 1, fp);
  79317. +    for (i = 0; i < timecnt; ++i) {
  79318. +        j = leapcnt;
  79319. +        while (--j >= 0)
  79320. +            if (ats[i] >= trans[j]) {
  79321. +                ats[i] = tadd(ats[i], corr[j]);
  79322. +                break;
  79323. +            }
  79324. +        puttzcode((long) ats[i], fp);
  79325. +    }
  79326. +    if (timecnt > 0)
  79327. +        (void) fwrite((void *) types, (size_t) sizeof types[0],
  79328. +            (size_t) timecnt, fp);
  79329. +    for (i = 0; i < typecnt; ++i) {
  79330. +        puttzcode((long) gmtoffs[i], fp);
  79331. +        (void) putc(isdsts[i], fp);
  79332. +        (void) putc(abbrinds[i], fp);
  79333. +    }
  79334. +    if (charcnt != 0)
  79335. +        (void) fwrite((void *) chars, (size_t) sizeof chars[0],
  79336. +            (size_t) charcnt, fp);
  79337. +    for (i = 0; i < leapcnt; ++i) {
  79338. +        if (roll[i]) {
  79339. +            if (timecnt == 0 || trans[i] < ats[0]) {
  79340. +                j = 0;
  79341. +                while (isdsts[j])
  79342. +                    if (++j >= typecnt) {
  79343. +                        j = 0;
  79344. +                        break;
  79345. +                    }
  79346. +            } else {
  79347. +                j = 1;
  79348. +                while (j < timecnt && trans[i] >= ats[j])
  79349. +                    ++j;
  79350. +                j = types[j - 1];
  79351. +            }
  79352. +            puttzcode((long) tadd(trans[i], -gmtoffs[j]), fp);
  79353. +        } else    puttzcode((long) trans[i], fp);
  79354. +        puttzcode((long) corr[i], fp);
  79355. +    }
  79356. +    for (i = 0; i < typecnt; ++i)
  79357. +        (void) putc(ttisstds[i], fp);
  79358. +    if (ferror(fp) || fclose(fp)) {
  79359. +        (void) fprintf(stderr, "%s: Write error on ", progname);
  79360. +        (void) perror(fullname);
  79361. +        (void) exit(EXIT_FAILURE);
  79362. +    }
  79363. +}
  79364. +
  79365. +static void
  79366. +outzone(zpfirst, zonecount)
  79367. +const struct zone * const    zpfirst;
  79368. +const int            zonecount;
  79369. +{
  79370. +    register const struct zone *    zp;
  79371. +    register struct rule *        rp;
  79372. +    register int            i, j;
  79373. +    register int            usestart, useuntil;
  79374. +    register time_t            starttime, untiltime;
  79375. +    register long            gmtoff;
  79376. +    register long            stdoff;
  79377. +    register int            year;
  79378. +    register long            startoff;
  79379. +    register int            startisdst;
  79380. +    register int            startttisstd;
  79381. +    register int            type;
  79382. +    char                startbuf[BUFSIZ];
  79383. +
  79384. +    /*
  79385. +    ** Now. . .finally. . .generate some useful data!
  79386. +    */
  79387. +    timecnt = 0;
  79388. +    typecnt = 0;
  79389. +    charcnt = 0;
  79390. +    /*
  79391. +    ** Two guesses. . .the second may well be corrected later.
  79392. +    */
  79393. +    gmtoff = zpfirst->z_gmtoff;
  79394. +    stdoff = 0;
  79395. +#ifdef lint
  79396. +    starttime = 0;
  79397. +    startttisstd = FALSE;
  79398. +#endif /* defined lint */
  79399. +    for (i = 0; i < zonecount; ++i) {
  79400. +        usestart = i > 0;
  79401. +        useuntil = i < (zonecount - 1);
  79402. +        zp = &zpfirst[i];
  79403. +        eat(zp->z_filename, zp->z_linenum);
  79404. +        startisdst = -1;
  79405. +        if (zp->z_nrules == 0) {
  79406. +            type = addtype(oadd(zp->z_gmtoff, zp->z_stdoff),
  79407. +                zp->z_format, zp->z_stdoff != 0,
  79408. +                startttisstd);
  79409. +            if (usestart)
  79410. +                addtt(starttime, type);
  79411. +            gmtoff = zp->z_gmtoff;
  79412. +            stdoff = zp->z_stdoff;
  79413. +        } else for (year = min_year; year <= max_year; ++year) {
  79414. +            if (useuntil && year > zp->z_untilrule.r_hiyear)
  79415. +                break;
  79416. +            /*
  79417. +            ** Mark which rules to do in the current year.
  79418. +            ** For those to do, calculate rpytime(rp, year);
  79419. +            */
  79420. +            for (j = 0; j < zp->z_nrules; ++j) {
  79421. +                rp = &zp->z_rules[j];
  79422. +                eats(zp->z_filename, zp->z_linenum,
  79423. +                    rp->r_filename, rp->r_linenum);
  79424. +                rp->r_todo = year >= rp->r_loyear &&
  79425. +                        year <= rp->r_hiyear &&
  79426. +                        yearistype(year, rp->r_yrtype);
  79427. +                if (rp->r_todo)
  79428. +                    rp->r_temp = rpytime(rp, year);
  79429. +            }
  79430. +            for ( ; ; ) {
  79431. +                register int    k;
  79432. +                register time_t    jtime, ktime;
  79433. +                register long    offset;
  79434. +                char        buf[BUFSIZ];
  79435. +
  79436. +                if (useuntil) {
  79437. +                    /*
  79438. +                    ** Turn untiltime into GMT
  79439. +                    ** assuming the current gmtoff and
  79440. +                    ** stdoff values.
  79441. +                    */
  79442. +                    offset = gmtoff;
  79443. +                    if (!zp->z_untilrule.r_todisstd)
  79444. +                        offset = oadd(offset, stdoff);
  79445. +                    untiltime = tadd(zp->z_untiltime,
  79446. +                        -offset);
  79447. +                }
  79448. +                /*
  79449. +                ** Find the rule (of those to do, if any)
  79450. +                ** that takes effect earliest in the year.
  79451. +                */
  79452. +                k = -1;
  79453. +#ifdef lint
  79454. +                ktime = 0;
  79455. +#endif /* defined lint */
  79456. +                for (j = 0; j < zp->z_nrules; ++j) {
  79457. +                    rp = &zp->z_rules[j];
  79458. +                    if (!rp->r_todo)
  79459. +                        continue;
  79460. +                    eats(zp->z_filename, zp->z_linenum,
  79461. +                        rp->r_filename, rp->r_linenum);
  79462. +                    offset = gmtoff;
  79463. +                    if (!rp->r_todisstd)
  79464. +                        offset = oadd(offset, stdoff);
  79465. +                    jtime = rp->r_temp;
  79466. +                    if (jtime == min_time ||
  79467. +                        jtime == max_time)
  79468. +                            continue;
  79469. +                    jtime = tadd(jtime, -offset);
  79470. +                    if (k < 0 || jtime < ktime) {
  79471. +                        k = j;
  79472. +                        ktime = jtime;
  79473. +                    }
  79474. +                }
  79475. +                if (k < 0)
  79476. +                    break;    /* go on to next year */
  79477. +                rp = &zp->z_rules[k];
  79478. +                rp->r_todo = FALSE;
  79479. +                if (useuntil && ktime >= untiltime)
  79480. +                    break;
  79481. +                if (usestart) {
  79482. +                    if (ktime < starttime) {
  79483. +                        stdoff = rp->r_stdoff;
  79484. +                        startoff = oadd(zp->z_gmtoff,
  79485. +                            rp->r_stdoff);
  79486. +                        (void) sprintf(startbuf,
  79487. +                            zp->z_format,
  79488. +                            rp->r_abbrvar);
  79489. +                        startisdst =
  79490. +                            rp->r_stdoff != 0;
  79491. +                        continue;
  79492. +                    }
  79493. +                    if (ktime != starttime &&
  79494. +                        startisdst >= 0)
  79495. +addtt(starttime, addtype(startoff, startbuf, startisdst, startttisstd));
  79496. +                    usestart = FALSE;
  79497. +                }
  79498. +                eats(zp->z_filename, zp->z_linenum,
  79499. +                    rp->r_filename, rp->r_linenum);
  79500. +                (void) sprintf(buf, zp->z_format,
  79501. +                    rp->r_abbrvar);
  79502. +                offset = oadd(zp->z_gmtoff, rp->r_stdoff);
  79503. +                type = addtype(offset, buf, rp->r_stdoff != 0,
  79504. +                    rp->r_todisstd);
  79505. +                if (timecnt != 0 || rp->r_stdoff != 0)
  79506. +                    addtt(ktime, type);
  79507. +                gmtoff = zp->z_gmtoff;
  79508. +                stdoff = rp->r_stdoff;
  79509. +            }
  79510. +        }
  79511. +        /*
  79512. +        ** Now we may get to set starttime for the next zone line.
  79513. +        */
  79514. +        if (useuntil) {
  79515. +            starttime = tadd(zp->z_untiltime,
  79516. +                -gmtoffs[types[timecnt - 1]]);
  79517. +            startttisstd = zp->z_untilrule.r_todisstd;
  79518. +        }
  79519. +    }
  79520. +    writezone(zpfirst->z_name);
  79521. +}
  79522. +
  79523. +static void
  79524. +addtt(starttime, type)
  79525. +const time_t    starttime;
  79526. +const int    type;
  79527. +{
  79528. +    if (timecnt != 0 && type == types[timecnt - 1])
  79529. +        return;    /* easy enough! */
  79530. +    if (timecnt >= TZ_MAX_TIMES) {
  79531. +        error("too many transitions?!");
  79532. +        (void) exit(EXIT_FAILURE);
  79533. +    }
  79534. +    ats[timecnt] = starttime;
  79535. +    types[timecnt] = type;
  79536. +    ++timecnt;
  79537. +}
  79538. +
  79539. +static int
  79540. +addtype(gmtoff, abbr, isdst, ttisstd)
  79541. +const long        gmtoff;
  79542. +const char * const    abbr;
  79543. +const int        isdst;
  79544. +const int        ttisstd;
  79545. +{
  79546. +    register int    i, j;
  79547. +
  79548. +    /*
  79549. +    ** See if there's already an entry for this zone type.
  79550. +    ** If so, just return its index.
  79551. +    */
  79552. +    for (i = 0; i < typecnt; ++i) {
  79553. +        if (gmtoff == gmtoffs[i] && isdst == isdsts[i] &&
  79554. +            strcmp(abbr, &chars[abbrinds[i]]) == 0 &&
  79555. +            ttisstd == ttisstds[i])
  79556. +                return i;
  79557. +    }
  79558. +    /*
  79559. +    ** There isn't one; add a new one, unless there are already too
  79560. +    ** many.
  79561. +    */
  79562. +    if (typecnt >= TZ_MAX_TYPES) {
  79563. +        error("too many local time types");
  79564. +        (void) exit(EXIT_FAILURE);
  79565. +    }
  79566. +    gmtoffs[i] = gmtoff;
  79567. +    isdsts[i] = isdst;
  79568. +    ttisstds[i] = ttisstd;
  79569. +
  79570. +    for (j = 0; j < charcnt; ++j)
  79571. +        if (strcmp(&chars[j], abbr) == 0)
  79572. +            break;
  79573. +    if (j == charcnt)
  79574. +        newabbr(abbr);
  79575. +    abbrinds[i] = j;
  79576. +    ++typecnt;
  79577. +    return i;
  79578. +}
  79579. +
  79580. +static void
  79581. +addleap(t, positive, rolling)
  79582. +const time_t    t;
  79583. +const int    positive;
  79584. +const int    rolling;
  79585. +{
  79586. +    register int    i, j;
  79587. +
  79588. +    if (leapcnt >= TZ_MAX_LEAPS) {
  79589. +        error("too many leap seconds");
  79590. +        (void) exit(EXIT_FAILURE);
  79591. +    }
  79592. +    for (i = 0; i < leapcnt; ++i)
  79593. +        if (t <= trans[i]) {
  79594. +            if (t == trans[i]) {
  79595. +                error("repeated leap second moment");
  79596. +                (void) exit(EXIT_FAILURE);
  79597. +            }
  79598. +            break;
  79599. +        }
  79600. +    for (j = leapcnt; j > i; --j) {
  79601. +        trans[j] = trans[j-1];
  79602. +        corr[j] = corr[j-1];
  79603. +        roll[j] = roll[j-1];
  79604. +    }
  79605. +    trans[i] = t;
  79606. +    corr[i] = (positive ? 1L : -1L);
  79607. +    roll[i] = rolling;
  79608. +    ++leapcnt;
  79609. +}
  79610. +
  79611. +static void
  79612. +adjleap()
  79613. +{
  79614. +    register int    i;
  79615. +    register long    last = 0;
  79616. +
  79617. +    /*
  79618. +    ** propagate leap seconds forward
  79619. +    */
  79620. +    for (i = 0; i < leapcnt; ++i) {
  79621. +        trans[i] = tadd(trans[i], last);
  79622. +        last = corr[i] += last;
  79623. +    }
  79624. +}
  79625. +
  79626. +static int
  79627. +yearistype(year, type)
  79628. +const int        year;
  79629. +const char * const    type;
  79630. +{
  79631. +    char    buf[BUFSIZ];
  79632. +    int    result;
  79633. +
  79634. +    if (type == NULL || *type == '\0')
  79635. +        return TRUE;
  79636. +    if (strcmp(type, "uspres") == 0)
  79637. +        return (year % 4) == 0;
  79638. +    if (strcmp(type, "nonpres") == 0)
  79639. +        return (year % 4) != 0;
  79640. +    (void) sprintf(buf, "yearistype %d %s", year, type);
  79641. +    result = system(buf);
  79642. +    if (result == 0)
  79643. +        return TRUE;
  79644. +    if (result == (1 << 8))
  79645. +        return FALSE;
  79646. +    error("Wild result from command execution");
  79647. +    (void) fprintf(stderr, "%s: command was '%s', result was %d\n",
  79648. +        progname, buf, result);
  79649. +    for ( ; ; )
  79650. +        (void) exit(EXIT_FAILURE);
  79651. +}
  79652. +
  79653. +static int
  79654. +lowerit(a)
  79655. +const int    a;
  79656. +{
  79657. +    return (isascii(a) && isupper(a)) ? tolower(a) : a;
  79658. +}
  79659. +
  79660. +static int
  79661. +ciequal(ap, bp)        /* case-insensitive equality */
  79662. +register const char *    ap;
  79663. +register const char *    bp;
  79664. +{
  79665. +    while (lowerit(*ap) == lowerit(*bp++))
  79666. +        if (*ap++ == '\0')
  79667. +            return TRUE;
  79668. +    return FALSE;
  79669. +}
  79670. +
  79671. +static int
  79672. +itsabbr(abbr, word)
  79673. +register const char *    abbr;
  79674. +register const char *    word;
  79675. +{
  79676. +    if (lowerit(*abbr) != lowerit(*word))
  79677. +        return FALSE;
  79678. +    ++word;
  79679. +    while (*++abbr != '\0')
  79680. +        do if (*word == '\0')
  79681. +            return FALSE;
  79682. +                while (lowerit(*word++) != lowerit(*abbr));
  79683. +    return TRUE;
  79684. +}
  79685. +
  79686. +static const struct lookup *
  79687. +byword(word, table)
  79688. +register const char * const        word;
  79689. +register const struct lookup * const    table;
  79690. +{
  79691. +    register const struct lookup *    foundlp;
  79692. +    register const struct lookup *    lp;
  79693. +
  79694. +    if (word == NULL || table == NULL)
  79695. +        return NULL;
  79696. +    /*
  79697. +    ** Look for exact match.
  79698. +    */
  79699. +    for (lp = table; lp->l_word != NULL; ++lp)
  79700. +        if (ciequal(word, lp->l_word))
  79701. +            return lp;
  79702. +    /*
  79703. +    ** Look for inexact match.
  79704. +    */
  79705. +    foundlp = NULL;
  79706. +    for (lp = table; lp->l_word != NULL; ++lp)
  79707. +        if (itsabbr(word, lp->l_word))
  79708. +            if (foundlp == NULL)
  79709. +                foundlp = lp;
  79710. +            else    return NULL;    /* multiple inexact matches */
  79711. +    return foundlp;
  79712. +}
  79713. +
  79714. +static char **
  79715. +getfields(cp)
  79716. +register char *    cp;
  79717. +{
  79718. +    register char *        dp;
  79719. +    register char **    array;
  79720. +    register int        nsubs;
  79721. +
  79722. +    if (cp == NULL)
  79723. +        return NULL;
  79724. +    array = (char **) emalloc((int) ((strlen(cp) + 1) * sizeof *array));
  79725. +    nsubs = 0;
  79726. +    for ( ; ; ) {
  79727. +        while (isascii(*cp) && isspace(*cp))
  79728. +            ++cp;
  79729. +        if (*cp == '\0' || *cp == '#')
  79730. +            break;
  79731. +        array[nsubs++] = dp = cp;
  79732. +        do {
  79733. +            if ((*dp = *cp++) != '"')
  79734. +                ++dp;
  79735. +            else while ((*dp = *cp++) != '"')
  79736. +                if (*dp != '\0')
  79737. +                    ++dp;
  79738. +                else    error("Odd number of quotation marks");
  79739. +        } while (*cp != '\0' && *cp != '#' &&
  79740. +            (!isascii(*cp) || !isspace(*cp)));
  79741. +        if (isascii(*cp) && isspace(*cp))
  79742. +            ++cp;
  79743. +        *dp = '\0';
  79744. +    }
  79745. +    array[nsubs] = NULL;
  79746. +    return array;
  79747. +}
  79748. +
  79749. +static long
  79750. +oadd(t1, t2)
  79751. +const long    t1;
  79752. +const long    t2;
  79753. +{
  79754. +    register long    t;
  79755. +
  79756. +    t = t1 + t2;
  79757. +    if (t2 > 0 && t <= t1 || t2 < 0 && t >= t1) {
  79758. +        error("time overflow");
  79759. +        (void) exit(EXIT_FAILURE);
  79760. +    }
  79761. +    return t;
  79762. +}
  79763. +
  79764. +static time_t
  79765. +tadd(t1, t2)
  79766. +const time_t    t1;
  79767. +const long    t2;
  79768. +{
  79769. +    register time_t    t;
  79770. +
  79771. +    if (t1 == max_time && t2 > 0)
  79772. +        return max_time;
  79773. +    if (t1 == min_time && t2 < 0)
  79774. +        return min_time;
  79775. +    t = t1 + t2;
  79776. +    if (t2 > 0 && t <= t1 || t2 < 0 && t >= t1) {
  79777. +        error("time overflow");
  79778. +        (void) exit(EXIT_FAILURE);
  79779. +    }
  79780. +    return t;
  79781. +}
  79782. +
  79783. +/*
  79784. +** Given a rule, and a year, compute the date - in seconds since January 1,
  79785. +** 1970, 00:00 LOCAL time - in that year that the rule refers to.
  79786. +*/
  79787. +
  79788. +static time_t
  79789. +rpytime(rp, wantedy)
  79790. +register const struct rule * const    rp;
  79791. +register const int            wantedy;
  79792. +{
  79793. +    register int    y, m, i;
  79794. +    register long    dayoff;            /* with a nod to Margaret O. */
  79795. +    register time_t    t;
  79796. +
  79797. +    dayoff = 0;
  79798. +    m = TM_JANUARY;
  79799. +    y = EPOCH_YEAR;
  79800. +    while (wantedy != y) {
  79801. +        if (wantedy > y) {
  79802. +            i = len_years[isleap(y)];
  79803. +            ++y;
  79804. +        } else {
  79805. +            --y;
  79806. +            i = -len_years[isleap(y)];
  79807. +        }
  79808. +        dayoff = oadd(dayoff, eitol(i));
  79809. +    }
  79810. +    while (m != rp->r_month) {
  79811. +        i = len_months[isleap(y)][m];
  79812. +        dayoff = oadd(dayoff, eitol(i));
  79813. +        ++m;
  79814. +    }
  79815. +    i = rp->r_dayofmonth;
  79816. +    if (m == TM_FEBRUARY && i == 29 && !isleap(y)) {
  79817. +        if (rp->r_dycode == DC_DOWLEQ)
  79818. +            --i;
  79819. +        else {
  79820. +            error("use of 2/29 in non leap-year");
  79821. +            (void) exit(EXIT_FAILURE);
  79822. +        }
  79823. +    }
  79824. +    --i;
  79825. +    dayoff = oadd(dayoff, eitol(i));
  79826. +    if (rp->r_dycode == DC_DOWGEQ || rp->r_dycode == DC_DOWLEQ) {
  79827. +        register long    wday;
  79828. +
  79829. +#define LDAYSPERWEEK    ((long) DAYSPERWEEK)
  79830. +        wday = eitol(EPOCH_WDAY);
  79831. +        /*
  79832. +        ** Don't trust mod of negative numbers.
  79833. +        */
  79834. +        if (dayoff >= 0)
  79835. +            wday = (wday + dayoff) % LDAYSPERWEEK;
  79836. +        else {
  79837. +            wday -= ((-dayoff) % LDAYSPERWEEK);
  79838. +            if (wday < 0)
  79839. +                wday += LDAYSPERWEEK;
  79840. +        }
  79841. +        while (wday != eitol(rp->r_wday))
  79842. +            if (rp->r_dycode == DC_DOWGEQ) {
  79843. +                dayoff = oadd(dayoff, (long) 1);
  79844. +                if (++wday >= LDAYSPERWEEK)
  79845. +                    wday = 0;
  79846. +                ++i;
  79847. +            } else {
  79848. +                dayoff = oadd(dayoff, (long) -1);
  79849. +                if (--wday < 0)
  79850. +                    wday = LDAYSPERWEEK;
  79851. +                --i;
  79852. +            }
  79853. +        if (i < 0 || i >= len_months[isleap(y)][m]) {
  79854. +            error("no day in month matches rule");
  79855. +            (void) exit(EXIT_FAILURE);
  79856. +        }
  79857. +    }
  79858. +    if (dayoff < 0 && !tt_signed) {
  79859. +        if (wantedy == rp->r_loyear)
  79860. +            return min_time;
  79861. +        error("time before zero");
  79862. +        (void) exit(EXIT_FAILURE);
  79863. +    }
  79864. +    t = (time_t) dayoff * SECSPERDAY;
  79865. +    /*
  79866. +    ** Cheap overflow check.
  79867. +    */
  79868. +    if (t / SECSPERDAY != dayoff) {
  79869. +        if (wantedy == rp->r_hiyear)
  79870. +            return max_time;
  79871. +        if (wantedy == rp->r_loyear)
  79872. +            return min_time;
  79873. +        error("time overflow");
  79874. +        (void) exit(EXIT_FAILURE);
  79875. +    }
  79876. +    return tadd(t, rp->r_tod);
  79877. +}
  79878. +
  79879. +static void
  79880. +newabbr(string)
  79881. +const char * const    string;
  79882. +{
  79883. +    register int    i;
  79884. +
  79885. +    i = strlen(string) + 1;
  79886. +    if (charcnt + i >= TZ_MAX_CHARS) {
  79887. +        error("too many, or too long, time zone abbreviations");
  79888. +        (void) exit(EXIT_FAILURE);
  79889. +    }
  79890. +    (void) strcpy(&chars[charcnt], string);
  79891. +    charcnt += eitol(i);
  79892. +}
  79893. +
  79894. +static int
  79895. +mkdirs(name)
  79896. +char * const    name;
  79897. +{
  79898. +    register char *    cp;
  79899. +
  79900. +    if ((cp = name) == NULL || *cp == '\0')
  79901. +        return 0;
  79902. +    while ((cp = strchr(cp + 1, '/')) != 0) {
  79903. +        *cp = '\0';
  79904. +        if (!itsdir(name)) {
  79905. +            /*
  79906. +            ** It doesn't seem to exist, so we try to create it.
  79907. +            */
  79908. +            if (mkdir(name, 0755) != 0) {
  79909. +                (void) fprintf(stderr,
  79910. +                    "%s: Can't create directory ",
  79911. +                    progname);
  79912. +                (void) perror(name);
  79913. +                return -1;
  79914. +            }
  79915. +        }
  79916. +        *cp = '/';
  79917. +    }
  79918. +    return 0;
  79919. +}
  79920. +
  79921. +static long
  79922. +eitol(i)
  79923. +const int    i;
  79924. +{
  79925. +    long    l;
  79926. +
  79927. +    l = i;
  79928. +    if (i < 0 && l >= 0 || i == 0 && l != 0 || i > 0 && l <= 0) {
  79929. +        (void) fprintf(stderr, "%s: %d did not sign extend correctly\n",
  79930. +            progname, i);
  79931. +        (void) exit(EXIT_FAILURE);
  79932. +    }
  79933. +    return l;
  79934. +}
  79935. +
  79936. +/*
  79937. +** UNIX is a registered trademark of AT&T.
  79938. +*/
  79939. diff -ru --new-file baseline/fsf/emacs/unixlib/unix.doc amiga/fsf/emacs/unixlib/unix.doc
  79940. --- baseline/fsf/emacs/unixlib/unix.doc    Wed Dec 31 17:00:00 1969
  79941. +++ amiga/fsf/emacs/unixlib/unix.doc    Sun Oct 15 17:14:27 1995
  79942. @@ -0,0 +1,452 @@
  79943. +Unix compatibility library for SAS C 6.x version 1.2
  79944. +----------------------------------------------------
  79945. +
  79946. +Introduction
  79947. +------------
  79948. +
  79949. +This library provides 80 odd functions which are useful for porting
  79950. +Unix programs to the Amiga running AmigaDOS 2.04 or higher. It is thus
  79951. +similar to Markus Wild's ixemul.library, but has more restricted aims:
  79952. +
  79953. +a) It is written specifically for SAS C 6.1, 6.2, ...
  79954. +
  79955. +b) It isn't a complete C library, it requires the SAS C library to function.
  79956. +It adds some routines, and replaces others that were deficient, out of date,
  79957. +or that didn't provide adequate functionality.
  79958. +
  79959. +c) It isn't a complete Unix emulation library, it only contains those functions
  79960. +that I needed while porting various utilities (mainly from GNU) to the Amiga.
  79961. +
  79962. +d) It is a traditional C link library, not an Amiga library. This produces 
  79963. +bigger executables.
  79964. +
  79965. +Considering the above points, you might ask why I wrote it ... There are several
  79966. +good answers:
  79967. +
  79968. +a) I started it before I was aware of ixemul.library.
  79969. +
  79970. +b) ixemul.library didn't provide the features I needed for Emacs (support for
  79971. +select).
  79972. +
  79973. +c) It is easier for me to maintain when I find I need to support another Unix
  79974. +feature (eg deleting open files).
  79975. +
  79976. +Copying
  79977. +-------
  79978. +
  79979. +The library includes code that I have written, which I place in the public domain.
  79980. +This is found in all the files that don't have a Copyright notice.
  79981. +
  79982. +It also includes code which is (inclusive of my modifications)
  79983. +
  79984. + Copyright (c) 1982, 1986, 1991 The Regents of the University of California.
  79985. + All rights reserved.
  79986. +
  79987. +This code is freely redistributable (see the copyright notices in the source
  79988. +and include files).
  79989. +
  79990. +Finally it includes Doug Gwyn's public domain alloca implementation.
  79991. +
  79992. +Installation & Use
  79993. +------------------
  79994. +
  79995. +To use this library, you must compile with the include directory in your include
  79996. +search path, and link with the unix.lib library (which must be specified before
  79997. +lc.lib). For example, if you extract this archive in a directory called src:, you
  79998. +could compile the following program:
  79999. +
  80000. +echo.c:
  80001. +
  80002. +#include <sys/unistd.h>
  80003. +
  80004. +void main(int argc, char **argv)
  80005. +{
  80006. +  int i;
  80007. +
  80008. +  for (i = 1; i < argc; i++)
  80009. +    {
  80010. +      if (i != 1) write(1, " ", 1);
  80011. +      write(1, argv[i], strlen(argv[i]));
  80012. +    }
  80013. +  write(1, "\n", 1);
  80014. +}
  80015. +
  80016. +with the command
  80017. +
  80018. +  sc idir src:unix/include/ lib src:unix/src/unix.lib link echo.c
  80019. +
  80020. +to produce a simple unix-like echo command.
  80021. +
  80022. +You should define the following environment variables:
  80023. +
  80024. +USER - A user name for the sole Amiga user (default "user").
  80025. +USERNAME - The full name of the sole Amiga user (default $USER).
  80026. +HOME - A "home" directory (default "s:") for programs that want one. Configuration
  80027. +       files will probably end up here ...
  80028. +SHELL - A program which behaves reasonably like a Unix shell (default "bin:sh").
  80029. +    You should copy the sh executable there if you don't have a Unix-like shell.
  80030. +HOSTNAME - The name of your machine (default "amiga").
  80031. +
  80032. +If you are going to be using pipes, you will require Matt Dillon's fifo.library
  80033. +and fifo: device. This can be found on the Fish disks, with his UUCP distribution
  80034. +and on many FTP sites.
  80035. +
  80036. +If you want to install the timezone information (see the discussion below on
  80037. +Unix vs Amiga time), do the following:
  80038. +
  80039. +  a) change to the zoneinfo directory
  80040. +  b) compile the zic problem by running lmk.
  80041. +  c) change to the datfiles directory.
  80042. +  d) edit lmkfile and choose your timezone (you can look at the data files
  80043. +     to see the ones available). If you get this wrong, you can always change
  80044. +     it later with the zic program.
  80045. +  e) type 'lmk install'. This will compile the timezones, and setup the one
  80046. +     you chose as the default. The default can be changed with
  80047. +       zic -l <timezone name>
  80048. +
  80049. +     or by defining the environment variable TZ.
  80050. +
  80051. +Functionality
  80052. +-------------
  80053. +
  80054. +While this library aims to hide the differences between AmigaDOS & Unix, 
  80055. +it also aims to provide support for Amiga specific features. This sometimes
  80056. +produces strange compromises.
  80057. +
  80058. +This library provides two things to programs linked with it:
  80059. +
  80060. +a) A Unix-like environment:
  80061. +
  80062. +This includes:
  80063. +
  80064. +- Unix-like command line parsing, with wildcard expansion. These
  80065. +wildcards are however specified with the Amiga syntax. 
  80066. +
  80067. +Arguments which are unquoted or surround with single quotes are
  80068. +handled like Unix shells. Those surrounded with double quotes are
  80069. +handled in the Amiga fashion, but with wildcard expansion (this is
  80070. +done to avoid problems with the way the exec function works).
  80071. +
  80072. +Here is a summary of argument splitting:
  80073. +
  80074. +Arguments can be enclosed in single quotes, (') double quotes ("), or 
  80075. +separated by spaces.
  80076. +
  80077. +Arguments enclosed by single quotes never suffer wildcard expansion, and
  80078. +no character is significant inside them (not even \). Given the echo program
  80079. +given above,
  80080. +
  80081. +  echo 'f*un\'
  80082. +
  80083. +simply displays
  80084. +
  80085. +  f*un\
  80086. +
  80087. +Within double quotes, * is the standard Amiga escape character. \ is
  80088. +handled just like any other character. Wildcards are expanded. So,
  80089. +assuming the current directory contains only echo.c and echo,
  80090. +
  80091. +  echo "#?.c" "*.c" "\mad"
  80092. +
  80093. +displays
  80094. +
  80095. +  echo.c .c \mad
  80096. +
  80097. +(* escapes the following character, except that *N is newline and *E is 
  80098. +escape. Wildcard characters still behave as usual (' is the standard
  80099. +Amiga wildcard escape character)).
  80100. +
  80101. +If an argument is unquoted, \ acts as an escape character (removing
  80102. +special significance from the next character, be it a wildcard, a space, 
  80103. +a \, ...). So
  80104. +
  80105. +  echo \*.c \\ \n
  80106. +
  80107. +displays
  80108. +
  80109. +  *.c \ n
  80110. +
  80111. +- When a program is run from the Workbench, stdin, stdout & stderr are opened 
  80112. +on NIL:, and the icons selected are converted to file names and passed as the
  80113. +argc,argv to main.
  80114. +
  80115. +- The standard variable environ is defined and contains all the local environment
  80116. +variables. This is passed as the envp parameter to main.
  80117. +
  80118. +- The program is led to believe that all files belong to $USER (uid 1), group
  80119. +wheel (gid 0).
  80120. +
  80121. +- Amiga protection flags are mapped onto the standard 12 Unix protection bits
  80122. +(and back when necessary). This can be overridden (dynamically) by changing the
  80123. +value of use_amiga_flags. Eg:
  80124. +
  80125. +  extern int use_amiga_flags;
  80126. +
  80127. +  ...
  80128. +
  80129. +
  80130. +  main()
  80131. +  {
  80132. +    use_amiga_flags = 1;
  80133. +
  80134. +    ... some code using stat or chmod or ...
  80135. +  }
  80136. +
  80137. +In this case, the Amiga protection bits are left untouched. Otherwise the
  80138. +mapping is as follows (note that the archive bit is lost):
  80139. +
  80140. +Unix -> Amiga
  80141. +
  80142. +Amiga read: if user, group or world read.
  80143. +Amiga write: if user or group write.
  80144. +Amiga delete: if user or world write.
  80145. +Amiga execute: if group execute or only user execute.
  80146. +Amiga script: if world execute or only user execute.
  80147. +Amiga pure: if sticky.
  80148. +
  80149. +Amiga -> Unix
  80150. +
  80151. +user, group, world read: if amiga read.
  80152. +user write: if amiga write and delete.
  80153. +group write: if amiga write.
  80154. +world write: if amiga delete.
  80155. +user execute: if amiga execute or amiga script.
  80156. +group execute: if amiga execute.
  80157. +world execute: if amiga script.
  80158. +sticky: if amiga pure.
  80159. +
  80160. +- Unix-like time. time is expressed in seconds since 1-Jan-1970 00:00 GMT. 
  80161. +This is the format used by the time(), stat() and utime() functions. The
  80162. +library uses the BSD time functions which properly handle timezones, 
  80163. +daylight savings time, etc. 
  80164. +
  80165. +On Unix systems, time is generally stored as GMT, while the Amiga stores
  80166. +local time. These times are visible in two places: the time stored in the
  80167. +system clock and the creation, modification or access dates for files (only
  80168. +the modification date is available on the Amiga). There are 3 ways to resolve
  80169. +this conflict:
  80170. +
  80171. +1) Ignore timezones (you can choose this option by not installing the
  80172. +timezone information). The library will then assume that system time
  80173. +and file times are expressed in GMT and will never apply any
  80174. +corrections. All will work well (except maybe on a global network).
  80175. +This is the simplest solution.
  80176. +
  80177. +2) System & file time are assumed to be local times. The time() & stat()
  80178. +functions convert local time to GMT, the utime() call converts GMT to
  80179. +local time. This allows you to keep the system clock on local time, which
  80180. +is compatible with most (all?) Amiga applications. However, nearly every
  80181. +program will be bigger because they will need the timezone information and
  80182. +timezone conversion code (approximately 7k). The library can be recompiled
  80183. +if you prefer to have things this way by adding -dUSE_LOCAL to the CFLAGS
  80184. +variable in lmkfile.
  80185. +
  80186. +3) System & file time are stored in GMT. Times are converted to local time
  80187. +only when they are displayed to the user, who must of course choose the 
  80188. +correct timezone. This entails changing your system clock to GMT, which means
  80189. +that most programs will display an incorrect time. However, you won't have
  80190. +to change your system clock when daylight savings time ends ... The library
  80191. +comes compiled this way (But you can still choose option 1, no timezone
  80192. +information, and avoid the potential confusion).
  80193. +
  80194. +- BSD-like signals. Signal handlers stay enabled after a signal occurs
  80195. +(that particular signal is simply masked for the duration of the handler).
  80196. +setjmp & longjmp preserve the signal mask (the functions _setjmp & _longjmp
  80197. +don't). You may receive any signal with kill(getpid(), sig). Otherwise only
  80198. +the following occur:
  80199. +
  80200. +  SIGINT: user typed ctrl-c
  80201. +  SIGQUIT: user typed ctrl-d
  80202. +  SIGALRM: alarm() expired
  80203. +  SIGCHLD: a child process died
  80204. +
  80205. +When using kill to signal another process, only SIGHUP, SIGINT, SIGQUIT & 
  80206. +SIGKILL do anything. They all send SIGBREAKF_CTRL_C | D to the process (and
  80207. +hopefully its children). See the discussion under the exec function.
  80208. +
  80209. +
  80210. +b) A large number of unix C library calls:
  80211. +
  80212. +_exit, _setjmp, _longjmp, abort, access, alloca, gettimeofday, ftime, 
  80213. +bcmp, bcopy, bzero, chmod, chown, fchown, close, creat, tzset, tzsetwall,
  80214. +localtime, gmtime, asctime, ctime, mktime, opendir, closedir, readdir, 
  80215. +telldir, seekdir, fchmod, fcntl, fstat, ftruncate, getenv, gethostname,
  80216. +getpid, getwd, getgid, getegid, getgrgid, getgrnam, index, ioctl, isatty,
  80217. +kill, link, lseek, mkdir, mkfifo, mknod, mktemp, open, perror, pipe, sktpair, 
  80218. +getpwuid, getpwnam, getlogin, read, rename, rindex, rmdir, select, setjmp, 
  80219. +longjmp, signal, sigpause, sigsetmask, sleep, stat, strftime, time, truncate,
  80220. +getuid, geteuid, umask, unlink, utime, wait, waitpid, wait3, wait4, write,
  80221. +readlink, symlink, popen, pclose.
  80222. +
  80223. +These functions aim to be BSD compatible, however I based myself on descriptions
  80224. +in the SunOS 4 man pages. Their behaviour is sometimes strange or incomplete.
  80225. +
  80226. +Here is a summary of the differences with the standard Unix functions:
  80227. +
  80228. +alloca - This is Doug Gwyn's portable alloca. Memory allocated is freed
  80229. +later than with a true alloca.
  80230. +
  80231. +gettimeofday - The dst field of the timezone is a (not very good) guess. It
  80232. +shouldn't be used anyway.
  80233. +
  80234. +chown, fchown - These are do-nothing routines.
  80235. +
  80236. +opendir, closedir, ... - These interact with stat to avoid having to read
  80237. +each directory entry twice when doing a readdir + stat loop.
  80238. +
  80239. +fchmod - The protection is only set when the file is closed. See also the
  80240. +discussion of protection modes above.
  80241. +
  80242. +fcntl - Only the F_GETFL & F_SETFL operations are supported.
  80243. +
  80244. +truncate, ftruncate - These will not necessarily work with all filing systems.
  80245. +See the discussion of the AmigaDOS SetFileSize function.
  80246. +
  80247. +getenv - This checks local environment variables and then global ones. It 
  80248. +allocates memory for the variables value each time. This memory is never freed
  80249. +(till the program exits).
  80250. +
  80251. +gethostname - This is obtained from the HOSTNAME environment variable at startup.
  80252. +
  80253. +getuid, geteuid, getgid, getegid, getpwuid, getpwnam, getgrgid, getgrnam, getlogin -
  80254. +These function only know about one user. He/She is:
  80255. +
  80256. +  name: $USER (default "user")
  80257. +  home directory: $HOME (default "s:")
  80258. +  shell: $SHELL (default "bin:sh")
  80259. +  uid: 1, gid: 0
  80260. +
  80261. +ioctl - Only FIONBIO & TIOCGWINSZ are known, plus a number of amiga specific
  80262. +ioctls (for internal use). These are documented in include/amiga/ioctl.h.
  80263. +
  80264. +lseek - Seeks beyond the end of a file are not implemented.
  80265. +
  80266. +mkfifo, mknod - These are 'do-nothing' routines.
  80267. +
  80268. +pipe - This uses Matt Dillon's fifo.library and fifo: device. It works well
  80269. +for interactive use, but not for transfering large quantities of data.
  80270. +
  80271. +select - This implementation only works with pipes & sktpairs, and cannot
  80272. +detect 'exceptional' conditions.
  80273. +
  80274. +sigvec - The flags are not recognized.
  80275. +
  80276. +symlink - Symbolic links on the Amiga are far too buggy and should not be used.
  80277. +By default, as compiled, this routine always returns an error. However readlink
  80278. +does work, so you can read existing symbolic links.
  80279. +
  80280. +umask - This is a 'do-nothing' routine.
  80281. +
  80282. +unlink - You can unlink a file that your program has opened before you close
  80283. +it. At that point, the AmigaDOS file is closed & deleted, though it still
  80284. +appears open to read (it returns EOF), write, close, etc. Also you can unlink
  80285. +a file even if it is protected from deletion (the protection mode is changed
  80286. +first ...).
  80287. +
  80288. +utime - Only the modification time can be changed (the others don't exist).
  80289. +
  80290. +wait3, wait4 - Resource usage is never returned.
  80291. +
  80292. +exec
  80293. +----
  80294. +
  80295. +vfork() and execxx() are very tricky to implement. So I took the easy
  80296. +(but see below) way out, providing a function, eexec, that create a
  80297. +new process given argc, argv.  This functions returns a pid which can
  80298. +be used with wait, waitpid, ... as usual. Also exiting processes
  80299. +generate the SIGCHLD signal. With this, it is generally fairly easy to
  80300. +replace the process creation parts of most Unix programs.
  80301. +
  80302. +First, here is a description of the problems which arise:
  80303. +
  80304. +Executing an external program is tricky with AmigaDOS. The various system
  80305. +routines (CreateNewProc, SystemTags, Execute) allow some operations to be
  80306. +done easily, but make others difficult. Specifically, if you want to do all
  80307. +of the following:
  80308. +
  80309. +- Execute a program given argc, argv (like with unix)
  80310. +- Specify arbitrary input, output and error streams, including inheriting
  80311. +the current ones.
  80312. +- Have some of these streams be pipes of which you keep one end.
  80313. +- Have some of these pipes appear to be interactive (this is used for example
  80314. +by programs running inside emacs).
  80315. +- Detect when the execute program exits, and get its return code.
  80316. +- Send signals (eg ctrl-c) to the created process, and preferably its children.
  80317. +
  80318. +you are in deep trouble. A minimum of 10 attempts is needed to get
  80319. +something which works most of the time, ie the eexec function.
  80320. +
  80321. +The problems are:
  80322. +- You have to make a command line from argc, argv. But these arguments may
  80323. +contain spaces, so they must be surrounded by double quotes. And then, '*'
  80324. +must be escaped as it is the escape character. And so on.
  80325. +- Only recently has an error stream appeared in AmigaDOS. And it doesn't
  80326. +inherit very well (Indeed, specifying the error stream doesn't work in the
  80327. +current version).
  80328. +- Amiga programs generally expect interactive files to be console windows.
  80329. +And fifo: is the only interactive pipe I'm aware of. So the pipe: system
  80330. +call uses fifo: and fifo.library.
  80331. +- To get the return code of an application, you must use the synchronous
  80332. +version of SystemTags. Otherwise it is lost. But you want an asynchronous
  80333. +process facility. So I create 2 processes, the first one is created with
  80334. +CreateNewProc and executes a custom piece of code. This code launches
  80335. +the real program with SystemTags, and sends a message with the return code
  80336. +to its parent (if it is still around).
  80337. +- You can't find the children of a process. So the signal is sent to all
  80338. +the processes that share the input filehandle of the created process. This
  80339. +is the best solution that I found.
  80340. +- AmigaDOS isn't Unix.
  80341. +
  80342. +Therefore, the eexec function is far from perfect. It works as follows:
  80343. +
  80344. +eexec(program, argv, input, output, error, directory, stacksize)
  80345. +
  80346. +  program: the path of the executable file. Your path is searched.
  80347. +  argv: A null terminated array of arguments. The first (argv[0]) is ignored.
  80348. +  input: A unix filehandle on the desired input. -1 means copy Input().
  80349. +  output: A unix filehandle on the desired output. -1 means copy Output().
  80350. +  error: A unix filehandle on the desired error stream. -1 means copy the pr_CES
  80351. +     field of the current process, -2 means copy the value specified for output.
  80352. +         Currently, this parameter has no effect.
  80353. +  directory: pathname for the current directory for the created process, or NULL
  80354. +         to inheir the current processes'.
  80355. +  stacksize: stack size for the created process. 0 means the same size as the 
  80356. +         current stack.
  80357. +  
  80358. +_start_process is a lower level interface:
  80359. +
  80360. +_start_process(command, input, close_input, output, close_output,
  80361. +           error, close_error, dir, stacksize)
  80362. +  command: the string to pass to SystemTags (it will be passed to
  80363. +    the UserShell, not the system default).
  80364. +  input, output, error, close_xxx: AmigaDOS filehandles for use as the
  80365. +    appropriate stream. If close_x is true, the corresponding stream will be
  80366. +    closed when the process exits.
  80367. +  dir: Lock on the desired directory for the new process.
  80368. +  stacksize: as above.
  80369. +
  80370. +
  80371. +Recompiling
  80372. +-----------
  80373. +
  80374. +To recompile, simply run lmk in the src directory. You can add the -dUSE_LOCAL
  80375. +flag to CFLAGS in lmkfile if you want the system clock to store local time 
  80376. +instead of GMT.
  80377. +
  80378. +If you want symlink to work, add -dSOFTLINK to CFLAGS (For example, tar uses
  80379. +a version of unix.lib compiled like this).
  80380. +
  80381. +If you add modules, you can use the mkmkf to remake the makefile dependencies
  80382. +(it generates lmkfile from lmkfile.base and the dependencies for all the .c
  80383. +files in the current directory). This program requires perl (available from
  80384. +ftp sites).
  80385. +
  80386. +
  80387. +Changes from 1.0 to 1.1
  80388. +-----------------------
  80389. +stat() now returns a value for st_dev.
  80390. +exec() extended by eexec, assembly part rewritten in C.
  80391. +symbolic links recognized. Their use is not recommended (too buggy).
  80392. +sigvec added.
  80393. +popen, pclose added.
  80394. +Documentation discusses exec.
  80395. Binary files baseline/tmp.tar and amiga/tmp.tar differ
  80396.